Объясните мне пожалуйста почему переменная $poll_id не добавляется в таблицу images, вместо нее добавляется 0. Причем если не делать выборку $poll_id из таблицы polls, а просто указать где-нибудь например, что $poll_id = 3, то 3 добавляется. код Код (Text): $uploaddir = 'images/'; // Вытаскиваем необходимые данные $file = $_POST['value']; $name = $_POST['name']; $title = $_POST['title']; // Получаем расширение файла $getMime = explode('.', $name); $mime = end($getMime); $data = explode(',', $file); $encodedData = str_replace(' ','+',$data[1]); $decodedData = base64_decode($encodedData); $randomName = substr_replace(sha1(microtime(true)), '', 12).'.'.$mime; if (isset($_POST['title'])) { $mysqli->query("INSERT INTO `polls` (title) VALUES ('$title')"); } $result2 = $mysqli->query("SELECT `poll_id` FROM `polls` WHERE `title`='$title'"); $row = $result2->fetch_row(); $poll_id = $row['poll_id']; // Создаем изображение на сервере if(file_put_contents($uploaddir.$randomName, $decodedData)) { $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')"); echo $randomName.":загружен успешно" ; } else { echo "Что-то пошло не так. Убедитесь, что файл не поврежден! "; }
Создается впечатление, что переменная $poll_id просто не видна в области функции: Код (Text): if(file_put_contents($uploaddir.$randomName, $decodedData)) { // Записываем данные изображения в БД $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')"); echo $randomName.":загружен успешно" ; } потому как в echo до и после этой функции $poll_id выводится корректно.
Честно, не понимаю где ошибка, пробовал даже так Код (Text): if(isset($_POST['title'])) { $result = $mysqli->query("INSERT INTO `polls` (title) VALUES ('$title')"); $poll_id = $mysqli->insert_id; } по идее должен возвращаться последний добавленный id, тоже не выходит. Дописывал в функцию Код (Text): if(file_put_contents($uploaddir.$randomName, $decodedData)) $poll_id и тоже ничего. Возможно я дико торможу и не замечаю очевидной ошибки, но самому разобраться не получается.
А вот если это всё заменить на код ниже? Код (Text): $query = "SELECT `poll_id` FROM `polls` WHERE `title`='$title'"; $res = mysql_query($query) or die(mysql_error()); $fg = array(); $fg = mysql_fetch_assoc($res); $poll_id = $fg['poll_id']; Ошибка прилетает?
Все равно не могу понять, если убрать проверку Код (Text): if(isset($_POST['title'])) , то $poll_id добавляется в таблицу images, но в таблице polls творится не понятно что, вместо одной записи добавляются столько, сколько картинок было загружено, причем title есть только у первой записи.
Код (Text): Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос! запрос!##########рос! Гл#####апрос!###### за#рос! #лян# запрос! Глянь Глянь з#прос! Глянь зап#ос! #лянь #апрос# Гл#нь за#рос# Глянь запрос! запрос!#Глянь запрос! #лянь #апрос# Глян# за#рос! #лян# запрос! Глянь Глянь з#прос! Глянь за#рос! #лянь #апрос# Гл#нь за#рос# Глянь запрос! запрос!#Глянь запрос! #лянь #апрос!#глян# за#рос! #лян# запрос! Глянь Глянь з#прос! Глянь з#прос! #лянь зап#### Гл#######рос#####нь запрос! запрос!#Глянь запрос!#Глянь #апрос! #лян# за#рос! #лян# зап#ос! Глянь Глянь з#прос! Глянь з#прос! #лянь з#прос# Гл#нь за#рос# Глян# запрос! запрос!#Глянь запрос# Глянь #апрос# Глян# за#рос! #лян# запр#с! Глянь Глянь з#прос! Глянь #апрос! #лянь#запрос# Гл#нь за#рос# Глян# запрос! запрос!#Глянь запрос# Глянь #апр#с! Глян# за#рос! #лян######ос! Глянь Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос! Глянь запрос!
Кажется я начинаю понимать в чем проблема. В выборке Код (Text): "SELECT *FROM `polls` WHERE `title`='$title' " если заведомо указать title который будет создан, например Код (Text): WHERE `title`='abc' , то все работает корректно. Получается в этом запросе не определяется переменная $title. Странно но она же объявлена в самом начале кода в глобальном массиве.
Так может в посте пусто. Распечатай $_POST и посмотри. А может надо задать? Код (PHP): if(isset ($title)) или Код (PHP): if($_POST['title'])
нет, там не пусто, в echo значение $title выводится нормально. Проблема кроется в этой выборке Код (Text): "SELECT *FROM `polls` WHERE `title`='$title' " . Добавлено спустя 4 минуты 33 секунды: Мистика просто. Добавлено спустя 2 минуты 59 секунд: так пробовал уже результат то же. Добавлено спустя 4 минуты 11 секунд: Из запроса Код (Text): "SELECT *FROM `polls` WHERE `title`='$title' " нужно получить $poll_id, чтобы затем вставить его в Код (Text): $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')"); . В таком виде вместо реального $poll_id в Images добавляется 0, но если в первом запросе вместо переменной $title написать просто будущий заголовок, то все работает как часы. При этом echo все значения выводятся корректно.
Что то я ничего не понимаю. Код (PHP): $uploaddir = 'images/'; $file = $_POST['value']; $name = $_POST['name']; $title = $_POST['title']; // вот если здесь вывести echo $title какое значение? $getMime = explode('.', $name); $mime = end($getMime); $data = explode(',', $file); $encodedData = str_replace(' ','+',$data[1]); $decodedData = base64_decode($encodedData); $randomName = substr_replace(sha1(microtime(true)), '', 12).'.'.$mime; if (isset($_POST['title'])) { $mysqli->query("INSERT INTO `polls` (title) VALUES ('$title')"); } $result2 = $mysqli->query("SELECT `poll_id` FROM `polls` WHERE `title`='$title'"); //а сюда если вставить вместо $title значение что ты чуть выше вывел через эхо? $row = $result2->fetch_row(); $poll_id = $row['poll_id']; // вот если здесь вывести echo $poll_id какое значение? if(file_put_contents($uploaddir.$randomName, $decodedData)) { $mysqli->query("INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')"); echo $randomName.":загружен успешно" ; } else { echo "Что-то пошло не так. Убедитесь, что файл не поврежден! "; }
$title = $_POST['title']; передается через ajax с клиента. Тут выведется реальное значение, которое было введено в input на стороне клиента. Это как ?
Код (PHP): $title = $_POST['title']; // если тут выводится Фи123нТ // тл тут вводишь $result2 = $mysqli->query("SELECT `poll_id` FROM `polls` WHERE `title`='Фи123нТ'");
Это уже даже не смешно... У тебя запрос не фурычит, что мешает посмотреть в каком виде он уходит в mysql, что возвращается и какова ошибка? Неужели так весело гадать? http://php.ru/manual/mysqli.error.html echo 'запрос';
Вот именно, я об этом и говорю. Если вписать не переменную, а уже само значение, например как тут Код (Text): WHERE `title`='Фи123нТ , то все работает, $poll_id вставляется в Код (Text): "INSERT INTO `images` (id,poll_id,date,catalog,filename) VALUES ('','$poll_id', NOW(),'$uploaddir','$randomName')" А вот так Код (Text): "SELECT *FROM `polls` WHERE `title`='$title' " не работает, ума не приложу почему.
****** так надо вставить именно то что эхом выводится а не абы какое значение. Допустим эхом выводится " 678" а ты проверяешь запрос с "678"
Да так работает если вписать значение, которое выводится в эхо. Но надо, чтобы работало с переменной, само.
Код (Text): $query = "SELECT `poll_id` FROM `polls` WHERE `title`='$title'"; $res = mysql_query($query) or die(mysql_error()); $fg = array(); $fg = mysql_fetch_assoc($res); $poll_id = $fg['poll_id']; Не смог опробовать этот код, т.к использую mysqli, а не mysql, и адаптировать под mysqli не получилось, вылазят ошибки в синтаксисе.
Ошибки не выводятся Код (Text): $res = $mysqli->query("SELECT *FROM `polls` WHERE title = '$title' "); $row = $res->fetch_row(); $poll_id = $row[0]; if (!$res) { echo "Errormessage: %s\n", $mysqli->error; }
Если бы мы сидели в одной комнате, я бы ударил тебя по лицу. Легонько. Я тебе рекомендую начать с того, с чего начинается любой дебаг неработающих запросов.