2016-04-13 15 views
0

Dies ist mein Code.PHP Formular sendet keine Daten an MySQL bei der Eingabe

Ich möchte das Formular enthalten, um Daten an eine Tabelle namens "Kontakte" in einer MySQL-Datenbank, die ich erstellt habe, zu senden.

Es gibt vier Felder in der Tabelle; Titel, Name, E-Mail, Anfrage.

Dies ist Code, den ich kopiert und bearbeitet habe, um meiner Website zu entsprechen. Ich bin neu bei .PHP!

 <?php 
    if(isset($_POST['add'])) { 
     $dbhost = 'localhost'; 
     $dbuser = 'root'; 
     $dbpass = ''; 
     $conn = mysql_connect($dbhost, $dbuser, $dbpass); 

     if(! $conn) { 
      die('Could not connect: ' . mysql_error()); 
     } 

     if(! get_magic_quotes_gpc()) { 
      $p_title = addslashes ($_POST['p_title']); 
      $p_name = addslashes ($_POST['p_name']); 
      $p_email = addslashes ($_POST['p_email']); 
     }else { 
      $p_name = $_POST['p_name']; 
      $p_email = $_POST['p_email']; 
     } 

     $p_enquiry = $_POST['p_enquiry']; 

     $sql = "INSERT INTO contacts ". "(p_name,p_email, p_enquiry, p_title 
      join_date) ". "VALUES('$p_name','$p_email',$p_enquiry,$p_title NOW())"; 

     mysql_select_db('test_db'); 
     $retval = mysql_query($sql, $conn); 

     if(! $retval) { 
      die('Could not enter data: ' . mysql_error()); 
     } 

     echo "Entered data successfully\n"; 

     mysql_close($conn); 
    }else { 
     ?> 

      <form method = "post" action = "<?php $_PHP_SELF ?>"> 
       <table width = "400" border = "0" cellspacing = "1" 
       cellpadding = "2"> 

       <tr> 
        <td width = "100"><p>Title:</p></td> 
        <td><input name = "p_title" type = "text" 
         id = "p_title"></td> 
       </tr> 

       <tr> 
        <td width = "100"><p>Name:</p></td> 
        <td><input name = "p_name" type = "text" 
         id = "p_name"></td> 
       </tr> 

       <tr> 
        <td width = "100"><p>Email:</p></td> 
        <td><input name = "p_email" type = "text" 
         id = "p_email"></td> 
       </tr> 

       <tr> 
        <td width = "100"><p>Enquiry:</p></td> 
        <td><input name = "p_enquiry" type = "text" 
         id = "p_enquiry"></td> 
       </tr> 


       <tr> 
        <td width = "100"> </td> 
        <td> </td> 
       </tr> 

       <tr> 
        <td width = "100"> </td> 
        <td> 
         <input name = "add" type = "submit" id = "add" 
          value = "Add Employee"> 
        </td> 
       </tr> 

       </table> 
      </form> 

     <?php 
    } 
    ?> 
+0

Verwenden Sie nicht 'mysql_ *' es wurde entfernt und es wird nicht mehr funktionieren, verwenden Sie 'PDO' [link] (http://php.net/manual/en/book.pdo.php) oder mysqli '[link] (http://php.net/manual/en/book.mysqli.php) stattdessen. – Tom

+1

[Little Bobby] (http://bobby-tables.com/) sagt [Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-Injektion-in-php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –

+1

Bitte [stoppen Sie mit mysql_ * 'Funktionen] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Diese Erweiterungen] (http://php.net/manual/en/migration70.removed-exts-sapis.php) wurden in PHP 7 entfernt. Erfahren Sie mehr [vorbereitet] (http://en.wikipedia.org/ (http://php.net/manual/en/pdo.prepared-statements.php) und [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) und erwäge die Verwendung von PDO, [es ist wirklich ziemlich einfach] (http://jayblanchard.net/demystifying_php_pdo.html). –

Antwort

0

** EDIT für 4 Spalten/Felder **

Wenn nur OP will 4 Spalten (Titel, Name, Email, Anfrage, aka. P_title, p_name, p_email, p_enquiry), die folgende würde aufgrund der Entfernung von join_date und seinem entsprechenden Wert von NOW() aus der Abfrage arbeiten:

$sql = "INSERT INTO contacts (p_name, p_email, p_enquiry, p_title) VALUES ('$p_name', '$p_email', '$p_enquiry', '$p_title')"; 

** ORIGINAL **

Ohne die Sie erhalten, genaue Fehler zu wissen, ich sehe, dass Ihre Abfrage fehlerhaft ist:

$sql = "INSERT INTO contacts ". "(p_name,p_email, p_enquiry, p_title 
     join_date) ". "VALUES('$p_name','$p_email',$p_enquiry,$p_title NOW())"; 

Sie fehlen (und erfordert) ein Komma zwischen $p_title und NOW(), sowie deren Spalte Identifikatoren, wie zum Beispiel:

$sql = "INSERT INTO contacts (p_name, p_email, p_enquiry, p_title, 
     join_date) VALUES('$p_name', '$p_email', $p_enquiry, $p_title, NOW())"; 

Ich habe auch die Verkettung entfernt, wie es nicht erforderlich war. Und ich bin gespannt, dass $p_enquiry und $p_title Strings sind (klingt wie sie sein könnten), also würde ich versucht sein, diese Werte in einfache Anführungszeichen wie so gut, zu wickeln (aber nur, wenn zutreffend):

$sql = "INSERT INTO contacts (p_name, p_email, p_enquiry, p_title, 
     join_date) VALUES('$p_name', '$p_email', '$p_enquiry', '$p_title', NOW())"; 

Dieser wird ohne Probleme, Syntax-weise funktionieren. Sind ihre Werte Zeichenfolgen? Oder sind sie numerisch basierend auf ihrer Spaltendefinition?

+0

OP sagte, es gibt 4 Spalten, nicht 5. ¯ \\ _ (ツ) _/¯ –

+0

Ah ja, das sehe ich jetzt. Ich bitte, mit OP dann zu unterscheiden! lol. Ich sehe 5. – Marcus

+1

Ich tat es auch und kommentiert als solche. Ich entfernte den Kommentar aufgrund einer erneuten Lektüre des Posts. Ich fürchte, hier ist mehr, als man sieht. –

0

Zuerst, wie andere gesagt haben, verwenden Sie PDO, es ist sehr wichtig und macht das Leben leichter. Ich denke, dass das Problem, mit dem Sie es zu tun haben, mit p_title zu tun hat, das bei der Ausführung der insert-Anweisung gesetzt werden kann oder auch nicht. Es scheint auch, dass es normalerweise eine Zeichenfolge wäre, aber es ist nicht in Anführungszeichen eingeschlossen. Dies wird zu Problemen mit der SQL-Anweisung führen.

Verwandte Themen