Я разработал игру с Javascript, и когда пользователь закончит ее, я должен сохранить его запись в базе данных. Здесь вы видите код:
$temp = $_POST['playername']; //username
$text = file_get_contents('names.txt'); //list with all usernames
//this text file contains the names of the players that sent a record.
$con=mysqli_connect("localhost","username","pass","my_mk7vrlist");
if (stripos(strtolower($text), strtolower($temp)) !== false) {
//if the username is in the list, don't create a new record but edit the correct one
mysqli_query($con, "UPDATE `my_mk7vrlist`.`mk7game` SET `record` = '".$_POST['dadate']."' WHERE `mk7game`.`playername` = ".$temp." LIMIT 1 ");
} else {
//The username is not in the list, so this is a new user --> add him in the database
mysqli_query($con, "INSERT INTO `mk7game` (`playername`,`record`,`country`,`timen`) VALUES ('".$_POST['playername']."', '".$_POST['dadate']."', '".$_POST['country']."', '".$_POST['time_e']."')");
file_put_contents("names.txt",$text."\n".$temp);
//update the list with this new name
}
//Close connection
mysqli_close($con);
Когда у меня появляется новый пользователь (часть в моем "else"), код работает правильно, потому что у меня есть новая строка в моей базе данных.
Если имя пользователя уже существует в списке, это означает, что этот игрок уже отправил свою запись, и поэтому я должен обновить таблицу. Кстати, я не могу редактировать запись на плеере, который уже послал запись.
mysqli_query($con, "UPDATE `my_mk7vrlist`.`mk7game` SET `record` = '".$_POST['dadate']."' WHERE `mk7game`.`playername` = ".$temp." LIMIT 1 ");
Похоже, это неправильно, и я не могу понять, почему. Я новичок в PHP и MySQL.
У вас есть какие-либо предложения?
2 ответа
В операторе UPDATE
отсутствуют кавычки вокруг $temp
:
mysqli_query($con, "UPDATE `my_mk7vrlist`.`mk7game`
SET `record` = '".$_POST['dadate']."'
WHERE `mk7game`.`playername` = '".$temp."'
^ ^
LIMIT 1 ") or die(mysqli_error($con));
Однако было бы лучше использовать подготовленные операторы с параметрами, а не вставлять строки в запрос.
if (stripos(strtolower($text), strtolower($temp)) !== false)
, если буду искать дубликаты в своей базе данных?
ON DUPLICATE KEY UPDATE
в операторе INSERT
. Это позволяет сделать все в одном заявлении.
Избегайте ввода данных пользователем!
$temp = mysqli_real_escape_string($con, $_POST['playername']);
Обязательно прикрепите mysqli_connect () выше этого
$select = mysqli_query($con, "SELECT `id` FROM `mk7game` WHERE `playername` = '".$temp."'");
if(mysqli_num_rows($select))
exit("A player with that name already exists");
Удалите это в перед запросом UPDATE, и все будет хорошо - очевидно, вам нужно будет отредактировать его, чтобы он соответствовал настройке вашей таблицы
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
stripos
, а затемstrtolower
, когдаstripos
не чувствителен к регистру? И поискchuck
также найдетchuckles
.txt
и защитили его с помощью.htaccess