2011-07-06 4 views
0

私はPHPとsqliteでちょっと苦労しています。私はちょっと混乱しています。
私はPHP SQliteデータベースフォーム

<html> 
<head> 
</head> 
<body> 
<form action="processFeedback.php" method="POST"> 
    <table> 
     <tr> 
      <td>Name:</td><td><input name="name"/></td> 
     </tr> 
     <tr> 
      <td>Email:</td><td><input name="email"/></td> 
     </tr> 
     <tr> 
      <td>Comments:</td><td><textarea name="comments"></textarea></td> 
     </tr> 
     <tr> 
      <td></td><td><input type="submit" value="Submit"/></td> 
     </tr> 
    </table> 
</form> 
</body> 
</html> 

.. processFeedback.php.MyのHTMLコードと呼ばれるPHPスクリプトは次のようになりますaccessess HTMLフォームを持っているし、私のPHPファイルは次のようになります...

<?php 
try 
{ 
//open the database 
$db = new PDO('sqlite:feedback.db'); 

$name = $_POST["name"]; 
$email = $_POST["email"]; 
$comments = $_POST["comments"]; 

//Insert record 
$db->exec("INSERT INTO feedback (name, email,comments) VALUES ('&name', '&email','&comments');"); 

//now output the data to a simple html table... 
print "<table border=1>"; 
print "<tr><td>Id</td><td>Name</td><td>Email</td><td>Comments</td></tr>"; 
$result = $db->query('SELECT * FROM feedback'); 
foreach($result as $row) 
{ 
print "<tr><td>".$row['feedbackid']."</td>"; 
print "<td>".$row['name']."</td>"; 
print "<td>".$row['email']."</td>"; 
print "<td>".$row['comments']."</td>"; 
} 

print "</table>"; 

$db = NULL; 
} 
catch(PDOException $e) 
{ 
print 'Exception : ' .$e->getMessage(); 
} 

?> 

そして、ここに私のテーブルの作成方法は...

フォームはテーブルのヘッダーを出力していますが、私は手動でターミナルを使って入力したレコードを出力しますが、 ???にレコードを挿入しませんか?誰も簡単な間違いを見ることができますか?

ディスコ

+1

補足として、SQLインジェクションに注意してください:http://php.net/manual/en/security.database.sql-injection.php – Raoul

+0

これを覚えておいてください。しかし、私はただatm – StuStirling

+0

を学んでいます。これは早い段階で勉強する価値があることです。 – Raoul

答えて

1

//Insert record
$db->exec("INSERT INTO feedback (name, email,comments) VALUES ('&name', '&email','&comments');");

1つの明らかな問題は、エラーチェックをやっていないしていることです。内破( '/'、$ DB->のerrorInfo())の "n \
";。私はPDOと過度に慣れていないんですが、私はあなたのプレースホルダがマップなっているかが表示されない }

対応するPHP変数 - おそらくエラーの原因です:

$bound=array(
    $_POST["name"], $_POST["email"], $_POST["comments"] 
); 
$stm=$db->prepare("INSERT INTO feedback (name, email,comments) 
    VALUES (?, ?,?));" 

if (!$stm || !$stm->execute($bound)) { 
    print "Error: " . implode('/',$db->errorInfo()) . "<br />\n"; 
} 
+0

ああブリリアントは、私は読み取り専用データベースに書き込もうとしているというエラーを返しました:) – StuStirling

+0

私はデータベースファイルのアクセス権を読み書きするように変更しましたが、今はこのエラーが発生しています:00000/14 /データベースをオープンできませんファイルの下にそれはまだ手動で入力したレコードを表示しています – StuStirling

+0

その今働いています。私はデータベースをディレクトリに移動してinsterクエリーが動作するようにその1つの読み取り/書き込み許可を与えなければならなかった – StuStirling

0

チェックはPK列が[feedbackid]データベース(AUTOINCREMENT)で自動生成されていることを確認します。

編集:これは絶対に必要ではありませんが、明示的なAUTOINCREMENTの欠如は、ミドルウェアを混乱させる可能性があります。少なくとも、明示的なAUTOINCREMENTをテストする別のテーブルに追加しようとするのは害ではありません。

場合(!1 = $ DB->のexec( "INSERT ...)){ 印刷 "エラー:"

+0

そうです。自動インクリメントされた列です – StuStirling

+0

テーブル作成ステートメントを投稿できますか? – Tim

+0

元の質問に追加 – StuStirling

関連する問題