За последние 24 часа нас посетили 19274 программиста и 1646 роботов. Сейчас ищет 921 программист ...

Запись данных, переданных в AJAX-запросе, в MySQL при помощи РНР

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

  1. Zykov_Maksim

    Zykov_Maksim Новичок

    С нами с:
    29 авг 2018
    Сообщения:
    14
    Симпатии:
    0
    Всем привет!
    Глаз замылился уже, не могу разобраться)
    Помогите, пожалуйста, понять почему данные не записываются в БД...

    Передаю некие данные аяксом:
    Код (Javascript):
    1. var para1 = document.getElementById("test1");
    2. var test1 = para1.textContent;
    3. var para2 = document.getElementById("test2");
    4. var test2 = para2.textContent;
    5. $.ajax({
    6.      type: "POST",
    7.      url: 'sendData.php',
    8.      data: {q1:test1,q2:test2},
    9.      success: function(){
    10.          alert ("Success");
    11.      }
    12. })
    файл sendData.php должен принять эти данные и записать их в БД:
    PHP:
    1. global $conn;
    2. if ($_SERVER['REQUEST_METHOD']==='POST'){
    3. if(isset($_POST['q1']) && isset($_POST['q2'])){
    4.         $q1 = $_POST['q1'];
    5.         $q2 = $_POST['q2'];
    6.         $user_query = "INSERT INTO USER VALUES "." (NULL, '$q1', '$q2', '$q1', '$q2')";
    7.         $res = $conn->query($user_query);
    8.         if (!$res) echo "Сбой при вставке данных: $user_query<br>".
    9.         $conn->error . "<br><br>";
    10. }}
    Аякс запрос выполняется без ошибок, а на стороне сервера тишина :confused:
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    На «глаз замылился» не тянет. Скорее бревно в глаз попало. Нет перечисления имен полей (практически всегда используется), данные не экранируются перед вставкой в запрос.
     
  3. Zykov_Maksim

    Zykov_Maksim Новичок

    С нами с:
    29 авг 2018
    Сообщения:
    14
    Симпатии:
    0
    То, что ты перечислил, влияет на выполнение запроса? или кто-то решил по-умничать?
     
  4. yanuzay

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

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    так ты сервер и не слушаешь.

    alert("Success"); не срабатывает?

    используешь версию jQuery до 1.9.0.? иначе я бы попробовал заменить type: "POST" , на method: "POST"

    А и еще. ты NULL пытаешься писать в индексный столбец:eek:
     
    #4 yanuzay, 28 окт 2018
    Последнее редактирование: 28 окт 2018
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Почему jquery?
     
  6. Zykov_Maksim

    Zykov_Maksim Новичок

    С нами с:
    29 авг 2018
    Сообщения:
    14
    Симпатии:
    0
    alert срабатывает. Данные на сервер передаются. Пробовал выводить значения через echo ".$_POST['q1']." and ".$_POST['q2'] и смотреть результат на стороне клиента - все Ок!
    Косяк, получается, именно в записи значений в базу. Передаю как числовые, так и текстовые значения. Тип передаваемых данных соответствует столбцам таблицы. Может есть какие-то мысли по этому поводу?
    На счет NULL в индексном столбце я удивлен. так делать нельзя?) дело в том, что я только начинаю изучать эту область, и в книгах, которые я читал это не возбранялось. И примеры кода были рабочими)
    Версия jQuery версии 3.3.1.
    --- Добавлено ---
    А что посоветуете?
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Так делать нежелательно. Поведение зависит от настроек сервера БД. Вплоть до неработоспособности.
    --- Добавлено ---
    @yanuzay, ну по коду ТСа вообще трудно понять, куда он пытается писать NULL, поэтому я и не стал писать об этом. Но догадаться конечно можно.
     
  8. yanuzay

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

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    а что тут думать ?
    читай про insert into и пиши в базу с указанием столбцов в которые ты хочешь записать.
    первый столбец id у тебя наверно с автоинкрементом, зачем тебе туда что то писать, тем более NULL
     
  9. Zykov_Maksim

    Zykov_Maksim Новичок

    С нами с:
    29 авг 2018
    Сообщения:
    14
    Симпатии:
    0
    Ладно, спасибо за ответы. Буду дальше ковыряться.
     
  10. Zykov_Maksim

    Zykov_Maksim Новичок

    С нами с:
    29 авг 2018
    Сообщения:
    14
    Симпатии:
    0
    Проблема была в запросе. Нужно явно указывать столбцы, в которые пишешь)
    Код (Text):
    1. INSERT INTO test (id,row1,row2,row3,row4) VALUES (NULL,'$q1','$q2','$q3','$q4')"
    Если писать NULL в индексный столбец, никаких проблем нет. Автоинкремент работает. Любопытно, что на учебных примерах без указания столбцов все работало.
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Сказал же, что это «закладка». Где-нибудь в др. месте решишь поднять сайт, может и не заработать.

    Структуру таблицы могли изменить, или набор записываемых данных.
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Zykov_Maksim, а теперь почитай про SQL-инъекции и подготовку запросов
     
  13. yanuzay

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

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    зачем ты пишешь null в поле id , у него же итак автоинкремент!
    не отправляй в поле id ничего, он и так сделает свое дело