[英]PHP Insert into database not working
问候我做了以下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;
}
您可以通过它传递所有查询,并且您可以更轻松地进行调试。 那里也有很多数据库包装类,我强烈建议你去逛一逛。 他们让生活更轻松。 :)
错误是什么?
在脚本的开头添加这个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
我也有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'");
它起作用了。 我不知道为什么,但既然它有效,我用它来完成我的工作。
确保heading
未定义为键或唯一。 这可能会导致您的上下文出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.