0

得到:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 's Creed III' 附近使用的正确语法,description='The plot is set in a虚构 history of real ' 在第 2 行

尝试编辑数据库上的帖子时。

这是我的显示和编辑php:

        $result = mysql_query("SELECT * FROM gallery");
        while ($row = mysql_fetch_array( $result )){
                // while looping thru each record…
            // output each field anyway you like

            $title =  $row['title'] ;
            $description = $row['description'];
            $year = $row['year'];
            $rating = $row['rating'];
            $genre = $row['genre'];
            $filename =  $row['filename'];
            $imageid = $row['imageid'];

            include '../modules/edit_display.html';
        }



        // STEP 2: IF Update button is pressed , THEN UPDATE DB with the changes posted
        if(isset($_POST['submit'])){ 
            $thisTitle = $_POST['title'];
            $thisDescription = $_POST['description'];
            $thisYear = $POST['year'];
            $thisRating = $POST['rating'];
            $thisGenre = $POST['genre'];
            $thisNewFilename =  basename($_FILES['file']['name']);
            $thisOneToEdit = $_POST['imageid'];
            $thisfilename = $_POST['filename'];



            if ($thisNewFilename == ""){
                $thisNewFilename = $thisfilename ;
            } else {
                uploadImage();
                createThumb($thisNewFilename , 120, "../uploads/thumbs120/");
            }



            $sql = "UPDATE gallery SET
                    title='$thisTitle',
                    description='$thisDescription',
                    year='$thisYear',
                    rating='$thisRating',
                    genre='$thisGenre',
                    filename='$thisNewFilename'

                 WHERE 

                    imageid= $thisOneToEdit";

                $result = mysql_query($sql) or die (mysql_error());



        }
4

6 回答 6

3

由于使用了危险的用户输入模型,您即将遭受 SQL 注入。

当您在字段中键入“刺客信条 III”时title,它会被放在UPDATE代码语句中的单引号中(通过$_POST['title']变量):

'Assassin's Creed III'

问题在于 MySQL 将其视为'Assassin',然后是s Creed III'. 它不知道如何处理后者。

当然,如果此时有人输入了有效的SQL,这将成为一个巨大的问题,但不是您所期望的。看看如何防止 PHP 中的 SQL 注入?或任何其他关于避免 SQL 注入的建议。

于 2013-09-11T08:16:43.820 回答
2

我已经看到你正在添加'到数据库中,所以你需要使用它来逃避它addslashes()

addslashes($thisTitle)
于 2013-09-11T08:15:22.867 回答
2

您在这里有语法错误。使用$_POST而不是$POST.

代替

 $thisYear = $POST['year'];
 $thisRating = $POST['rating'];
 $thisGenre = $POST['genre'];

 $thisYear = $_POST['year'];
 $thisRating = $_POST['rating'];
 $thisGenre = $_POST['genre'];
于 2013-09-11T08:14:56.583 回答
1

你需要逃避你的输入,比如

$thisDescription = mysql_real_escape_string($_POST['description']);

对所有包含引号等的输入执行此操作。

注意:mysql 将很快消失,因此建议使用 mysqli 编写新代码

于 2013-09-11T08:15:17.670 回答
1

您的脚本中有很多问题。

  1. 您正在尝试将'字符添加到数据库,您需要使用addslashes.

  2. 你很容易受到SQL Injection. 使用mysql_real_escape_string, 甚至更好地使用PDO.

  3. 第三,是$_POST,不是$POST。您在某些方面使用错误。

  4. $thisOneToEdit在查询中添加引号。

导致错误是因为您试图将Assasin's Creed III字符串添加到数据库。单引号会破坏您的查询并产生语法错误。

于 2013-09-11T08:18:35.973 回答
0

在查询中使用它们之前,对可能包含单引号或双引号的值执行 addlashes(),如下所示

$thisTitle = addslashes($_POST['title']);
于 2013-09-11T08:16:33.627 回答