J'ai un formulaire et j'essaie d'y ajouter une sécurité et une validation de base:

J'essaye de créer une variable $error pour afficher des messages d'erreur si les champs sont laissés vides.

Actuellement, si je laisse le champ de nom et le bouton radio vides, je ne vois qu'un message d'erreur relatif au bouton radio vide et non au champ de nom vide.

J'essaie de garder ce formulaire aussi simple que possible, mais je veux juste ajouter une sécurité et une validation de base.

Quelqu'un peut-il aider?

C'est mon formulaire HTML:

<?php
if(@$_REQUEST['submit'] == '1') {
    include('assets/forms/rsvp.php');
}
?>

        <form action="?" method="post">
            <?php if(@$errors) :?>
                <p class="errors"><?php echo $errors; ?></p>
            <?php endif; ?>
            <input type="hidden" name="submit" value="1" />
            <div class="form-row">
                <div class="field-l">
                    <p>Name</p>
                </div>
                <div class="field-r">
                    <p>Attending?</p>
                </div>
            </div>
            <div class="form-row guest">
                <div class="field-l">
                    <input type="text" name="name[0]" id="name" value="" tabindex="1" />
                </div>
                <div class="field-r">
                    <input type="radio" name="coming[0]" id="coming-yes" class="coming-yes" value="Yes"><label for="coming-yes">Yes</label><input type="radio" name="coming[0]" id="coming-no" class="coming-no" value="No"><label for="coming-no">No</label>
                </div>
            </div>
            <a class="addguest" href="#">Add further guest</a>
            <div class="form-row">
                <button type="submit" id="rsvp-submit" tabindex="2">Submit RSVP</button>
            </div>
        </form>

Voici mon code de processus de formulaire:

<?php

//echo "<pre>" . print_r($_POST, true) . "</pre>"; die();

if (isset($_POST['name'])) {
    $name = strip_tags(trim($_POST['name']));
}
if (isset($_POST['coming'])) {
    $coming = strip_tags(trim($_POST['coming']));
}

$errors = "";
if(!@$_POST['name'])    { $errors .= "Please enter your name.<br/>\n"; }
if(!@$_POST['coming'])  { $errors .= "Please enter yes or no for attending.<br/>\n"; }

if(@$_POST['emailaddress'] != '')   { $spam = '1'; }

if (!$errors && @$spam != '1')
    {
        $to = "example@xyz.com";
        $subject = "Wedding RSVP";
        $headers = "From: noreply@adrianandemma.com";
        $body = "The following RSVP has been sent via the website.\n\n";
        for($i=0; $i < count($_POST['name']); $i++) {
            $body .= "
            Name ".($i+1)." : " . $_POST['name'][$i] . "\n
            Coming ".($i+1)." : " . $_POST['coming'][$i] ."\n\n";
        }
        $body .= "\n\nDate Received: " . date("j F Y, g:i a") . "\n";

        mail($to,$subject,$body,$headers);
    }

?>
1
ade123 20 avril 2017 à 00:48

3 réponses

Meilleure réponse

Votre problème est que vous envoyez ces variables POST sous forme de tableau, mais en les traitant comme une chaîne. Vous devez parcourir chacun d'eux individuellement:

<?php
$errors = "";
foreach ($_POST["name"] as $index=>$name) {
    if (empty($name)) {
        $errors .= "Name missing from entry $index.<br/>\n";
    }
}
foreach ($_POST["coming"] as $index=>$coming) {
    if (empty($coming)) {
        $errors .= "Please enter attendance for entry $index.<br/>\n";
    }
}

if ($errors === "") {
    $to = "example@xyz.com";
    $subject = "Wedding RSVP";
    $headers = "From: noreply@adrianandemma.com";
    $body = "The following RSVP has been sent via the website.\n\n";
    foreach($_POST["name"] as $i=>$name) {
        $coming = $_POST["coming"][$i];
        $num = $i + 1;
        $body .= "Name $num : $name\nComing $num : $coming\n\n";
    }
    $body .= "\n\nDate Received: " . date("j F Y, g:i a") . "\n";

    mail($to,$subject,$body,$headers);
}
1
miken32 12 sept. 2017 à 23:34

Utiliser empty() suffirait à vérifier.

if(empty($_POST['field'])){
 //Your code//
}

Et pour plus de sécurité, utilisez strlen()

if(strlen($_POST['field']) == 0){
 //Your code//
}

Combiner les deux if(strlen($field) < 0 || empty($field)){//code}

1
Calibur Victorious 19 avril 2017 à 22:03

If (strlen ($ _ POST ['nom']) == 0) {

$ errors = "Veuillez entrer votre nom";

}
// strlen () == 0 signifie que le champ de nom est vide

-1
hans-könig 19 avril 2017 à 22:03