Pavel
Участник
Offline
|
|
« : 03-03-2008 10:28 » |
|
У меня такая проблема, при помощи массива я создаю список предметов под каждым из которого флажок:
<form>
<? $Predmet = array ("Биология","Химия","Экономика"); foreach ($Predmet as $value){ echo ("<input type = 'checkbox' name = 'Predm[]' value = '$value'>$value"); }
?>
<br> <input type = "submit" value = "Отправить"> </form>
Проблема заключается в том что не знаю что нужно прописать , чтобы при нажатии кнопки показывало список предметов выбранных флажками, т.е. если мы выбираем например Биология и Экономика был результат:
Перечень предметов выбранных флажком: Биология, Экономика.
Если я указываю $Predm то показывает только название последнего предмета, помеченного флажком.
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #1 : 03-03-2008 10:36 » |
|
что-то намудрил определённо лишнего
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #2 : 03-03-2008 10:40 » |
|
из того, что должно получиться (правда не пробовала у себя запускать): несколько чекбоксов с одинаковыми именами, содержащими нежелательный символ. Что-то удивляет? Последний элемент формы и считается действительным в таком случае. И то это какая-то извращённая квирксмода наверно должна быть. На этот вывод же наверняка должны орать неблагим матом и валидатор и консоль ошибок. Не смутило?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 03-03-2008 10:45 » |
|
а что говорит print_r($_POST)
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #4 : 03-03-2008 11:16 » |
|
и наверное нужно еще и так i=0; foreach ($Predmet as $value){ echo ("<input type = 'checkbox' name = 'Predm[i]' value = '$value'>$value"); i++; }
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #5 : 03-03-2008 11:35 » |
|
здесь если мы так назовем имя чекбокса name = 'Predm[]', то на выходе как я понимаю создатся массив (при выборе Биология, Экономика): $Predm = array (Биология, Экономика);
Если это так то остается только вывести из него значения:
<? echo ("$Predm") ?>
а фиг возвращает пустое значение((
|
|
|
Записан
|
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #6 : 03-03-2008 11:45 » |
|
print_r($_POST) - создает пустой массив Array ()
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #7 : 03-03-2008 12:47 » |
|
Pavel, implode(', ', $predm)
Пустой $_POST говорит, что данные передаются методом GET - для POST надо указать в форме method="post".
Все полученные от в запросе параметры находятся в массивах $_GET и $_POST. Глобальные переменные создаются только при включенной опции register_global в на стройках PHP! В современных версиях (и уже давно) эта опция по умолчанию выключена (что правильно).
Шильгия, тут все путем - это стандартный метод передачи N значений под одним именем для PHP.
N отмеченных чекбоксов с именем "predm[]" создадут N строк "predm[]=...." в запросе к серверу. PHP обрабатывает такой случай, создавая массив $_POST['predm'] и заполняя его всеми полученными вариантами.
|
|
« Последнее редактирование: 03-03-2008 12:55 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #8 : 03-03-2008 12:54 » |
|
На выходе: Выполняемые предметы: implode(', ', Array) ;
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #9 : 03-03-2008 12:56 » |
|
Pavel, дык, это не просто строка - это команда!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #10 : 03-03-2008 13:01 » |
|
а где ее разместить?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #11 : 03-03-2008 14:00 » |
|
print_r($_GET) что дает?
хелп на implode(', ', Array) не рулит?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Aveic
Постоялец
Offline
Пол:
Yellow
|
|
« Ответ #12 : 03-03-2008 14:48 » |
|
Почитал ваши посты. Странно как-то все. Изначально, была просьба просто добавить код, который выведет список выбранных предметов. Проблема заключается в том что не знаю что нужно прописать , чтобы при нажатии кнопки показывало список предметов выбранных флажками, т.е. если мы выбираем например Биология и Экономика был результат: Перечень предметов выбранных флажком: Биология, Экономика.
Раз форма не содержит аттрибут action и method, то данные придут на эту же страницу методом GET. Значит, надо просто проверить пришло ли что-нибудь, и если да, то вывести массив $_GET['Predm']. Вот пример, как это можно сделать: <?php if(!empty($_GET['Predm'])) { echo "Список предметов: ".implode(', ', $_GET['Predm'])."<br/>"; } ?> <form>
<? $Predmet = array ("Биология","Химия","Экономика"); foreach ($Predmet as $value){ echo ("<input type = 'checkbox' name = 'Predm[]' value = '$value'>$value"); }
?>
<br> <input type = "submit" value = "Отправить"> </form>
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #13 : 03-03-2008 15:11 » |
|
Aveic, а где видно из стартпоста, что форма не содержит аттрибут action и method,
чтобы при нажатии кнопки показывало - где показывало?
Каков вопрос - такой ответ, и что мы что-то не то посоветовали?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Aveic
Постоялец
Offline
Пол:
Yellow
|
|
« Ответ #14 : 03-03-2008 16:34 » |
|
Aveic, а где видно из стартпоста, что форма не содержит аттрибут action и method,
Вот: У меня такая проблема, при помощи массива я создаю список предметов под каждым из которого флажок:
<form>
<?
Я не хотел никого обижать, простите. Просто показалось все странным
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #15 : 03-03-2008 16:45 » |
|
Aveic, а вот слона-то я и не заметил , каюсь
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #16 : 03-03-2008 21:03 » |
|
Извините выложил не полностью суть проблемы:
Итак имеем:
<? if (empty($userName)){ //вывод формы пустой ?> <h2><center>Пожалуйста внимательно заполните все поля в нижеприведенной форме</center></h2>
<form> Фамилия, Имя, Отчество: <input type = "text" size = 50 name = "userName"><br> <? $Predmet = array ("Биология","Химия","Экономика"); foreach ($Predmet as $value){ echo ("<input type = 'checkbox' name = 'Predm[]' value = '$value'>$value");
} ?>
<br> <input type = "submit" value = "Отправить"> </form> <? } else { //после нажатия кнопки Отправить получаем
<h2>Проверьте корректность введенных данных</h2><br> <h3>Фамилия, Имя, Отчество: $userName;<br> Предметы, помеченные флажком: .... , ... , ; //вот тут то и суть проблемы что сюда вписать чтобы предметы помеченные флажком в if вот сюда передались ?
|
|
|
Записан
|
|
|
|
Aveic
Постоялец
Offline
Пол:
Yellow
|
|
« Ответ #17 : 03-03-2008 21:17 » |
|
ну собственно ответ уже прозвучал вставить echo "Список предметов: "; if(!empty($_GET['Predm'])) echo implode(', ', $_GET['Predm']); else echo "(нет выбранных предметов)"; В ветвь else
|
|
« Последнее редактирование: 03-03-2008 21:20 от Aveic »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #18 : 03-03-2008 23:46 » |
|
Aveic, empty() применять здесь нельзя - надо использовать isset(). Хороший код не должен выдавать ошибок никакого уровня.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Aveic
Постоялец
Offline
Пол:
Yellow
|
|
« Ответ #19 : 04-03-2008 00:02 » |
|
Aveic, empty() применять здесь нельзя - надо использовать isset(). Хороший код не должен выдавать ошибок никакого уровня.
Исправлюсь Хотя, а какую ошибку он может выдасть? Вроде он ничего не выдает
|
|
« Последнее редактирование: 04-03-2008 00:05 от Aveic »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #20 : 04-03-2008 01:46 » |
|
Aveic, а ты включи все сообщения - включая NOTICE. Получишь ошибку, что переменная не существует. empty() проверяет на "пустое" значение - это эквивалент логической операции, а наличие переменной проверяет isset(). Returns FALSE if var has a non-empty and non-zero value.
The following things are considered to be empty:
* "" (an empty string) * 0 (0 as an integer) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #21 : 04-03-2008 07:43 » |
|
Закинул код в конструкцию поl else, вот что пишет обработчик:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\index.php on line 110
под десятой строкой числится команда: if(!empty($_GET['Predm']))
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #22 : 04-03-2008 08:10 » |
|
Pavel, оформи код тегами code в кавадратных скобках <?php if (empty($userName)){ //вывод формы пустой echo (" <h2><center>Пожалуйста внимательно заполните все поля в нижеприведенной форме</center></h2> <form> Фамилия, Имя, Отчество: <input type = "text" size = 50 name = "userName"><br>"); $Predmet = array ("Биология","Химия","Экономика"); foreach ($Predmet as $value){ echo ("<input type = 'checkbox' name = 'Predm[]' value = '$value'>$value"); } echo(" <br> <input type = "submit" value = "Отправить"> </form>"); } else { //после нажатия кнопки Отправить получаем echo (" <h2>Проверьте корректность введенных данных</h2><br> <h3>Фамилия, Имя, Отчество: $userName;<br>"); ); } ?>
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #23 : 04-03-2008 08:34 » |
|
А в каком редакторе можно видеть код разными цветами? дрим вьювер?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #24 : 04-03-2008 10:08 » |
|
Pavel, notepad++ Закинул код в конструкцию поl else, вот что пишет обработчик:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\index.php on line 110
под десятой строкой числится команда: if(!empty($_GET['Predm']))
Еще раз: if (isset($_GET['Predm']) && !empty($_GET['Predm'])) { // ....... } else { // ........ } Всегда надо проверять наличие входного параметра! Выполни такой код (на отдельной пустой странице): <?php
header('Content-type: text/plain'); print_r($_GET);
?> Вызывать страницу надо с произвольными параметрами. Например: mypage.php?a=1&b=2&c=qwerty Если страница выдаст ошибку отсутствия переменной, то дело в настройках (или очень древней версии) PHP.
|
|
« Последнее редактирование: 04-03-2008 11:03 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #25 : 04-03-2008 10:59 » |
|
notepad++ - отличная программка спасибо! )
|
|
|
Записан
|
|
|
|
Pavel
Участник
Offline
|
|
« Ответ #26 : 04-03-2008 11:12 » |
|
После вызова страницы с командой:
<?php
header('Contetnt-type: text/plain'); print_r($_GET);
?>
Выдало:
Array ( )
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #27 : 04-03-2008 13:12 » |
|
Pavel, значит все путем. Следуй советам, проверяй все входные параметры сперва на существование, а потом на допустимость значений, и все будет хорошо. Кстати, посмотри книжку - тут Aveic перевел на русский - полезно будет: https://club.shelek.ru/download.php?id=359
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Aveic
Постоялец
Offline
Пол:
Yellow
|
|
« Ответ #28 : 04-03-2008 17:11 » |
|
да, почитай переводик
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #29 : 04-03-2008 19:08 » |
|
<?php
header('Contetnt-type: text/plain'); print_r($_GET); echo (" <h2><center>Пожалуйста внимательно заполните все поля в нижеприведенной форме</center></h2> <form> Фамилия, Имя, Отчество: <input type = 'text' size = 50 name = 'userName'><br>"); $Predmet = array ("Биология","Химия","Экономика"); foreach ($Predmet as $value){ echo ("<input type='checkbox' name='Predm[]' value='".$value."'> $value"); echo("<br>"); } echo(" <br> <input type = 'submit' value = 'Отправить'> </form>");
?>
у меня работает
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|