Помогите правильно сделать выборку. При загрузке файлов на сервер название ВСЕХ файлов сохраняются в БД(Mysgl) в поле' name',а так же название этих файлов сохраняются в сессию. Как правильно сделать выборку из базы,где значения поля 'name' совпадает со ВСЕМИ значениями в сессии. Дело в том,что в сессию например сохранено название трех файлов,у меня получается выбрать одно значение из 'name',которое было сохранено в сессию последним. А должно выбраться 3 значения. Выборка: $get_coords = mysqli_query($link, "SELECT * FROM cms_dnevnik WHERE name ='$value'"); $value- это значение сессии
IN() позвольте полюбопытствовать, а зачем писать и в сессию и в базу? А потом ещё и доставать из базы, основываясь на сессии?
Затем ,когда картинки загружаются они выводятся из базы на страницу,когда страница закрывается сессия удаляется и при повторном просмотре страницы картинки не выводятся. Иначе картинки выводятся. Это одна из причин. Добавлено спустя 2 минуты 38 секунд: Можно конкретный пример с IN(); ? Я уже несколько вариантов пробовала.
хм, если картинки загрузились только что и информация о них хранится в сессии, то что мешает вообще не дёргать базу для вывода? Если всё равно использовать связку сессия - база, то лучше хранить id записей в БД, а не имя. Хотя бы индекс будет использоваться. А при повторном посещении эти картинки уже не показываются?
Потому что на одной странице,когда картинки загружаются они выводятся один раз,поэтому нужна сессия. А на другой странице они выводятся в любом случаи. Добавлено спустя 1 минуту 10 секунд: Вообщем без сессии никак и ваш вариант тоже уже был применен на практике.Не вариант!
С именами неудобно, Luge дело говорит С ID было бы проще. А так что-то вроде этого, наверное: Код (PHP): $names = array (); // вот почему со строками не удобно, их экранировать надо. foreach ($_SESSIONS["fnames"] as $fname) { $names[] = sprintf("'%s'", mysqli_real_escape_string($fname)); } // а если бы в массиве были id, написали бы только эту строку $get_coords = mysqli_query($link, sprintf("SELECT * FROM cms_dnevnik WHERE name in (%s)", implode(",", $names))); Код не пробовал, но по идее должно сработать
К сожалению с id не получается. Сейчас попробую ваш вариант,отпишусь! Добавлено спустя 6 минут 1 секунду: Вот мой вариант. Код (Text): //сохраняем название файлов в сессию session_start(); $nam[]=$nazvanie;// $nazvanie-это название файлов $_SESSION['nazvanie'][ sizeof($_SESSION['nazvanie']) ] = $nam; // записываем все названия файлов в сессию. //вытаскиваем значения из сессии {php} session_start(); foreach ($_SESSION['nazvanie'] as $v) { foreach($v as $value){ echo '<h3>' . $value. '</h3>' ; } } {/php} //Делаем выборку {php} $get_coords = mysqli_query($link, "SELECT * FROM cms_dnevnik WHERE name ='$value'"); while($row = mysqli_fetch_array($get_coords)) { $id = $row['id']; $name = $row['name']; $x = $row['x_pos']; $y = $row['y_pos']; $width= $row['width']; $height= $row['height']; if($width==0 AND $height==0){ echo '<div id="element" style="left:'.$x.'px; top:'.$y.'px;"><img id="img" src="/components/dnevnik/image/'.$name.'"/></div>'; // выводим изображения в браузер. } else{ echo '<div id="element" style="left:'.$x.'px; top:'.$y.'px;"><img id="img" style=" width:'.$width.'px; height:'.$height.'px;" src="/components/dnevnik/image/'.$name.'"/></div>'; } } {/php} Что исправить? Добавлено спустя 2 минуты 27 секунд: Значения которые сохраняются в массив. Код (Text): Array ( [0] => Array ( [0] => 494b5036330ed1cd4c3cf2cf2dbd0d75.jpg ) [1] => Array ( [0] => 2e42aa5cb7b4a527981055f129bc4018.jpg ) [2] => Array ( [0] => e3028192ec5d39db16282ad66d519a03.jpg ) ) Добавлено спустя 56 секунд: Хотелось бы свой код доработать и найти ошибки.
А вот это зачем? У вас в сессии чёрт знает что творится в результате. Мой код предполагает, что в сессии массив имён файлов, а не массив массивов имён файлов...
Отвечу почему! Вариант Код (Text): $names = array (); В этом случаи в сессию загружается значения файла,который был загружен последний Добавлено спустя 36 минут 46 секунд: mkramer,спасибо! Код (Text): $names = array (); действительно косяк. Сейчас в массиве передается только название файлов. Но только в этом варианте Код (Text): $_SESSION['nazvanie'][ sizeof($_SESSION['nazvanie']) ] = $nazvanie; Но с выводом пока не разобралась.
Сейчас попробую описать! Добавлено спустя 5 минут 21 секунду: Загружаем картинки на одной странице,они выводятся на эту же страницу сразу же как загрузили. При повторном просмотре страницы ранее загруженные картинки уже не выводятся на эту страницу. Но можно загрузить другие картинки,они так же выводятся на страницу. При повторном заходе на страницу ничего не выводится и т.д Т.е один раз загружаем картинки они появляются,когда закрываем страницу они больше не появляются. Понятно? Добавлено спустя 1 минуту 52 секунды: А если сессию не использовать,то при повторном заходе на страницу выводятся все картинки,которые были загружены ранее
Так как это всё уже несколько тем тянется, то давай с начала и по всем пунктам. 1. Какой код заливает файлы?
Должны выводится те картинки ,кот. были загружены перед тем,как страница закроется. Добавлено спустя 1 минуту 59 секунд: ЩАС НАПИШУ!
Вы, как и многие, не представляете (или не до конца понимаете) как PHP работает. Страница закроется-откроется - это всё не то. Т.е. грубо говоря схема работы, если я вас понял, должна быть такая: Пользователь выбрал в форме файлы и отправил на сервер Скрипт принял эти файлы, записал куда надо, поместил имена файлов в базу. Вот в этом месте вполне он может записать в сессию ID только что загруженных картинок. После этого произошла переадресация на скрипт, выводящий форму. Он, обнаружив ID недавно загруженных картинок в сессии, вывел их в браузер и стёр из сессии
С загрузкой проблем нет. Часть кода: //Описание кода.Если файл перемещен в папку 'image' сохраняем название файлов в сессию. $nazvanie- это название файлов,кот загружаются в сессию и в БД в поле 'name'. Если все прошло успешно делаем редирект на страницу zapolnit.php Код (Text): if(rename($_SERVER['DOCUMENT_ROOT']."/components/dnevnik/img/".$nazvanie,$_SERVER['DOCUMENT_ROOT']."/components/dnevnik/image/".$nazvanie)){ // если файл переместился из img в image require_once($_SERVER['DOCUMENT_ROOT']."/components/dnevnik/config.php");// подключаемся к БД $sql = "INSERT INTO cms_dnevnik (name,x_pos, y_pos) VALUES('$nazvanie','$x_coord','$y_coord')";// Записываем название файла,координаты загрженного файла в таблицу "cms_dnevnik" mysqli_query($link, $sql); //если все прошло успешно echo '<p style="color:green">Файл удачно загружен!</p>'; session_start(); // сессия $_SESSION['nazvanie'][ sizeof($_SESSION['nazvanie']) ] = $nazvanie; // записываем все названия файлов в сессию. header("Location: http://hudeem.ru/dnevnik/zapolnit"); // делаем редирект обратно на форму загрузки. } Файл zapolnit.php Получаем значения сессии Код (Text): {php} session_start(); foreach ($_SESSION['nazvanie'] as $value) { echo '<h3>'.$value.'</h3>'; } {/php} Выборка Код (Text): {php} $get_coords = mysqli_query($link, "SELECT * FROM cms_dnevnik WHERE name ='$value'"); // делаем выборку while($row = mysqli_fetch_array($get_coords)) { $id = $row['id']; $name = $row['name']; $x = $row['x_pos']; $y = $row['y_pos']; $width= $row['width']; $height= $row['height']; if($width==0 AND $height==0){ echo '<div id="element" style="left:'.$x.'px; top:'.$y.'px;"><img id="img" src="/components/dnevnik/image/'.$name.'"/></div>'; } else{ echo '<div id="element" style="left:'.$x.'px; top:'.$y.'px;"><img id="img" style=" width:'.$width.'px; height:'.$height.'px;" src="/components/dnevnik/image/'.$name.'"/></div>'; } } {/php}
mkramer, поделюсь сслками на такой случай, чтоб не перепечатывать постоянно http://phpfaq.ru/na_tanke и http://phpfaq.ru/newbie p.s. ЛС глянь Добавлено спустя 3 минуты 33 секунды: Olga-Li, нет. Это ерунда. Для начала давай сделаем нормальную обработку файлов. Вот пример формы и обработчика http://php.ru/manual/features.file-upload.post-method.html
1)Пользователь выбрал в форме файлы и отправил на сервер 2)Скрипт принял эти файлы, записал куда надо, поместил имена файлов в базу. 3)записать в сессию ID только что загруженных картинок. 4)После этого произошла переадресация на скрипт, выводящий форму и вывод загруженных картинок. 5)Когда закрывается страница,удаляется сессия. Добавлено спустя 2 минуты 4 секунды: Luge,спасибо за ссылки,завтра буду тщательно читать! Начну с http://phpfaq.ru/newbie
Давай! Добавлено спустя 1 минуту 18 секунд: Как id загруженной картинки сохранить в сессию? Такой вопрос будет правильнее?
вот, поэтому для начала предлагаю тебе переделать загрузку файлов согласно примера в http://php.ru/manual/features.file-upload.post-method.html Без rename().
Код (Text): move_uploaded_file($temp,"image/".$nazvanie); $temp-временная папка $nazvanie-название загруженного файла