2016-05-27 8 views
0
ここ

は、MySQL図である:誰でもこのPHPがデータベースにデータを書き込まない理由を知っていますか?

phpMyAdmin view そして、ここに私のコードです:

<html> 
    <head> 
    </head> 
    <body> 
     <form action="formwrite.php" method="post"> 

      Description:<input type="text" name="description"><br/> 
      Material:<input type="text" name="material"><br/> 
      Type:<input type="text" name="type"><br/> 
      Condition:<input type="text" name="condition"><br/> 
      Price:<input type="text" name="price"><br/> 

      <input type="submit" name="submit"> 

     </form> 

     <?php 

      if(isset($_POST['submit'])){ 

       $con=mysql_connect("localhost", "mysql", "test1"); 
       if (!$con) { 
        die ("Can not connect:". mysql_error()); 
       } 

       mysql_select_db("owenp",$con); 

       $sql="INSERT INTO items(material,type,date,condition,price,description) VALUES('$_POST[material]','$_POST[type]',now(),'$_POST[condition]','$_POST[price]','$_POST[description]')"; 

       mysql_query($sql,$con); 
       mysql_close($con); 
      } 
     ?> 
    </body> 
</html> 

私が経験してる問題は、PHPがエラーなしで実行されますが、レコードがで作成されないことです私のデータベース。私は何度もチェックして、すべてが正しい場所、つまりユーザー名とデータベース/テーブル名を指しています。

ありがとうございました。ですから、$ _POSTを交換する必要がある他のすべてのパラメータ

+2

[リトルボビー](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)でも安全ではありません! –

+3

[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

他にも、 'type'は[MySQL予約語](https://dev.mysql.com/doc/refman/5.5/en/keywords.html)です。だから、カラム名やテーブル名として使用したい場合は、バッククォート( '\' ')で囲む必要があります。 –

答えて

2
.....$_POST[material].... <-- material should be between quotes 

[タイプ]および他の値$ _POSTに[「タイプ」]
あなたが適切な提供する必要が配列の値にアクセスしているようインデックス、 を使用すると、値を変数に格納してからクエリ文字列に渡すことも、使用することもできます。このようなクエリ文字列を作るために...

$sql="INSERT INTO items(material,type,date,condition,price,description) VALUES('".$_POST["material"]."','".$_POST["type"]."',NOW(),'".$_POST["condition"]."','".$_POST["price"]."','".$_POST["description"]."')"; 
+1

はい - いいえ。 PHPがこれらを定数として使用しようとすると、自動的に変換され、引用符が追加されます。 –

+0

「$ _POST [material]」を「$ _POST [material]」に変更した後、同じ方法で他のパラメータを変更すると、WebページでHTTP 500エラーコードが生成されました。 –

+1

@JayBlanchard正確に。ここの*本当の*問題はそうではありません。それは他のものであり、質問はそれに基づいて閉じられています。 –

-2

として

+1

「なぜこれがうまくいくのですか」 ***良い答え***は、何が行われたのか、それがOPのためだけでなく、将来の訪問者のためにそうした方法で行われた理由について、常に説明します。 –

+0

変数は連結せずに正しく補間されることを知っていますか? –

関連する問題