0

ポータル システムと統合するための非常に単純な php フォーラム システムを作成しています (いくつかの既存のものを統合しようとしましたが、見つけたすべてに不要な機能がたくさんあるので、独自のものを作成することにしました)。以下のページは、ボード作成ページの開始点にすぎませんが、送信をクリックすると、次のエラーが表示されます。SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'desc='Testing special characters á ó ç ã ñ'' 付近で使用する正しい構文を確認してください。

<?php
 function renderForm($nome, $desc, $error)
 {

     $nome = htmlspecialchars($_POST['nome']);
 $desc = htmlspecialchars($_POST['desc']);

 ?>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html>
 <head>
 <title>New Record</title>
 </head>
 <body>
 <?php 
 if ($error != '')
 {
 echo '<div style="padding:4px; border:1px solid red; color:red;">'.$error.'</div>';
 }
 ?> 

 <form action="" method="post">
 <div>
 <strong>Nome: *</strong> <input type="text" name="nome"  /><br/>
 <strong>Desc: *</strong> <input type="text" name="desc" /><br/>
 <p>* required</p>
 <input type="submit" name="submit" value="Submit">
 </div>
 </form> 
 </body>
 </html>
 <?php 
 }
include("../../config.php");

 if (isset($_POST['submit']))
 { 
 $nome = htmlspecialchars($_POST['nome']);
 $desc = htmlspecialchars($_POST['desc']);
 if ($nome == '' || $desc== '')
 {
 $error = 'ERROR: Please fill in all required fields!';

 renderForm($nome, $desc, $error);
 }
 else
 {

 mysql_query("INSERT forum_boards SET nome='$nome', desc='$desc'")
 or die(mysql_error()); 
 }

 }
 else
 {
 renderForm('','','');
 }
?>

これは何ですか?

4

3 に答える 3

2

不適切な挿入構文。適切な形式は次のとおりです。

INSERT INTO forum_boards (`nome`, `desc`) VALUES ('$nome', '$desc')

また、SQL インジェクションを防ぐために入力をエスケープする必要があります。

$nome = mysql_real_escape_string(htmlspecialchars($_POST['nome']));
$desc = mysql_real_escape_string(htmlspecialchars($_POST['desc']));

また、誰かが mysql_* 関数が減価償却されていると文句を言うでしょう。私はコンパイラのように感じます!

于 2013-07-04T15:55:56.037 に答える
0

二重引用符の代わりに一重引用符を使用してみてください。
シングルクォーテーションの実行速度はダブルクォーテーションより速いです。

クエリを変数に保存してみてください。読みやすいです

$query='INSERT INTO forum_boards (nome,desc) VALUES("'.$nome.'","'.$desc.'")';

// mysqli を使用してみてください。これは非常に高度であり、常に準備済みステートメントを使用します

mysqli_query($クエリ);

于 2013-07-04T16:04:20.733 に答える
0

挿入は次のように機能します。

INSERT forum_boards (列名1,列名2,列名3) 値($値1, $値2, $値3); 等

また、コードが SQL インジェクションに対して脆弱であることにも注意してくださいhttp://en.wikipedia.org/wiki/SQL_injection

また、mysql_* 関数は公式に廃止されていることに注意してください。

于 2013-07-04T15:57:05.677 に答える