0

取得 :

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを参照してください。

データベース上の投稿を編集しようとしたとき。

ここに私の表示と編集の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 インジェクションに苦しんでいます。

titleフィールドに「Assassin's Creed III」とUPDATE入力すると、コード内のステートメントで ($_POST['title']変数を介して)一重引用符で囲まれます。

'Assassin's Creed III'

問題は、MySQL がそれを'Assassin'の後にs Creed III'. 後者をどうするかはわかりません。

もちろん、誰かがその時点で有効なSQL を入力した場合、これは大きな問題になりますが、期待したものではありません。PHP で SQL インジェクションを防ぐにはどうすればよいですか? をご覧ください。または SQL インジェクションを回避するための他のいくつかのアドバイスのいずれか。

于 2013-09-11T08:16:43.820 に答える
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 に答える
2

データベースに追加'しているのを見たので、使用してエスケープする必要がありますaddslashes()

addslashes($thisTitle)
于 2013-09-11T08:15:22.867 に答える
1

次のように入力をエスケープする必要があります

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

引用符などを含むすべての入力に対してこれを行います。

注: mysql は間もなくなくなるため、代わりに mysqli を使用して新しいコードを作成することをお勧めします。

于 2013-09-11T08:15:17.670 に答える