Я создал простую систему блогов на процедурном PHP, где пользователь может создавать новые сообщения, просматривать существующие сообщения, так что это система CRUD.
Вот мой код:
if (isset($_POST['submit'])) {
$titel = $_POST['titel'];
$kortbeskrivelse = $_POST['kortbeskrivelse'];
$skrib = $_POST['skrib'];
$post = $_POST['post'];
$update = "UPDATE posts SET ";
$update .= "title = '{$titel}', ";
$update .= "kortbe = '{$korbeskrivelse}', ";
$update .= "author = '{$skrib}', ";
$update .= "beskrivelse = '{$post}', ";
$update .= "WHERE id=$pid LIMIT 1";
$updateresult = mysqli_query($conn, $update);
if (mysqli_query($conn, $updateresult)) {
echo "New record created successfully";
} else {
echo "Error: " . $updateresult . "<br>" . mysqli_error($conn);
}
}
Итак, чтобы объяснить запрос, я обновляю сообщения с помощью переменных, переданных из формы POST.
Переменная $ pid предназначена для обеспечения обновления правильного сообщения (я объявил его перед запросом sql)
Я не получаю ошибок PHP, и соединение работает отлично. Это ошибка SQL:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id= LIMIT 1' at line 1
Это немного сбивает с толку, и я боюсь, что это ошибка 40 (человеческая ошибка: D)
Я знаю, что это очень небезопасно, также для демонстрации инъекций и т. д.
Я надеюсь, что кто-нибудь сможет мне помочь!
Заранее спасибо!
Судя по всему, $pid дает пустую строку.
Прочтите, пожалуйста, о SQL-инъекция. Ваш код уязвим.
Липкий бит, пожалуйста, прочтите сообщение :-D






В этой строке $update .= "beskrivelse = '{$post}', "; есть запятая. Попробуйте удалить его:
$update .= "beskrivelse = '{$post}' ";
можем ли мы '{}' в нашем запросе
да, попробуйте прочитать здесь: php.net/manual/en/…
это было не так ... Но теперь он просто говорит, что у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'LIMIT 1' в строке 1
чем это было. это еще одна ошибка ... попробуйте print $update; exit(); перед mysqli_query и покажите нам результат.
Хм, странно .. теперь он говорит ОБНОВЛЕНИЕ сообщений SET title = 'a', kortbe = '', author = 'a', beskrivelse = 'a' WHERE id = LIMIT 1 - похоже, он не получает kortbe или id .
да, похоже, $pid не определяется. У тебя он тоже есть в $_POST?
вы можете добавить переменную $pid в свою форму в качестве скрытого ввода (например, <input type = "hidden" name = "pid" value = "$pid">), а затем после if здесь использовать $pid = $_POST['pid']
$update = "UPDATE posts SET ";
$update .= "title = '$titel', ";
$update .= "kortbe = '$korbeskrivelse', ";
$update .= "author = '$skrib', ";
$update .= "beskrivelse = '$_POST[beskrivelse]' ";
$update .= "WHERE id=$pid LIMIT 1";
измените свой код, как это, не используйте скобки {} в запросе и удалите ',' из последнего обновления $ и поместите какое-либо значение в '$ pid'
Попробуй это:
$update .= "WHERE id = {$pid} LIMIT 1";
Текстовый формат с $ pid возвращает не значение «PID», а текст «$ pid».
Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно как и Зачем, он решает проблему, что улучшит долгосрочную ценность ответа.
your MySQL server version for the right syntax to use near 'WHERE id= LIMIT 1' at line 1
Присмотритесь, и вы заметите id=. Для операции = нет rvalue. По какой-то причине ваш $pid пуст. Во фрагменте кода не показано, откуда взялся $pid.
Кроме того, после последнего столбца ставится запятая.
$update = "UPDATE posts SET ";
$update .= "title = '{$titel}', ";
$update .= "kortbe = '{$korbeskrivelse}', ";
$update .= "author = '{$skrib}', ";
$update .= "beskrivelse = '{$post}' "; // removed comma
$update .= "WHERE id=$pid LIMIT 1";
Кроме того, ваше приложение уязвимо из-за того, как вы строите запрос. Прочтите о «SQL-инъекция» и исправьте свой код, чтобы использовать параметризованные запросы вместо конкатенации строк.
Спасибо, и, пожалуйста, прочтите пост: D Он должен быть уязвимым.
также добавьте свой код формы