问候 我制作了以下 php 脚本,以便我可以编辑文本并将其保存到数据库以供将来使用。但是,我在更新/插入查询时遇到了一些小问题。我不确定我做错了什么,但只有一个命令会执行。我不确定这是托管问题还是我做错了什么。
有什么想法吗?
if (isset($_SESSION["logged"]) && $_SESSION["logged"]==1){
if ($_POST['action']=="edit"){
$query=mysql_query("select * from page where active=1 AND heading='".$_POST['selectedpage']."'");
$row = mysql_fetch_array($query, MYSQL_ASSOC);
echo "<h1>HTML Editor </h1><br>";
echo "<form name='saveform' action='./action.php' method='post'>";
echo "<textarea rows='100' cols='100' name='updateBox'>".$row['content']."</textarea>";
echo "<br><input name='action' type='submit' value='save edit'>";
echo "<input name='heading' type='hidden' value='".$row['heading']."'>";
echo "</form>";
} else if($_POST['action']=="save edit"){
$query=mysql_query("UPDATE page SET active='0' where heading='".$_POST['heading']."'");
$query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."','1')");
echo "<p>Changes saved succesfully!</p>";
echo "$_POST['updateBox']";
}
}
最佳答案
如果在每次运行查询后调用 echo mysql_error($query)
,您将能够查看该查询是否有错误。您的查询内容可能有问题。
您没有对 SQL 注入(inject)执行任何清理,因此如果您的内容中有引号,它会破坏您的查询。这是相当危险的(您的查询容易受到来自用户输入的 SQL 注入(inject)的攻击),您应该考虑使用 mysql_real_escape_string在所有查询变量上,或切换到 PDO或 MySQLi司机。这些驱动程序支持查询绑定(bind),这是防止 SQL 注入(inject)的绝佳方法。
编辑社论:)
顺便说一句,通常很容易想出一个快速的数据库包装器或函数处理程序来自动为您处理这些类型的错误。我使用基于类的包装器,但如果你现在不想走那么远,你可以这样做:
//very quick-and-dirty
function queryOrDie($query)
{
$query = mysql_query($query);
if (! $query) exit(mysql_error());
return $query;
}
您可以通过它传递所有查询,这样您就可以更轻松地调试它。那里也有很多数据库包装器类,我强烈建议您四处看看。他们让生活更轻松。 :)
关于PHP插入数据库不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097728/