За последние 24 часа нас посетили 18967 программистов и 1617 роботов. Сейчас ищут 1028 программистов ...

Не добавляется значение в INSERT

Тема в разделе "PHP для новичков", создана пользователем RageXL, 24 апр 2014.

  1. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Объясните мне пожалуйста почему переменная $poll_id не добавляется в таблицу images, вместо нее добавляется 0. Причем если не делать выборку $poll_id из таблицы polls, а просто указать где-нибудь например, что $poll_id = 3, то 3 добавляется.

    код
    Код (Text):
    1.  
    2. $uploaddir = 'images/';
    3.  
    4. // Вытаскиваем необходимые данные
    5. $file = $_POST['value'];
    6. $name = $_POST['name'];
    7. $title = $_POST['title'];
    8. // Получаем расширение файла
    9. $getMime = explode('.', $name);
    10. $mime = end($getMime);
    11.  
    12.  
    13. $data = explode(',', $file);
    14.  
    15.  
    16. $encodedData = str_replace(' ','+',$data[1]);
    17. $decodedData = base64_decode($encodedData);
    18.  
    19. $randomName = substr_replace(sha1(microtime(true)), '', 12).'.'.$mime;
    20.  
    21.  
    22. if (isset($_POST['title'])) {
    23.     $mysqli->query("INSERT INTO `polls` (title) VALUES ('$title')");
    24. }
    25.  
    26. $result2 = $mysqli->query("SELECT `poll_id` FROM `polls` WHERE `title`='$title'");
    27.         $row = $result2->fetch_row();
    28.         $poll_id = $row['poll_id'];
    29.  
    30. // Создаем изображение на сервере
    31. if(file_put_contents($uploaddir.$randomName, $decodedData)) {  
    32.  
    33.     $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')");
    34.  
    35.     echo $randomName.":загружен успешно" ;
    36.     }
    37. else {
    38.     echo "Что-то пошло не так. Убедитесь, что файл не поврежден! ";
    39. }
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а ты запрос-то глянь перед вставкой. может там че не то.
     
  3. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Создается впечатление, что переменная $poll_id просто не видна в области функции:
    Код (Text):
    1. if(file_put_contents($uploaddir.$randomName, $decodedData)) {  
    2.  
    3. // Записываем данные изображения в БД
    4.     $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')");
    5.  
    6.     echo $randomName.":загружен успешно" ;
    7.     }
    потому как в echo до и после этой функции $poll_id выводится корректно.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык ты запрос-то посмотри =)
     
  5. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Честно, не понимаю где ошибка, пробовал даже так
    Код (Text):
    1. if(isset($_POST['title'])) {
    2. $result = $mysqli->query("INSERT INTO `polls` (title) VALUES ('$title')");
    3. $poll_id = $mysqli->insert_id; 
    4. }
    по идее должен возвращаться последний добавленный id, тоже не выходит. Дописывал в функцию
    Код (Text):
    1. if(file_put_contents($uploaddir.$randomName, $decodedData))
    $poll_id и тоже ничего. Возможно я дико торможу и не замечаю очевидной ошибки, но самому разобраться не получается.
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ну запрос-то глянь...
     
  7. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    А вот если это всё заменить на код ниже?
    Код (Text):
    1. $query = "SELECT `poll_id` FROM `polls` WHERE `title`='$title'";
    2.             $res = mysql_query($query)  or die(mysql_error());
    3.            
    4.             $fg = array();
    5.             $fg = mysql_fetch_assoc($res);
    6.            
    7.             $poll_id = $fg['poll_id'];
    Ошибка прилетает?
     
  8. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Все равно не могу понять, если убрать проверку
    Код (Text):
    1. if(isset($_POST['title']))
    , то $poll_id добавляется в таблицу images, но в таблице polls творится не понятно что, вместо одной записи добавляются столько, сколько картинок было загружено, причем title есть только у первой записи.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (Text):
    1. Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос!
    2. запрос!##########рос! Гл#####апрос!###### за#рос! #лян# запрос! Глянь
    3. Глянь з#прос! Глянь зап#ос! #лянь #апрос# Гл#нь за#рос# Глянь запрос!
    4. запрос!#Глянь запрос! #лянь #апрос# Глян# за#рос! #лян# запрос! Глянь
    5. Глянь з#прос! Глянь за#рос! #лянь #апрос# Гл#нь за#рос# Глянь запрос!
    6. запрос!#Глянь запрос! #лянь #апрос!#глян# за#рос! #лян# запрос! Глянь
    7. Глянь з#прос! Глянь з#прос! #лянь зап#### Гл#######рос#####нь запрос!
    8. запрос!#Глянь запрос!#Глянь #апрос! #лян# за#рос! #лян# зап#ос! Глянь
    9. Глянь з#прос! Глянь з#прос! #лянь з#прос# Гл#нь за#рос# Глян# запрос!
    10. запрос!#Глянь запрос# Глянь #апрос# Глян# за#рос! #лян# запр#с! Глянь
    11. Глянь з#прос! Глянь #апрос! #лянь#запрос# Гл#нь за#рос# Глян# запрос!
    12. запрос!#Глянь запрос# Глянь #апр#с! Глян# за#рос! #лян######ос! Глянь
    13. Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос!
     
  10. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Кажется я начинаю понимать в чем проблема. В выборке
    Код (Text):
    1. "SELECT *FROM `polls` WHERE `title`='$title' "
    если заведомо указать title который будет создан, например
    Код (Text):
    1. WHERE `title`='abc'
    , то все работает корректно. Получается в этом запросе не определяется переменная $title. Странно но она же объявлена в самом начале кода в глобальном массиве.
     
  11. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Так может в посте пусто. Распечатай $_POST и посмотри.
    А может надо задать?
    Код (PHP):
    1. if(isset ($title)) 
    или
    Код (PHP):
    1. if($_POST['title']) 
     
  12. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    нет, там не пусто, в echo значение $title выводится нормально. Проблема кроется в этой выборке
    Код (Text):
    1. "SELECT *FROM `polls` WHERE `title`='$title' "
    .

    Добавлено спустя 4 минуты 33 секунды:
    Мистика просто.

    Добавлено спустя 2 минуты 59 секунд:
    так пробовал уже результат то же.

    Добавлено спустя 4 минуты 11 секунд:
    Из запроса
    Код (Text):
    1. "SELECT *FROM `polls` WHERE `title`='$title' "
    нужно получить $poll_id, чтобы затем вставить его в
    Код (Text):
    1. $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')");
    .

    В таком виде вместо реального $poll_id в Images добавляется 0, но если в первом запросе вместо переменной $title написать просто будущий заголовок, то все работает как часы.

    При этом echo все значения выводятся корректно.
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  14. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Что то я ничего не понимаю.
    Код (PHP):
    1. $uploaddir = 'images/';
    2.  
    3.  
    4. $file = $_POST['value'];
    5. $name = $_POST['name'];
    6. $title = $_POST['title'];
    7. // вот если здесь вывести echo $title какое значение?
    8. $getMime = explode('.', $name);
    9. $mime = end($getMime);
    10.  
    11.  
    12. $data = explode(',', $file);
    13.  
    14.  
    15. $encodedData = str_replace(' ','+',$data[1]);
    16. $decodedData = base64_decode($encodedData);
    17.  
    18. $randomName = substr_replace(sha1(microtime(true)), '', 12).'.'.$mime;
    19.  
    20.  
    21. if (isset($_POST['title'])) {
    22.    $mysqli->query("INSERT INTO `polls` (title) VALUES ('$title')");
    23. }
    24.  
    25. $result2 = $mysqli->query("SELECT `poll_id` FROM `polls` WHERE `title`='$title'"); //а сюда если вставить вместо $title значение что ты чуть выше вывел через эхо?
    26.       $row = $result2->fetch_row();
    27.       $poll_id = $row['poll_id'];   
    28. // вот если здесь вывести echo $poll_id какое значение?
    29.  
    30. if(file_put_contents($uploaddir.$randomName, $decodedData)) {   
    31.  
    32.    $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')");
    33.  
    34.    echo $randomName.":загружен успешно" ;
    35.    }
    36. else {
    37.    echo "Что-то пошло не так. Убедитесь, что файл не поврежден! ";
    38. }
     
  15. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    $title = $_POST['title']; передается через ajax с клиента.

    Тут выведется реальное значение, которое было введено в input на стороне клиента.
    Это как ?
     
  16. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Код (PHP):
    1. $title = $_POST['title'];
    2. // если тут выводится Фи123нТ
    3. // тл тут вводишь
    4. $result2 = $mysqli->query("SELECT `poll_id` FROM `polls` WHERE `title`='Фи123нТ'");
     
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Это уже даже не смешно...
    У тебя запрос не фурычит, что мешает посмотреть в каком виде он уходит в mysql, что возвращается и какова ошибка? Неужели так весело гадать?

    http://php.ru/manual/mysqli.error.html
    echo 'запрос';
     
  18. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Вот именно, я об этом и говорю. Если вписать не переменную, а уже само значение, например как тут
    Код (Text):
    1. WHERE `title`='Фи123нТ
    , то все работает, $poll_id вставляется в
    Код (Text):
    1. "INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')"
    А вот так
    Код (Text):
    1. "SELECT *FROM `polls` WHERE `title`='$title' "
    не работает, ума не приложу почему.
     
  19. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    ****** так надо вставить именно то что эхом выводится а не абы какое значение.
    Допустим эхом выводится " 678" а ты проверяешь запрос с "678"
     
  20. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Да так работает если вписать значение, которое выводится в эхо. Но надо, чтобы работало с переменной, само.
     
  21. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Просто фантастически звучит.
    И ошибка не прилетает?
     
  22. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Код (Text):
    1. $query = "SELECT `poll_id` FROM `polls` WHERE `title`='$title'";
    2. $res = mysql_query($query) or die(mysql_error());
    3.  
    4. $fg = array();
    5. $fg = mysql_fetch_assoc($res);
    6.  
    7. $poll_id = $fg['poll_id'];
    Не смог опробовать этот код, т.к использую mysqli, а не mysql, и адаптировать под mysqli не получилось, вылазят ошибки в синтаксисе.
     
  23. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Ошибки не выводятся
    Код (Text):
    1. $res = $mysqli->query("SELECT *FROM `polls` WHERE title = '$title' ");
    2. $row = $res->fetch_row();
    3. $poll_id = $row[0];
    4. if (!$res) {
    5.    echo "Errormessage: %s\n", $mysqli->error;
    6. }
     
  24. RageXL

    RageXL Новичок

    С нами с:
    14 авг 2013
    Сообщения:
    31
    Симпатии:
    0
    Больше никаких идей нету почему не работает ?
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Если бы мы сидели в одной комнате, я бы ударил тебя по лицу. Легонько.

    Я тебе рекомендую начать с того, с чего начинается любой дебаг неработающих запросов.