2011-07-06 121 views
0

我一直在努力通過PHP和SQLite一點點,現在我只是困惑自己。
我有accessess稱爲processFeedback.php.My的html代碼PHP腳本看起來像這樣的HTML表單..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> 

和我的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(); 
} 

?> 

而且這裏是我的表的創建方法......

CREATE TABLE feedback (feedbackid INTEGER PRIMARY KEY,name TEXT,email TEXT,comments TEXT); 

的形式輸出表頭也,我使用終端,但它瓦特手動輸入記錄不要在???中插入記錄?任何人都能看到一個簡單的錯誤

迪斯科

+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-> EXEC(「INSERT ...)){ 打印 」錯誤「。 implode('/',$ 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查詢提供一個讀/寫權限 – StuStirling

0

檢查,以確保PK列[feedbackid]在數據庫中(AUTOINCREMENT)自動生成。

編輯:這不是絕對必要的,但缺乏明確的AUTOINCREMENT可能會混淆中間件。至少嘗試添加一個明確的AUTOINCREMENT到另一個表來測試是不會傷害的。

+0

是的。它是一個自動遞增的列 – StuStirling

+0

您可以發佈您的表創建語句。 – Tim

+0

加入了原始問題 – StuStirling