下面是HTML表单,它从用户那里获取输入主题&初学者(是的,否)并将其插入数据库
<form action="coursesignup.php" method="post">
Select Subject:<br>
<select name="subject">
<option value="select" selected>select</option>
<option value="Database Management Systems">Database Management Systems</option>
<option value="Advanced Microprocessors">Advanced Microprocessors</option> </select><br><br>
Are you a Beginner:<br>
<select name="beginner">
<option value="select" selected>select</option>
<option value="yes">yes</option>
<option value="no">No</option></select><br><br>
<input type="submit" value="Submit" /></form>表单将数据提交到以下php文件中。但是,它并不是在相应的userid中插入值,而是将它们放在表的末尾。
<?php
session_start();
if($_SESSION["username"])
$_POST["username"]=$_SESSION["username"];
$user=$_POST["username"];
// Check connection
$con=mysqli_connect("localhost","root","","elearning");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$subject = mysqli_real_escape_string($con, $_POST['subject']);
$beginner= mysqli_real_escape_string($con, $_POST['beginner']);
$sql=" UPDATE student_info SET subject=$subject AND beginner=$beginner
WHERE username=$user " ;
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "Successfuly entered";
mysqli_close($con);
?>它会产生以下错误:
错误: Erreur de syntaxe près de 'Management Systems和;beginner=yes WHERE username=gk4316‘àla ligne 1
发布于 2014-10-12 16:49:53
您的查询有一些错误。
您需要在变量周围使用引号,因为您将这些引号作为字符串传递。
另一个问题是,您需要删除AND并使用逗号。
$sql=" UPDATE student_info SET subject='$subject', beginner='$beginner'
WHERE username='$user' " ;这就是为什么你会收到错误信息。
SET的更多信息,请访问:http://www.tutorialspoint.com/mysql/mysql-update-query.htm
和http://dev.mysql.com/doc/refman/5.1/en/set-statement.htmlAND是您希望在WHERE子句中使用多个检查的地方。
例如:
`WHERE column_1 = 'something' AND column_2 = 'something else'西德诺特:
您现在的代码对SQL injection开放。使用prepared statements或PDO with prepared statements,它们会安全得多。
脚注:
我还发现了if($_SESSION["username"])。最好使用isset() if(isset($_SESSION["username"]))并使用适当的括号:
if(isset($_SESSION["username"])){
$_POST["username"]=$_SESSION["username"];
$user=$_POST["username"];
}这只是一个很好的编码实践。
快速教程:
下面是一个使用mysqli和准备好的语句进行更新的示例:
i代表integer,s代表string。
$con = new mysqli('host','user','password','database');
$stmt = $con->prepare("UPDATE `table` SET `title`=?, `description`=?, `price`=?, `location`=?, `email`=?, `date`=? WHERE `id`=?");
$stmt->bind_param("ssisssi", $title_string, $description_string, $price_int, $location_string, $email_string, $date_string, $id_int);
stmt->execute(); 发布于 2015-10-13 11:07:08
删除和,并在sql语句中用逗号替换它。
$sql=“更新student_info SET subject='$subject',初学者=‘$初学者’,其中用户名=‘$user’”;
https://stackoverflow.com/questions/26327538
复制相似问题