2016-05-02 8 views
0

Ich versuche, Formularfelder zu validieren und dann die Formulardaten in eine Datenbank einzufügen. Mein Formular wird nach dem Klicken auf die Senden-Schaltfläche zweimal gesendet, nachdem alle Feldwerte korrekt sind. Tatsächlich werden Formularfelder validiert und die Aktion ändert sich durch einmaliges Klicken auf Senden. Wenn die Aktion aktiviert ist, wird das Formular durch Klicken auf Senden gesendet.Wie man Formularfelder validiert und dann in die Datenbank einfügt, indem ich einmal auf abschicken klicke

Kann mir jemand sagen, wie es eingereicht werden kann, indem Sie nur einmal auf Senden Schaltfläche klicken.

Hier ist mein HTML-Code mit Skript Validierung php auf derselben Datei

<html> 
<head> 
    <title></title> 
    <style> .error {color:#ff0000;} </style> 
</head> 
<body> 
    <?php 
     $companyNameErr = $addressErr = $emailErr = $contactErr = ""; 
     $companyName = $address = $email = $contact = $description = ""; 
     function test_data($data) 
     { 
      $data=trim($data); 
      $data=stripslashes($data); 
      $data=htmlspecialchars($data); 
      return $data; 
     } 
     $errors = array(); 
     $valid=0; 
     if ($_SERVER["REQUEST_METHOD"] =="POST") 
     { 

      $companyName=$_POST["companyName"]; 
      if(empty($companyName)) 
      { 
       $companyNameErr = "Please Enter Company Name"; 
       $errors[]= $companyNameErr ; 
      } 
      else 
      { 
       if(!preg_match("/^[a-zA-Z ]*$/",$companyName)) 
       { 
        $companyNameErr = "Invalid Company Name"; 
        $errors[]= $companyNameErr ; 
       } 
       else 
       { 
        $companyName=test_data($companyName); 
        $valid++; 

       } 
      } 
      $address=$_POST["address"]; 
      if(empty($address)) 
      { 
       $addressErr = "Please Enter Address"; 
       $errors[]= $addressErr ; 
      } 
      else 
      { 
       $address=test_data($address); 
       $valid++; 
      } 
      $email=$_POST["email"]; 
      if(empty($email)) 
      { 
       $emailErr = "Please Enter Email"; 
       $errors[]= $emailErr ; 
      } 
      else 
      { 
       if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
       { 
        $emailErr = "Invalid Email"; 
        $errors[]= $emailErr ; 
       } 
       else 
       { 
        $email=test_data($email); 
        $valid++; 
       } 
      }  
      $contact=$_POST["contact"]; 
      if(empty($contact)) 
      { 
       $contactErr = "Please Enter Contact Number"; 
       $errors[]= $contactErr ; 
      } 
      else 
      { 
       if(!preg_match("/^[0-9]*$/",$contact)) 
       { 
        $contactErr = "Invalid Contact"; 
        $errors[]= $contactErr ; 
       } 
       else 
       { 
        $contact=test_data($contact); 
        $valid++; 
       } 
      } 
    } 
    if($valid==4) 
    { 

    } 
    ?> 
    <form name="myform" method="post" action="<?php if($valid < 4){ echo $_SERVER["PHP_SELF"]; }else{ echo "validate1.php"; }?>" > 
     <table> 
      <tr> 
       <td>Company Name</td> 
       <td><input type="text" name="companyName" value ="<?php if(isset($_POST['companyName']) && empty($companyNameErr)){ echo $_POST['companyName'];} else {echo '';}?>" required ><span class="error"><sup>*</sup><?php echo $companyNameErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Address</td> 
       <td><input type="text" name="address" value ="<?php if(isset($_POST['address']) && empty($addressErr)){ echo $_POST['address'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $addressErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Email</td> 
       <td><input type="text" name="email" value ="<?php if(isset($_POST['email']) && empty($emailErr)){ echo $_POST['email'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $emailErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Contact</td> 
       <td>+91-<input type="text" name="contact" value ="<?php if(isset($_POST['contact']) && empty($contactErr)){ echo $_POST['contact'];} else {echo '';}?>" required maxlength="10" minlength="10"><span class="error"><sup>*</sup><?php echo $contactErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Description</td> 
       <td><textarea name="description" cols="60" rows="3"></textarea></td> 
      </tr> 
     </table> 
     <input type="submit" name="submit" value="next>>"> 
    </form> 
</body> 

Code php Angabe Verbindung mit und dann Werte in die Datenbank eingefügt in eine andere Datei ist

<html> 
<head> 
    <title></title> 
</head> 
<body>  
<?php 
    $servername="localhost"; 
    $username="root"; 
    $password=""; 
    $conn = new mysqli($servername, $username, $password, 'mydatabase'); 
    if ($conn->connect_error) 
    { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $conn->query("CREATE DATABASE IF NOT EXISTS `MyDataBase`"); 
    $conn->query("CREATE TABLE IF NOT EXISTS MyDataBase.company_details(`comp_id` INT AUTO_INCREMENT PRIMARY KEY,`company_name` VARCHAR(50) NOT NULL,`address` VARCHAR(70) NOT NULL,`email` VARCHAR(30) NOT NULL,`contact` INT(13) NOT NULL,`description` VARCHAR(150))"); 
    $conn->query("INSERT INTO company_details (company_name, address, email, contact, description) VALUES ('".$_POST['companyName']."', '".$_POST['address']."', '".$_POST['email']."', '".$_POST['contact']."', '".$_POST['description']."')"); 
    $conn->close(); 
?> 
</body> 

+0

hat mir nicht geholfen. Das Problem ist anders –

Antwort

1

da sind viele nette Frameworks da draußen, warum Sie wollen Erstellen Sie diese Validierungsdinge auf Ihre eigene Weise wie viele Jahre zuvor ohne OOP. MVC ist etwas Nettes.

zum Thema zurück

Ihre $ gültig wird 0 auf Firstcall sein .. Sie nur $ _POST haben sich auf eine mit Daten tatsächlich einzureichen.
die Formularaktion ist validate1.php die php_sef ist die gleiche Seite, so dass ich nicht bekommen, was Sie damit tun wollen, wenn dort. es wird immer validate1.php sein. Wo fügen Sie die Datenbank tatsächlich ein? und warum wird der Datenbankeinsatz nicht validiert? Die Validierung muss durchgeführt werden, bevor Sie Daten einfügen, bevor Sie ein from ausgeben. nicht vergessen ungefilterten php_self unsicher ist und ermöglicht xss

Datenfluss:

  • wenn method = post Daten validieren
    • , wenn kein Fehler Datenbank-Update tun.
    • sonst haben wir Validierungsfehler, so dass sie ausgegeben werden.
  • sonst haben wir keine Post so einfach das Formular anzuzeigen

zu blockieren eine Form nutzlos ist, weil jeder die Seite erneut und senden Sie nachladen kann. gib einfach die Fehler aus und gib ihm eine neue Chance. Wenn Sie es deaktivieren möchten, benötigen Sie eine Zugriffskontrolle. Wenn Sie nur eine einfache deaktivieren und es dem Benutzer anzeigen möchten, legen Sie die Übermittlung an deaktiviert oder Aktion zu #

0

Das Problem liegt in der Reihenfolge, was Sie tun.

  1. Benutzer gibt Formulardaten
  2. Schaltfläche Senden macht Daten selbst für die Validierung
  3. Daten erneut angezeigt wird, und Aktion gerichtet ist Skript
  4. Senden-Schaltfläche einfügen macht Datenskript
einfügen

Das Problem ist, zwischen 3 und 4 der Benutzer konnte die Daten ändern, Validierung umgehen und verschiedene Daten übermitteln.

Validierung sollte IMMER im selben Skript wie Ihre Datenbankabfragen durchgeführt werden (ja, auch für ausgewählte Abfragen).

Entweder setzen Sie Ihre Datenbankabfragen mit Ihrer Validierung ein (falls gültig) oder stellen Sie Ihre Validierungsprüfungen in Ihre Datenbankabfragen ein. Entfernen Sie anschließend alle bedingten Aktionen für Ihr Formular und lassen Sie es einfach senden.

0

Sie beschrieben genau, was Ihr Problem in der Frage ist. Wenn Ihre Seite zum ersten Mal gerendert wird, lautet die Aktion PHP_SELF. Sie müssen dann auf die Senden-Schaltfläche klicken (1 Mal), um die Aktion basierend auf dem Wert $valid zu ändern. Sobald dies geschehen ist und Sie erneut auf "Senden" klicken (2 Mal), können Sie die Übermittlung erfolgreich durchführen.

Um dies zu beheben, müssen Sie das Senden des Formulars an validate1.php nicht stoppen. So dies tun:

<html> 
    <head> 
     <title></title> 
     <style> .error {color:#ff0000;} </style> 
    </head> 
    <body> 
     <form name="myform" method="post" action="validate1.php" > 
      <table> 
       <tr> 
        <td>Company Name</td> 
        <td><input type="text" name="companyName" value ="<?php if(isset($_POST['companyName']) && empty($companyNameErr)){ echo $_POST['companyName'];} else {echo '';}?>" required ><span class="error"><sup>*</sup><?php echo $companyNameErr; ?></span></td> 
       </tr> 
       <tr> 
        <td>Address</td> 
        <td><input type="text" name="address" value ="<?php if(isset($_POST['address']) && empty($addressErr)){ echo $_POST['address'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $addressErr; ?></span></td> 
       </tr> 
       <tr> 
        <td>Email</td> 
        <td><input type="text" name="email" value ="<?php if(isset($_POST['email']) && empty($emailErr)){ echo $_POST['email'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $emailErr; ?></span></td> 
       </tr> 
       <tr> 
        <td>Contact</td> 
        <td>+91-<input type="text" name="contact" value ="<?php if(isset($_POST['contact']) && empty($contactErr)){ echo $_POST['contact'];} else {echo '';}?>" required maxlength="10" minlength="10"><span class="error"><sup>*</sup><?php echo $contactErr; ?></span></td> 
       </tr> 
       <tr> 
        <td>Description</td> 
        <td><textarea name="description" cols="60" rows="3"></textarea></td> 
       </tr> 
      </table> 
      <input type="submit" name="submit" value="next>>"> 
     </form> 
    </body> 

Jetzt Sie validate1.php abgegeben und kann wie Validierung tun, was Sie vor an der Spitze der Form hatte. Wenn das Formular sauber ist, senden Sie es an die Datenbank, andernfalls rendern Sie das Formular erneut mit den Daten und Fehlermeldungen, die an validate1.php gesendet werden, um es erneut zu versuchen.

Verwandte Themen