0

次のコードを使用してフォームを更新しようとすると、更新はサイレントになり、タイトルフィールドに0の値、コンテンツフィールドに前の値が表示されます。誰か助けてもらえますか!!!

adminClass.php

更新機能

 if( $form_title && $form_content ){
       $sql = "UPDATE home_page
       SET title = '{$form_title}' AND content = '{$form_content}' WHERE id = {$id}";
       echo $sql;
       $result = $this->mysqli->query( $sql );
       if(!$result){
         echo 'Error'. mysqli_error();
         return;
       }else{
         $this->success_message = "Update Successfull";
         return;
       }
    }

admin.phpビューページ

if( isset( $_POST['update'] ) ){
   $admin_obj->update($_POST, $id);
}
4

1 に答える 1

3

MySQLはサイレントにUPDATEステートメントをキャストし、ブール演算を実行します。サーバーは更新ステートメントを次のように読み取ります

UPDATE home_page
SET title = ('{$form_title}' AND (content = '{$form_content}')) 
WHERE id = {$id} 

あなたがやろうとしていることは、それを機能させるためにを置き換えることANDです,

UPDATE home_page
SET title = '{$form_title}', content = '{$form_content}'
WHERE id = {$id} 

SQL Injection補足として、変数の値(s)が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。を使用PreparedStatementsすると、値を一重引用符で囲む必要がなくなります。

于 2013-03-24T14:35:24.227 に答える