Здравствуйте, заранее извиняюсь за такую банальную просьбу. У меня есть 2 страницы - 1 php с формой, 2 php для обработки формы и отправки значений в бд. При выполнении запроса браузер выдаёт ошибку: Код (Text): 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 ' 181, 2, DuyoqZsfcss )' at line 3 Обработка формы: Код (Text): $member_left = $_POST['member_left']; $member_right = $_POST['member_right']; $winner = $_POST['win']; $project = $_POST['project_id']; $season = $_POST['season_id']; $stage = $_POST['stage']; $type = $_POST['type']; $country = $_POST['country_id']; $city = $_POST['city_id']; $video_url = $_POST['video_url']; $query = "INSERT INTO battles ( project_id, season_id, stage, type, mc_left_one, mc_right_one, win, country_id, city_id, video_url) VALUES ( $project, $season, $stage, $type, $member_left, $member_right, $winner, $country, $city, $video_url )"; $result = mysqli_query($conn, $query); echo mysqli_error($conn); if ($result) { echo ("Добавление прошло успешно"); } else { echo ("Данные не были добавлены"); } Сама форма: Код (Text): <form action="_addbattle.php" method="POST"> <select name="member_left" id="member_left"> <option value="">МС слева</option> <?php while ($row = mysqli_fetch_assoc($mcleft)) { $id = $row['id']; $nickname = $row['nickname1']; echo "<option value=" . $id . ">$nickname</option>"; } ?> </select> <select name="member_right" id="member_right"> <option value="">МС справа</option> <?php while ($row = mysqli_fetch_assoc($mcright)) { $id = $row['id']; $nickname = $row['nickname1']; echo "<option value=" . $id . ">$nickname</option>"; } ?> </select> <select name="win" id="win"> <option value="">Победитель</option> <?php while ($row = mysqli_fetch_assoc($win)) { $id = $row['id']; $nickname = $row['nickname1']; echo "<option value=" . $id . ">$nickname</option>"; } ?> </select> <br /> <br /> <select name="project_id" id="project_id"> <option value="">Проект</option> <?php while ($row = mysqli_fetch_assoc($projects)) { $id = $row['id']; $name = $row['name']; echo "<option value=" . $id . ">$name</option>"; } ?> </select> <select name="season_id" id="season_id"> <option value="">Сезон</option> <?php while ($row = mysqli_fetch_assoc($season)) { $id = $row['id']; $name = $row['name']; echo "<option value=" . $id . ">$name</option>"; } ?> </select> <select name="stage" id="stage"> <option value="">Этап</option> <?php while ($row = mysqli_fetch_assoc($stage)) { $id = $row['id']; $name = $row['name']; echo "<option value=" . $id . ">$name</option>"; } ?> </select> <select name="type" id="type"> <option value="">Тип</option> <?php while ($row = mysqli_fetch_assoc($type)) { $id = $row['id']; $name = $row['name']; echo "<option value=" . $id . ">$name</option>"; } ?> </select> <br /> <br /> <select name="country_id" id="country_id"> <option value="181">Россия</option> <?php while ($row = mysqli_fetch_assoc($country)) { $id = $row['id']; $name = $row['name']; echo "<option value=" . $id . ">$name</option>"; } ?> </select> <select name="city_id" id="city_id"> <option value="2">Питер</option> <?php while ($row = mysqli_fetch_assoc($city)) { $id = $row['id']; $name = $row['name']; echo "<option value=" . $id . ">$name</option>"; } ?> </select> <input type="text" name="video_url" id="video_url" placeholder="YouTube ID видео"> <input type="submit"> </form> Уже вроде всё перепроверил, наличие запятых, скобок и ковычек, но третий день не могу решить проблему, заранее спасибо. P.S. До того, как я добавил $type, $stage, $video_url, были остальные переменные все работало нормально.
бред я написал, нужно экранировать спец. символы из формы. https://php.ru/manual/function.htmlspecialchars.php либо http://php.net/manual/ru/mysqli.real-escape-string.html
@Yarkee, значения-то в кавычках должны быть, ну и экранирование, как выше сказали. --- Добавлено --- PHP: $member_left = $_POST['member_left']; Никогда не полагайтесь на то, что вам всегда будут поступать все опред. вами в форме параметры. Любой желающий может изменить состав передаваемых POST-параметров, поэтому их наличие всегда нужно проверять.
По экранированию не понял смысла (новичок ещё, может не понимаю зачем), у меня ни в одной строке нет спец-символов, только цифры и буквы. Но, всё равно спасибо) --- Добавлено --- Значения обернул в ковычки, заработало, спасибо)
Пользователь вставит в какое-нибудь значение кавычку и запрос поломается. Выше san4ez смешал две разные, хотя и немного связанные вещи вместе. Кодирование и экранирование – это не одно и то же.
Согласен, что о безопасности тоже стоит думать, но весь backend будет находиться только у меня на компьютере и доступ к нему закрыт для всех) На сайте будет только выводиться информация)
Что за наивность! К тому же, когда действительно понадобится кавычки внести, начнете костылями подпирать.