0

您的 SQL 语法有错误;当我尝试编辑记录时,请检查与您的 MySQL 服务器版本相对应的手册,以便在第 7 行的 '' 附近使用正确的语法,而不是出现错误请有人告诉我为什么会这样吗?

<?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 方法。

解决方法是用“$_GET”替换所有出现的“$_POST”,但真正的问题是您的假设是错误的。使用 $_POST 或使用 $_GET。如果您想让您的页面能够平等地处理 POST 和 GET 方法,您可以将所有出现的 $_POST 和 $_GET 替换为 $_REQUEST。

此外,您的代码中有很多 SQL 注入,这使您的代码非常不安全且编写不当。始终检查和清理用户提供的来自 $_GET、$_POST、$_REQUEST 等的值。更不用说您的 php 代码中有错误,例如“case 'add';” 应该是“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 回答