插入mysql_num_rows作为一个变量



我正在创建一个CMS,其中当您添加新页面时,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形式,并确定它是新页面还是只是一个正在更新的页面。我得到的错误是没有任何东西张贴到数据库。如果我去掉$sql, $result$order线…脚本工作正常,但是display_order变量不会被设置为下一个最高的数字。

您的查询有错误:

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插入。转义数据输入!

解决这种情况的常用方法是在pages表中使用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

相关内容

  • 没有找到相关文章

最新更新