0

SQL 構文にエラーがあります。エラーが発生するよりもレコードを編集しようとすると、7行目の近くで使用する正しい構文について、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

<?php
$db = mysql_connect('localhost','root','') or die('unable to connect');
mysql_select_db('demo',$db) or die(mysql_error($db));
?>
<html>
<head>
<title>Commit</title>
</head>
<body>
<?php
switch($_GET['action']){
case 'add';
switch($_GET['type']){
case 'student';
$query = 'insert into student 
(student_name,streamid,book1,book2)
values
("'. $_POST['student_name'] . ' ",
 ' . $_POST['stream'] . ' ,
 ' . $_POST['book1'] . ' ,
 ' . $_POST['book2'] . ' )'; 
  break;
}
break;
case 'edit';
switch ($_GET['type']){
case 'student';
$query = 'UPDATE student SET 
student_name = " ' . $_POST['student_name'] . ' " ,
streamid =  ' .  $_POST['stream'] . ' ,
book1 =  ' . $_POST['book1'] . ' ,
book2 =  ' . $_POST['book2'] . '
WHERE
st_id =' . $_POST['st_id'];
break;
}
break;
 }
if(isset($query)){
$result = mysql_query($query,$db) or die(mysql_error($db));
}
 echo 'done';
?>
</body>
</html>
4

2 に答える 2

0

問題は、受け取ったページ要求が GET メソッドと POST メソッドの両方を使用していると想定していたことですが、これは HTTP プロトコルの定義では不可能です。コードで「switch($_GET[...])」のようなものを使用し、その直後に $_POST 配列から値を取得しようとしましたが、リクエストが GET メソッドを使用していたため、明らかに空になります。

回避策は、すべての「$_POST」の出現を「$_GET」に置き換えることですが、本当の問題は、あなたの仮定が間違っていたことです。$_POST または $_GET で動作します。ページで POST メソッドと GET メソッドの両方を同等に処理できるようにしたい場合は、$_POST と $_GET をすべて $_REQUEST に置き換えることができます。

また、コードに多くの SQL インジェクションが含まれているため、コードが非常に安全でなく、不適切に記述されています。ユーザーが $_GET、$_POST、$_REQUEST などから提供した値を常にチェックしてサニタイズしてください。"case 'add';" のように、php コードにエラーがあることは言うまでもありません。どちらを「case 'add':」にする必要がありますか (半列ではなく列文字に注意してください)?

于 2013-06-08T08:49:39.087 に答える
0
Try like 
$query = 'UPDATE student SET 
                        student_name = " ' . $_POST['student_name'] . ' " ,
                        streamid =  ' . $_POST['stream'] . ' ,
                        book1 =  ' . $_POST['book1'] . ' ,
                        book2 =  ' . $_POST['book2'] . '
                        WHERE
                        st_id =' . $_POST['st_id'].'';
于 2013-06-08T08:53:43.303 に答える