PHP SQlite数据库表单

时间:2011-07-06 11:04:22

标签: php sqlite

我现在一直在努力学习PHP和sqlite,我只是在困惑自己 我有一个html表单访问一个名为processFeedback.php的PHP脚本。我的HTML代码看起来像这样..

<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);

表格输出表格标题,也是我使用终端手动输入的记录,但不会在???中插入记录谁能看到一个容易出错的错误?

迪斯科

2 个答案:

答案 0 :(得分:1)

  

//插入记录
  $ db-&gt; exec(“INSERT INTO feedback(姓名,电子邮件,评论)      VALUES('&amp; name','&amp; email','&amp; comments');“);

一个明显的问题是你没有进行错误检查:

if(1!= $ db-&gt; exec(“INSERT ...)){         打印“错误:”。 implode('/',$ db-&gt; 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";
}

答案 1 :(得分:0)

检查以确保在数据库中自动生成PK列[feedbackid](AUTOINCREMENT)。

编辑:这不是绝对必要的,但缺少明确的AUTOINCREMENT可能会混淆中间件。至少尝试将一个显式的AUTOINCREMENT添加到另一个表进行测试不会有什么坏处。