2016-04-13 15 views
0

これは私のコードです。入力時にPHPフォームがMySQLにデータを送信しない

私が作成したMySQLデータベース内の「連絡先」という表にデータを送信するフォームが含まれています。

テーブルには4つのフィールドがあります。タイトル、名前、Eメール、お問い合わせ。

これは私のウェブサイトに合うようにコピーして編集したコードです。私は.PHPには新しいです! 4列/フィールドの

 <?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

削除された 'mysql_ * 'は使用しないでください。これはもう動作しません。' PDO' [リンク](http://php.net/manual/en/book.pdo.php)または 'mysqli '[link](http://php.net/manual/en/book.mysqli.php)を参照してください。 – Tom

+1

[Little Bobby](http://bobby-tables.com/)は、[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php)を実行します。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+1

[mysql_ *関数の使用をやめてください](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)はPHP 7で削除されました。[prepared](http://en.wikipedia.org/ [PDO](http://php.net/manual/en/pdo.prepared-statements.php)および[MySQLi](http://php.net/manual/en/mysqli.quickstart)のwiki/Prepared_statement)ステートメント.prepared-statements.php)、PDOの使用を検討してください。[これは本当に簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –

答えて

0

** EDIT **

OPのみが4列(タイトル、名前、電子メール、お問い合わせ、別名。p_title、P_NAME、p_email、p_enquiryを)望んでいる場合は、

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

** ORIGINAL **

:によるクエリから join_dateの除去と NOW()のそれに対応する値に働くだろう、次のその列だけでなく、 $p_titleNOW()の間にカンマをあなたが欠けている

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

を(および必要):あなたが受け取っている正確なエラーを知らなくても

、私はあなたのクエリが不正であることを見ていますそれぞれの識別子は次のようになります。

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

また、連結を削除する必要はありませんでした。そして、私は$p_enquiry$p_titleが文字列(彼らがかもしれないように聞こえる)であることを好奇心が強いので、私のようなので(ただしのみ該当する場合)、ならびに単一引用符でそれらの値をラップするように誘惑されたい:

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

これは問題なく、構文に沿って動作します。彼らの値は文字列ですか?または、列の定義ごとに数値ベースですか?

+0

OPは、5列ではなく4列であると言いました。 –

+0

ああ、私は今それを見ています。私はその後OPと異なることを請う!笑。私は5を参照してください。 – Marcus

+1

私はあまりにも、そのようにコメントしました。投稿の再読に基づいてコメントを削除しました。私は、目を満たすよりもここにあることを恐れる。 –

0

まず第一に、他の人が言っているように、PDOを使用することは非常に重要であり、人生を楽にします。私はあなたが実行している問題はp_titleと関係していると思います。p_titleは、insert文が実行されたときに設定されていても設定されていなくてもかまいません。また、通常は文字列であるように見えますが、引用符で囲まれていません。これにより、SQL文に問題が発生します。

関連する問題