За последние 24 часа нас посетили 17825 программистов и 1715 роботов. Сейчас ищут 973 программиста ...

Ошибка добавления записи в таблицу MySQL

Тема в разделе "PHP для новичков", создана пользователем Yarkee, 27 июн 2017.

  1. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте, заранее извиняюсь за такую банальную просьбу. У меня есть 2 страницы - 1 php с формой, 2 php для обработки формы и отправки значений в бд. При выполнении запроса браузер выдаёт ошибку:
    Код (Text):
    1. 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):
    1. $member_left = $_POST['member_left'];
    2. $member_right = $_POST['member_right'];
    3. $winner = $_POST['win'];
    4. $project = $_POST['project_id'];
    5. $season = $_POST['season_id'];
    6. $stage = $_POST['stage'];
    7. $type = $_POST['type'];
    8. $country = $_POST['country_id'];
    9. $city = $_POST['city_id'];
    10. $video_url = $_POST['video_url'];
    11.  
    12. $query = "INSERT INTO battles (
    13.           project_id, season_id, stage, type, mc_left_one, mc_right_one, win, country_id, city_id, video_url) VALUES (
    14.           $project, $season, $stage, $type, $member_left, $member_right, $winner, $country, $city, $video_url
    15.           )";
    16. $result = mysqli_query($conn, $query);
    17. echo mysqli_error($conn);
    18. if ($result) {
    19.     echo ("Добавление прошло успешно");
    20. } else {
    21.     echo ("Данные не были добавлены");
    22. }
    Сама форма:
    Код (Text):
    1. <form action="_addbattle.php" method="POST">
    2.     <select name="member_left" id="member_left">
    3.         <option value="">МС слева</option>
    4.         <?php
    5.         while ($row = mysqli_fetch_assoc($mcleft)) {
    6.             $id = $row['id'];
    7.             $nickname = $row['nickname1'];
    8.             echo "<option value=" . $id . ">$nickname</option>";
    9.         }
    10.         ?>
    11.     </select>
    12.  
    13.     <select name="member_right" id="member_right">
    14.         <option value="">МС справа</option>
    15.         <?php
    16.         while ($row = mysqli_fetch_assoc($mcright)) {
    17.             $id = $row['id'];
    18.             $nickname = $row['nickname1'];
    19.             echo "<option value=" . $id . ">$nickname</option>";
    20.         }
    21.         ?>
    22.     </select>
    23.     <select name="win" id="win">
    24.         <option value="">Победитель</option>
    25.         <?php
    26.         while ($row = mysqli_fetch_assoc($win)) {
    27.             $id = $row['id'];
    28.             $nickname = $row['nickname1'];
    29.             echo "<option value=" . $id . ">$nickname</option>";
    30.         }
    31.         ?>
    32.     </select>
    33.     <br />
    34.     <br />
    35.     <select name="project_id" id="project_id">
    36.         <option value="">Проект</option>
    37.         <?php
    38.         while ($row = mysqli_fetch_assoc($projects)) {
    39.             $id = $row['id'];
    40.             $name = $row['name'];
    41.             echo "<option value=" . $id . ">$name</option>";
    42.         }
    43.         ?>
    44.     </select>
    45.     <select name="season_id" id="season_id">
    46.         <option value="">Сезон</option>
    47.         <?php
    48.         while ($row = mysqli_fetch_assoc($season)) {
    49.             $id = $row['id'];
    50.             $name = $row['name'];
    51.             echo "<option value=" . $id . ">$name</option>";
    52.         }
    53.         ?>    </select>
    54.     <select name="stage" id="stage">
    55.         <option value="">Этап</option>
    56.         <?php
    57.         while ($row = mysqli_fetch_assoc($stage)) {
    58.             $id = $row['id'];
    59.             $name = $row['name'];
    60.             echo "<option value=" . $id . ">$name</option>";
    61.         }
    62.         ?>    </select>
    63.     <select name="type" id="type">
    64.         <option value="">Тип</option>
    65.         <?php
    66.         while ($row = mysqli_fetch_assoc($type)) {
    67.             $id = $row['id'];
    68.             $name = $row['name'];
    69.             echo "<option value=" . $id . ">$name</option>";
    70.         }
    71.         ?>
    72.     </select>
    73.     <br />
    74.     <br />
    75.     <select name="country_id" id="country_id">
    76.         <option value="181">Россия</option>
    77.         <?php
    78.         while ($row = mysqli_fetch_assoc($country)) {
    79.             $id = $row['id'];
    80.             $name = $row['name'];
    81.             echo "<option value=" . $id . ">$name</option>";
    82.         }
    83.         ?>
    84.     </select>
    85.  
    86.     <select name="city_id" id="city_id">
    87.         <option value="2">Питер</option>
    88.         <?php
    89.         while ($row = mysqli_fetch_assoc($city)) {
    90.             $id = $row['id'];
    91.             $name = $row['name'];
    92.             echo "<option value=" . $id . ">$name</option>";
    93.         }
    94.         ?>
    95.     </select>
    96.  
    97.     <input type="text" name="video_url" id="video_url" placeholder="YouTube ID видео">
    98.  
    99.     <input type="submit">
    100. </form>
    Уже вроде всё перепроверил, наличие запятых, скобок и ковычек, но третий день не могу решить проблему, заранее спасибо.

    P.S. До того, как я добавил $type, $stage, $video_url, были остальные переменные все работало нормально.
     
  2. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    К сожалению, не выходит(
     
  3. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    Yarkee нравится это.
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    @Yarkee, значения-то в кавычках должны быть, ну и экранирование, как выше сказали.
    --- Добавлено ---
    PHP:
    1. $member_left = $_POST['member_left'];
    Никогда не полагайтесь на то, что вам всегда будут поступать все опред. вами в форме параметры. Любой желающий может изменить состав передаваемых POST-параметров, поэтому их наличие всегда нужно проверять.
     
    Yarkee нравится это.
  5. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    По экранированию не понял смысла (новичок ещё, может не понимаю зачем), у меня ни в одной строке нет спец-символов, только цифры и буквы. Но, всё равно спасибо)
    --- Добавлено ---
    Значения обернул в ковычки, заработало, спасибо)
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Пользователь вставит в какое-нибудь значение кавычку и запрос поломается.

    Выше san4ez смешал две разные, хотя и немного связанные вещи вместе. Кодирование и экранирование – это не одно и то же.
     
  7. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    Согласен, что о безопасности тоже стоит думать, но весь backend будет находиться только у меня на компьютере и доступ к нему закрыт для всех) На сайте будет только выводиться информация)
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Что за наивность! К тому же, когда действительно понадобится кавычки внести, начнете костылями подпирать.