我正在创建一个CMS,当你添加NEW PAGE时,display_order会根据已经存在的行数自动获取下一个最高的数字。这是我现在拥有的:
<?php
if(isset($_POST['updateContent'])){
require ("connection.php");
$sql = "SELECT * FROM pages";
$result = $conn->query($sql) or die(mysqli_error());
$content = $_POST['content'];
$title = $_POST['title'];
$id = $_POST['id'];
$order = mysqli_num_rows($result);
if (empty($id)){
/** ADD NEW SLIDE*/
$sql = "INSERT INTO pages (title, content, display_order, visible) VALUES ('".$title."', '".$content.", '".$order.", 0)";
}else{
/** UPDATE SLIDE*/
$sql = "UPDATE pages SET content = '".$content."', title = '".$title."' WHERE id = '".$id."'";
}
if ($result){
header("Location: admin.php");
}
}
?>
此代码正在执行的操作是在名为edit.php的页面中使用我正在使用的HTML表单,并确定它是新页面还是仅仅是正在更新的页面。我得到的错误是NOTHING根本没有发布到数据库。如果我删除$sql
,$result
和$order
行...脚本工作正常,但display_order变量不会设置为下一个最高数字。
答案 0 :(得分:1)
您的查询中存在错误:
INSERT INTO pages (title, content, display_order, visible)
VALUES ('".$title."', '".$content.", '".$order.", 0)";
^-- here
应该是:
INSERT INTO pages (title, content, display_order, visible)
VALUES ('".$title."', '".$content."', ".$order.", 0)";
^-- quote goes here
此外,使用mysqli
并不会神奇地保护您免受SQL插入的侵害。逃避数据输入!
答案 1 :(得分:0)
解决这种情况的常用方法是在页面表中使用AUTO INCREMENT字段。 按顺序插入,然后询问LAST_INSERT_ID
php方式:http://php.net/manual/en/function.mysql-insert-id.php
原生mysql方式:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id