问候我做了以下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注入执行任何清理,因此如果您的内容中包含引号,则会破坏您的查询.这非常危险(您的查询很容易受到用户输入的sql注入),您应该考虑在所有查询变量上使用mysql_real_escape_string,或者切换到PDO或MySQLi驱动程序.这些驱动程序支持查询绑定,这是防止sql注入的绝佳方法.
编辑社论:)
顺便说一句,通常很容易想出一个快速的数据库包装器或函数处理程序来自动处理这类错误.我使用基于类的包装器,但如果你现在不想走那么远,你可以这样做:
//very quick-and-dirty
function queryOrDie($query)
{
$query = MysqL_query($query);
if (! $query) exit(MysqL_error());
return $query;
}
您可以通过它传递所有查询,并且您可以更轻松地进行调试.那里也有很多数据库包装类,我强烈建议你去逛一逛.他们让生活更轻松.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。