我是使用PHP进行编码的新手,在尝试创建待办事项列表时,我创建了一个名为' add.php'应该将新数据添加到表中。主文件index.php调用表元素ok并在浏览器上显示它们,但我无法添加新项。
add.php中的代码在这里:
<?php
require_once 'app/init.php';
if(isset($_POST['name'])) {
$name = trim($POST['name']);
if(!empty($name)) {
$addedQuery = $db->prepare("
INSERT INTO items (name, user, done, created)
VALUES (:name, :user, 0, NOW() )
");
$addedQuery->execute([
'name' => $name,
'user' => $_SESSION['user_id']
]);
}
}
header('location: index.php');
?>
如果有帮助,我在WampServer 2.5上使用PHP 5.5.12和MySQL 5.6.17
答案 0 :(得分:5)
好的......在任何人误解有关使用冒号作为阵列占位符的错误观念之前,这是一个神话。
PDO中完全合法/有效的语法。 (参考脚注)。
然而,冒号确实需要在VALUES()中。
此处的真实问题与此$POST
有关,并且缺少$_POST
的下划线。
错误报告会向您抛出未定义的变量通知。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
另外,确保会话数组已设置/不为空,并且会话已启动。您的帖子中没有显示/显示。
还要确保表单确实使用POST方法,并且输入中包含输入的name属性。
即:<input type="text" name="name">
检查PDO中的错误:
您的连接方法也不清楚,因此请确保您确实使用PDO进行连接。
其他参考资料:
isset()
http://php.net/manual/en/function.isset.php empty()
http://php.net/manual/en/function.empty.php <强>脚注:强>
如评论中所述,并且是VolkerK的一个很好的发现:
&#34;它在内部存储了前导冒号,请参阅&#34;
答案 1 :(得分:-2)
在PDO执行方法中传递命名参数时,必须将其作为数组传递,其名称前缀为冒号(:name
而不是name
)。
当传递索引参数(在prepare方法中使用?
)时,你根本不会在执行方法中关联一个键。
所以试试:
$addedQuery->execute([
':name' => $name,
':user' => $_SESSION['user_id']
]);
并确保$_SESSION['user_id']
设置正确。
编辑: 你在php.ini中打开php错误了吗?