PHP SQlite数据库表单


PHP SQlite Database Form

我一直在努力通过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);

表单输出表头,也是一个记录,我手动输入使用终端,但它不会插入记录??有人能看出一个容易犯的错误吗?

迪斯科

//
插入记录$db->exec("INSERT INTO feedback (name, email,comments))值(及名称,及电子邮件,和评论);");

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

if (1!=$db->exec("INSERT…")){打印"错误:"。内爆('/',$ 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";
}

检查PK列[feedbackid]是否在数据库(AUTOINCREMENT)中自动生成

编辑:这不是绝对必要的,但是缺乏显式的AUTOINCREMENT可能会混淆中间件。至少,在另一个表中添加一个显式的AUTOINCREMENT也无妨。

我有一个类似的问题在PHP的形式,我使用PHP从sqlite数据库和自动填充字段获取数据。

你有

$db->exec("INSERT INTO feedback (name, email,comments) VALUES(',名称',,电子邮件,和评论);");

我认为这应该是

$db->exec("INSERT INTO feedback (name, email,comments) VALUES (".美元的名字。",";. 美元的电子邮件。",";. 美元的评论。");");

句号"字符组合字符串。因为需要exec()基本上是一行字符串(sql语句),所以需要将编写的文本与变量组合为字符串。我不确定这是什么。在php中代替了变量名中的$,但我知道在一些函数中,变量前缀实际上是:而不是$,但是:变量必须是&;bound&;

查看php中'period'字符的作用

我绝不是专家,但我碰巧和你有同样的问题,所以我希望我能帮到你:)

编辑:我刚刚注意到这篇文章很老了。我希望这对将来使用新PHP的人有所帮助。