问候我做了以下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']";
}
}
答案 0 :(得分:6)
如果在运行的每个查询后调用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;
}
您可以通过它传递所有查询,并且您可以更轻松地进行调试。那里也有很多数据库包装类,我强烈建议你去逛一逛。他们让生活更轻松。 :)
答案 1 :(得分:3)
错误是什么?
在脚本开头添加此PHP:
ini_set('display_errors', 'On');
error_reporting(E_ALL);
也试试这个:
$query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."',1)");
另外:)在插入查询中直接使用POST数据是一种安全威胁: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php
答案 2 :(得分:0)
确保heading
未定义为键或唯一。这可能会导致您的上下文出现问题。
答案 3 :(得分:0)
我还有PHP(INSERT INTO)查询不起作用: 我的原始查询是:
mysql_query("INSERT INTO `videousers` (`user_id`,`user_name`,`user_password`,`contact_person`,`organisation`,`contact_tel`,`email`) VALUES ('','{$user}','{$pass}','{$cperson}','{$organ}','{$cphone}','{$email}'");
它无效,所以我更改为以下查询:
mysql_query("INSERT videousers SET user_name='$user',user_password='$pass', contact_person='$cperson', organisation='$organ', contact_tel='cphone', email='$email'");
它有效。我不知道为什么,但既然它有效,我用它来完成我的工作。