Приветствую! Прошу подсказки, а не сделать за меня. Приходит из формы произвольное количество ID ( name чекбоксов = exc[] ) При приеме собирается в текстовый ряд ID: Код (Text): if( count($_GET['exc']) > 0 ) { $exc = implode(', ',$_GET['exc']); } А как я могу получить для каждого полученного ID соответствующее название статьи? То есть я же не могу прописать заранее ассоциативный массив с названиями в этом случае, так как ID в таблице чекбоксов, доступных пользователю изначально, формируется из базы данных. Получается мне нужно, чтобы ассоциативный массив названий - id сформировался на лету, при получении списка выбранных id. Жесть, короче, написал. Посоветуете?
да, я так делал Код (Text): if( count($_GET['exc']) > 0 ) { $exc = implode(', ',$_GET['exc']); $str = ' IN ('.$exc.'); } $query = "SELECT * FROM puk WHERE `title` = '$str'"; и спотыкаюсь дальше
https://dev.mysql.com/doc/refman/5.0/en/comparison-operator ... unction_in WHERE `id` IN ('1','2'); документацию по IN очень сложно найти, тайные знания, ты теперь посвящён.
Ну так, ты сначала тянешь ид каждой статьи, формируешь список статьи, а потом уже в переменной $_GET у тебя уже будет нужные id при отправке на сервер выбранных чекбоксов. сначала 1. получим идентификатор новости Код (Text): "SELECT `id` FROM news;"; 2. формируем форму с чекбоксами 3. отправляем форму 4. А потом уже формируем новый запрос в базу как показал денис, или как то по другому, без помощи implode/
Если тебе надо получить title то Код (PHP): $query = "SELECT `title` FROM puk WHERE `id` in('$str');"; что то такое
Я тоже спать хочу ))) Вы не поняли спросоня. Я уже получил и сформировал набор ID в запросе "блаблабла IN (id1,id2,id3)" Короче задача получить titles для статей с выбранными ID, которые уже получены через get запрос. Добавлено спустя 1 минуту: вы меня не читаете))) это я уже сделал))) Добавлено спустя 52 минуты 44 секунды: Уточню: Вывел таблицу с титлами статей, id статей в качестве value и чекбоксами. Человек отметил те статьи, что ему интересны. Запрос GET передал эти выбранные id. Код (Text): if( count($_GET['id']) > 0 ) {$exc = implode(',',$_GET['id']);} Скидыщь! Красота - получили Код (Text): 5,15,67 Теперь хорошо бы списочком опять тайтлы подвесить на выбранные id. Добавляем сборку значений для запроса, выходит так: Код (Text): if( count($_GET['id']) > 0 ) {$exc = implode(',',$_GET['id']); $excquery.= ' IN('.$exc.')';} Получили запрос: Код (Text): $query = "SELECT * FROM puk WHERE `id` = '$excquery'"; то есть Код (Text): $query = "SELECT * FROM puk WHERE `id` = 'IN (5,15,67)' "; Получили в ответ массив титлов. И вот тут случается попа. Если бы варианты выбора чекбоксов всегда были одинаковые, то Код (Text): $puk[5] = 'Про любовь'; $puk[15] = 'Про картошку'; $puk[67] = 'Про соус Карри'; , далее Код (Text): $exces= array(); foreach ($_GET['id'] as $val) { $exces[] = $puk[$val];} $exces= implode(', ', $exces); echo $exces; Получили бы Код (Text): Про любовь,Про картошку,Про соус Карри НО! Чекбоксы все время имеют разные ID, так как список статей для выбора (в самом начале путешествия) формируется на лету из базы, на основе и свежих поступлений. Поэтому заранее определенный ассоциативный массив - не катит. Получается его нужно собирать на лету. И вот что делать бедному гусару, если список титлов нужен-нужен?
если только список title Там ты получаешь все содержимое, для таблицы которой id удовлетворяет условию Добавлено спустя 38 секунд: и вообще это тоже не должно быть проблемой, так тоже можно выдернуть из массива title Добавлено спустя 1 минуту 5 секунд: сделай вардам и посмотри структуру массива
Код (PHP): $sql = "SELECT id, title FROM puk WHERE id IN(10,20,30)"; ... while … { $output[$row['id']] = $row['title']; } var_export($output); // array(10=>john, 20=>mary, 30=>jose)
Большое спасибо за помощь! Но Код (Text): if( count($_GET['id']) > 0 ) {$exc = implode(',',$_GET['id']); $excquery.= ' IN('.$exc.')';} $query3 = "SELECT * FROM puk WHERE `id` = '$excquery'"; $res3 = mysql_query($query3) or die(mysql_error()); while( $row=mysql_fetch_assoc($res3)) { $output[$row['id']] = $row['title']; } var_export($output); Выводит NULL
Ну, собственно, вполне предсказуемый Код (Text): Notice: Undefined variable: output in .../bron_full.php on line 165 NULL
Поправил запрос и массив "родился": Код (Text): if( count($_GET['exc']) > 0 ) { $exc = implode(',',$_GET['exc']); $str3.= ' IN('.$exc.')'; } $query3 = "SELECT * FROM puk WHERE `id` $str3"; $res3 = mysql_query($query3) or die(mysql_error()); while($row=mysql_fetch_assoc($res3)) { $output[$row['id']] = $row['title']; } Код (Text): array ( 65 => 'Тисо-самшитовая роща в Сочи', 66 => 'Рафтинг на горных реках', ) Но Код (Text): $output[$exc] не выводит в нужном месте список значений массива :-(
Я признаю, что дико туплю и чувствую, что вы меня подводите вопросами к смыслу, но пока не ухватить... Глаз замылился, наверное. Или квалификации не хватает ((
ты совсем не понимаешь что такое массив, вот в чем беда. Добавлено спустя 1 минуту 24 секунды: [ ассоциативный ] массив в PHP это набор пар ключ => значение. у тебя есть ключи "65" и "66" но нет ключа "65,66"
Да, у меня мозг чисто гуманитарный, мне сложно в этом всем. Год назад я все помнил - но информация вообще не держится, приходится по мере необходимости писать что-то на PHP почти с нуля все изучать. Ну в итоге сделал так, но чувствую - халтура... echo '<td><span style="font-size:15px;color:#333; line-height: 18px;">'; $connect = connectDB(); { //Делаем третий запрос $query3 = "SELECT * FROM puk WHERE `id` $str3"; $res3 = mysql_query($query3) or die(mysql_error()); while($row=mysql_fetch_assoc($res3)) { echo $output[$row['id']] = $row['title']; } } closeDB ($connect); echo '</span></td>'; Добавлено спустя 6 минут 15 секунд: Но это явная фигня. Потому что я не могу управлять выводом в итоге. Результат закономерный: Тисо-самшитовая роща в СочиРафтинг на горных реках, без вариантов
Ну ты получил что просил с самого начала — названия статей. Только непонятно для чего ты их собирался использовать. Когда нет цели, нет и внятных ответов.
Извините. Статьи - условно. Есть список экскурсий. Список формируется из базы статей об экскурсиях. Из базы берется название экскурсии и ее ID, а также ссылка на нее. То есть человек открывает меню выбора экскурсий. На лету формируется список доступных экскурсий (описание которых в данный момент есть на сайте). Он щелкая на ссылку (на название), читает описание в отдельном окне. Если все нравится - отмечает чекбокс этой экскурсии. И так формирует набор чекбоксов тех экскурсий, которые хочет посетить. GET-запросом данные о выбранных экскурсиях (выбранные ID) уходят в форму бронирования. В этой форме просто нужно вывести списком выбранные человеком экскурсии, ну как бы резюмируя. Вот и вся задача.
Код (PHP): <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <?php $array_db = array(1 => 'example1', 'example2', 'example3', 'example4', 'example5', 'example6'); function render_checkbox($array_db, $boxes = array()) { $buff = "<form action='' method='post'>".PHP_EOL; foreach ($array_db as $key => $checkbox) { $checked = ''; if (isset($boxes[$key])) { $checked = ' checked'; } $buff .= "<input type=checkbox name=boxes[$key] value='1'$checked>$checkbox<br>".PHP_EOL; } $buff .= "<input type=submit><br>"; $buff .= "</form>"; return $buff; } echo render_checkbox($array_db, $_POST['boxes']); echo "<pre>"; var_dump($_POST['boxes']); echo "</pre>"; ?> </body> </html>