【发布时间】:2019-01-28 02:01:11
【问题描述】:
我正在开展一个学校项目,该项目涉及一个具有数据库集成的网站。目前正致力于通过它向网站添加新内容(文本、标题、图像)。我已经可以通过网站将新用户添加到数据库中,但由于某种原因,相同的代码和逻辑不适用于内容。
我注意到使用 echo 打印 $stmt 不会打印任何内容。
<?php
include "../conn.php";
$sql = "INSERT INTO `contenido` (`id_contenido`, `tipo_contenido`, `id_seccion`, `orden_contenido`, `largo_contenido`, 'corto_contenido', 'extra_contenido') VALUES (NULL, '".$_POST["tipo"]."', '".$_GET['id']."','".$_POST["orden"]."','".$_POST["largo"]."','".$_POST["corto"]."','".$_POST["extra"]."')";
$stmt = $conn->prepare($sql);
if ($stmt = $conn->prepare($sql))
{
//echo "It worked";
$stmt->execute();
$last_id = $conn->insert_id;
header("Location: editarContenidos.php?id=".$_GET['id']);
}
?>
预期结果:内容信息上传到数据库,用户被重定向到编辑内容页面(editarContenidos.php)
实际结果:白屏,无错误。由于 if 条件为 false,因此您永远不会被重定向,也不会将内容上传到数据库。
注意:插入用户 .php 使用相同的逻辑和语法,我没有足够的 php 经验来理解我做错了什么。
【问题讨论】:
-
这里没有足够的信息来回答这个问题;请显示您的
$_POST内容,确保设置了每个值。最好使用isset()检查这些内容。还要检查它们是否与您的数据库值正确匹配,以及您是否具有运行该操作所需的权限。最后,check for error messages 在输出中。 -
还请注意,您的代码对于SQL injection 来说是易受攻击的。千万不要在 SQL 语句中直接使用
$_POST!您应该改用prepared statements,绑定到变量。还要确保您的数据库用户只有required privileges。您可以参考this post 了解有关如何防止 PHP 中的 SQL 注入的更多信息 :) -
最后,
header()永远不会在您将echo内容添加到页面后触发。假设您没有回显it worked,您的重定向应该可以正常工作。 -
我知道它很容易受到 SQL 注入的影响,因为我们还没有在课堂上看到该主题。无论如何,感谢您的链接,当我有机会时会给他们一个阅读。您能否指定检查设置值的含义?有些值是空的,因为这就是它在数据库中的方式。如何检查值是否直接与数据库匹配?我确实拥有所需的权限,因为我还有其他 2 个 .php 与此 .php 执行基本相同的操作,再次感谢
标签: php mysql sql prepared-statement