web-dev-qa-db-fra.com

envoyer la valeur de la case à cocher au format PHP

J'ai une question concernant un formulaire php. J'ai ajouté une case à cocher au formulaire existant, mais je ne sais pas comment l'ajouter au php. Je voudrais qu'il envoie "oui" si les visiteurs le vérifient, et "non" s'il ne l'est pas.

<form method="POST" name="contactform" action="contact-form-handler.php"> 
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<input type="tel" name="tel" placeholder="phome"> <br>
</p>
<p>
<input type="text" name="email" placeholder="mail"> <br>
</p>
<p>
<input type="checkbox" name="newsletter[]" value="newsletter" checked>i want to sign up   for newsletter<br>
</p>
<input type="submit" value="Submit"><br>
</form>

voici le code php du formulaire, tout sauf la case à cocher. j'ai besoin de connaître sa valeur lorsque je reçois le courrier. par exemple: "Nom: John, Email: [email protected], Tel: 12345, Newsletter: Oui"

<?php 
$errors = '';
$myemail = '[email protected]';//<-----Put Your email address here.
if(empty($_POST['name'])  || 
   empty($_POST['email']) || 
   empty($_POST['tel']))
{
    $errors .= "\n Error: all fields are required";
}

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['tel']; 


if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
$email_address))
{
    $errors .= "\n Error: Invalid email address";
}

if( empty($errors))
{
    $to = $myemail; 
    $email_subject = "Contact form submission: $name";
    $email_body = "You have received a new message. ".
    " Here are the details:\n Name: $name \n Email: $email_address \n Tel \n $message\n Newsletter \n $newsletter"
}
    ; 


    $headers = "From: $myemail\n"; 
    $headers .= "Reply-To: $email_address";

    mail($to,$email_subject,$email_body,$headers);
    //redirect to the 'thank you' page
    header('Location: contact-form-thank-you.html');
} 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>
<head>
    <title>Contact form handler</title>
</head>

<body>
<!-- This page is displayed only if there is some error -->
<?php
echo nl2br($errors);
?>


</body>
</html>

Merci,

7
Pavel

Voici à quoi cela devrait ressembler pour renvoyer un simple Yes lorsqu'il est vérifié.

<input type="checkbox" id="newsletter" name="newsletter" value="Yes" checked>
<label for="newsletter">i want to sign up for newsletter</label>

J'ai également ajouté le texte sous forme d'étiquette, cela signifie que vous pouvez également cliquer sur le texte pour cocher la case. Petit mais, personnellement, je déteste quand les sites me font pointer ma souris sur cette toute petite case à cocher.

Lorsque le formulaire est soumis si la case est cochée $_POST['newsletter'] sera égal à Yes. Juste comment vous vérifiez pour voir si $_POST['name'], $_POST['email'], et $_POST['tel'] sont vides, vous pouvez faire de même.

Voici un exemple de la façon dont vous ajouteriez cela dans votre e-mail du côté php:

Sous votre code existant:

$name = $_POST['name'];
$email_address = $_POST['email'];
$message = $_POST['tel'];

Ajouter:

$newsletter = $_POST['newsletter'];
if ($newsletter != 'Yes') {
    $newsletter = 'No';
}

Si la case est cochée, elle ajoutera Yes dans votre e-mail. Si elle n'est pas cochée, elle ajoutera No.

12
Kirill Fuchs

Si la case est cochée, vous obtiendrez une valeur pour celle-ci dans votre $_POST tableau. Si ce n'est pas le cas, l'élément sera complètement omis du tableau.

La façon la plus simple de le tester est la suivante:

if (isset($_POST['myCheckbox'])) {
  $checkBoxValue = "yes";
} else {
  $checkBoxValue = "no";
}

Pour votre code, ajoutez-le immédiatement en dessous de l'autre prétraitement:

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['tel']; 

if (isset($_POST['newsletter'])) {
  $newsletter = "yes";
} else {
  $newsletter = "no";
}

Vous devrez également modifier légèrement le code HTML. Modifiez cette ligne:

<input type="checkbox" name="newsletter[]" value="newsletter" checked>i want to sign up for newsletter<br>

pour ça:

<input type="checkbox" name="newsletter" value="newsletter" checked>i want to sign up   for newsletter<br>
                                      ^^^ remove square brackets here.
11
user1864610
if(isset($_POST["newsletter"]) && $_POST["newsletter"] == "newsletter"){
    //checked
}
2
Heinrich

essayez de changer cette partie,

<input type="checkbox" name="newsletter[]" value="newsletter" checked>i want to sign up   for newsletter

pour ça

<input type="checkbox" name="newsletter" value="newsletter" checked>i want to sign up   for newsletter
2
John

remplacer:

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['tel']; 

avec:

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['tel'];
if (isset($_POST['newsletter'])) {
  $checkBoxValue = "yes";
} else {
  $checkBoxValue = "no";
}

puis remplacez cette ligne de code:

$email_body = "You have received a new message. ".
    " Here are the details:\n Name: $name \n Email: $email_address \n Tel \n $message\n Newsletter \n $newsletter"

avec:

$email_body = "You have received a new message. ".
    " Here are the details:\n Name: $name \n Email: $email_address \n Tel \n $message\n Newsletter \n $newsletter";
1
abhiklpm