2017-03-22 2 views
0

Hallo, ich habe ein seltsames Problem. Ich habe ein Formular mit PHP-Validierung, aber selbst wenn die Formularfelder leer sind, wird das Formular noch übergeben. Unten ist mein Code ... Kannst du mir bitte sagen, was hier vor sich geht?PHP-Formular reicht, wenn Formular leer ist und Validierung ist vorhanden

Auch gibt es 2 Formulare auf der gleichen Seite. beide mit der $_SERVER['PHP_SELF'] Aktion.

Der Arbeitsablauf besteht darin, dass der Benutzer das erste Formular verwendet, um ein Preisrad zu drehen (Validierung funktioniert in diesem Formular), und nach einer erfolgreichen Übergabe erscheint das Zahlenauswahlfeld.

Wenn der Spinner auf einem Gewinnsegment landet, erscheint das zweite Formular (Welches ist das, das leer wird) Wenn ich auf das zweite Formular klicke, erscheint das erste Formular erneut und ignoriert die zweite Formularvalidierung. Ich bin sicher, es ist sicher, dass es ist, weil die Seite erfrischend ist. Gibt es eine Möglichkeit, dies zu umgehen?

$nameErr = $lNameErr = $pCodeErr = $successMessage = $errorMessage = ""; 
$name = $lName = $pCode = ""; 

$errors = 0; 
$regex = '^[a-zA-Z0-9]{3}()?[a-zA-Z0-9]{3}$^'; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    if (empty($_POST["name"])) { 
     $nameErr = "First Name is required"; 
     $errors++; 
    }else { 
     $name = test_input($_POST["name"]); 
    } 

    if (empty($_POST["lName"])) { 
     $lNameErr = "Last Name is required"; 
     $errors++; 
    }else { 
     $lName = test_input($_POST["lName"]); 
    } 

    if (empty($_POST["pCode"])) { 
     $pCodeErr = "Postal Code is required"; 
     $errors++; 
    }else { 
     $pCode = test_input($_POST["pCode"]); 

     // check if e-mail address is well-formed 
     if (!preg_match($regex, $_POST["pCode"])) { 
      $pCodeErr = "Invalid Postal Code format"; 
      $errors++; 
     } 
    } 

    if($errors == 0){ 
     $duplicate = $conn->prepare("SELECT `Pcode` FROM `winners` WHERE `Pcode` = ?"); 
     $query->bindValue(1, $email); 
     $query->execute(); 
     if($duplicate->rowCount() > 0) { 
      $errorMessage = "Sorry this user is already in our database!"; 
     } else { 
      $successMessage = "Form Submission Successful!"; 
      $sql = "INSERT INTO winners (Fname, Lname, Pcode) VALUES (:fName, :lName, :pCode)"; 
      $stmt = $conn->prepare($sql); 
      // $stmt->bindParam(':email', $email, PDO::PARAM_STR); 
      $stmt->bindParam(':fName', $name, PDO::PARAM_STR); 
      $stmt->bindParam(':lName', $lName, PDO::PARAM_STR); 
      $stmt->bindParam(':pCode', $pCode, PDO::PARAM_STR); 
      $stmt->execute(); 
     } 
    } 
} 

und hier ist meine Form

<form id="winner-form" class="spin-form" method = "post" action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

    <p>To claim your prize please fill in the form below.</p> 
    <div class="form-group"> 
     <label>Name:</label> 
     <input class="form-control" placeholder="Please enter your First Name" value="<?php echo $name;?>" type = "text" name = "name"> 
     <span class = "error">* <?php echo $nameErr;?></span> 
    </div> 

    <div class="form-group"> 
     <label>Last Name:</label> 
     <input class="form-control" placeholder="Please enter your Last Name" value="<?php echo $lName;?>" type = "text" name = "lName"> 
     <span class="error">* <?php echo $lNameErr;?></span> 
    </div> 

    <div class="form-group"> 
     <label>Postal Code:</label> 
     <input class="form-control" placeholder="Please enter your Postal Code" value="<?php echo $pCode;?>" type = "text" name = "pCode"> 
     <span class="error">* <?php echo $pCodeErr;?></span> 
    </div> 

    <td> 
     <input class="btn btn-lg btn-success" type="submit" name="sub" value="Submit"> 
    </td> 

    <?php if($successMessage != "") { ?> 
     <span class ='alert alert-success'><?php echo $successMessage; ?></span> 
    <?php } ?> 

    <?php if($errorMessage != "") { ?> 
     <span class ='alert alert-danger'><?php echo $errorMessage; ?></span> 
    <?php } ?> 

</form> 
+0

PHP kann nicht verhindern, dass ein Formular übermittelt wird. Das ist auf der Clientseite, PHP ist auf der Serverseite. – miken32

+0

Auch hier gibt es nur ein Formular, und Ihre erste Datenbankabfrage funktioniert nicht, weil Sie keinen Parameter an sie übergeben. – miken32

Antwort

0

Leider kann ich nicht kommentieren, weil ich weniger guten Ruf haben, entgraten Sie Benutzer von der Abgabe leerer Werte verhindern können, wenn Sie eine SQL Null auf nicht prüfen gesetzt. Oder auf Phps Ende.

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (isset($_POST["name"]) == "") { 
     $nameErr = "First Name is required"; 
     $errors++; 
    } 
} 

Oder

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if ($_POST["name"]) == Null) { 
     $nameErr = "First Name is required"; 
     $errors++; 
    } 
} 

Aber sollte er am besten, um ein Formular-Validierung Funktion Schreiben verwenden, Javascript oder Jquery. Was auch immer du bevorzugst. Ich hoffe mein angenommener Kommentar war hilfreich. :)

Verwandte Themen