Ниже приведена 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 файл.
Однако он не вставляет значения в соответствующий идентификатор пользователя, а помещает их в конец таблицы.
<?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);
?>
Это дает следующую ошибку:
Ошибка: Синтаксис ошибки в ‘Системах управления И; новичок = да ГДЕ имя пользователя = gk4316’ а ля ligne 1
Есть несколько вещей не так с вашим запросом.
Вы должны использовать кавычки вокруг ваших переменных, так как вы передаете их как строки.
Еще одна проблема, вам нужно удалить AND
и вместо этого используйте запятую.
$sql=" UPDATE student_info SET subject='$subject', beginner='$beginner'
WHERE username='$user' " ;
Вот почему вы получаете сообщение об ошибке.
SET
визит: http://www.tutorialspoint.com/mysql/mysql-update-query.htmAND
где вы хотите использовать несколько чеков в WHERE
пункт.
Например:
`WHERE column_1 = 'something' AND column_2 = 'something else'
Примечание:
Ваш настоящий код открыт для SQL-инъекция. использование готовые заявления, или же PDO с подготовленными заявлениями, они намного безопаснее.
Примечания:
Что-то еще, что я заметил, if($_SESSION["username"])
, Вам лучше использовать isset()
if(isset($_SESSION["username"]))
и используя правильное крепление:
if(isset($_SESSION["username"])){
$_POST["username"]=$_SESSION["username"];
$user=$_POST["username"];
}
Это просто хорошая практика кодирования.
Краткое руководство:
Вот пример использования UPDATE 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();
Удалите AND и замените его запятой в вашем обновлении SQL.
$ sql = «ОБНОВЛЕНИЕ student_info SET subject = ‘$ subject’, beginner = ‘$ beginner’
ГДЕ username = ‘$ user’ «;