Всем привет! пол дня ломаю голову над такой вот штукой:
есть семь чекбоксов. Каждый имеет уникальное имя и одинаковое значение "yes"Код:При выборе одного пунктика проблем не возникает, но если выбрать несколько - то в значении page отображается наиболее высокое значение. Как сделать так, чтобы при выборе нескольких чекбоксов отображались все значения выбранных...if ($_POST['1'] == 'yes') $page = '1'; if ($_POST['2'] == 'yes') $page = '2'; if ($_POST['3'] == 'yes') $page = '3'; if ($_POST['4'] == 'yes') $page = '4'; if ($_POST['5'] == 'yes') $page = '5'; if ($_POST['6'] == 'yes') $page = '6'; if ($_POST['7'] == 'yes') $page = '7'; echo $page
Заранее спасибо)))
- 01.07.2013 15:11Banned


- Регистрация: 03.03.2012
- Сообщений: 163
- Репутация: 11
- 01.07.2013 15:17
Так переменные должны быть разные, а не одна $page. Либо использовать конкантенацию:
PHP код:if ($_POST['1'] == 'yes') $page .= '1';
if ($_POST['2'] == 'yes') $page .= '2';
if ($_POST['3'] == 'yes') $page .= '3';
if ($_POST['4'] == 'yes') $page .= '4';
if ($_POST['5'] == 'yes') $page .= '5';
if ($_POST['6'] == 'yes') $page .= '6';
if ($_POST['7'] == 'yes') $page .= '7';
- 02.07.2013 10:27
furian, можно просто добавлять значения в массив:
PHP код:А дальше работать с этим массивом как вам нужно, через цикл или implode, если нужны строки с номерами страниц$page = array();
if ($_POST['1'] == 'yes') $page[] = '1';
if ($_POST['2'] == 'yes') $page[] = '2';
if ($_POST['3'] == 'yes') $page[] = '3';
if ($_POST['4'] == 'yes') $page[] = '4';
if ($_POST['5'] == 'yes') $page[] = '5';
if ($_POST['6'] == 'yes') $page[] = '6';
if ($_POST['7'] == 'yes') $page[] = '7';
- 05.07.2013 23:55
Вы вообще неверно делаете. Используйте массивы, подобного кода никогда не должно быть в проекте:
PHP код:if ($_POST['1'] == 'yes') $page .= '1';
if ($_POST['2'] == 'yes') $page .= '2';
if ($_POST['3'] == 'yes') $page .= '3';
if ($_POST['4'] == 'yes') $page .= '4';
if ($_POST['5'] == 'yes') $page .= '5';
if ($_POST['6'] == 'yes') $page .= '6';
if ($_POST['7'] == 'yes') $page .= '7';
- 06.07.2013 00:09
furian, советую вам почитать учебники программирования. Причем не по конкретному языку, а по простейшим алгоритмам. Которые детям в школе / студентам на первом курсе объясняют. Так как есть гораздо более простой способ:
К name'ам check-box'ов в форме прибавьте какую-нибудь уникальную штуку. В примере - просто английская буква 'с'.
И в обработчике поставьте такой код:PHP код:for ($i=1; $i<=7; $i++){
if ($_POST['c'.$i] == 'yes')
$page .= $i;
}
- 06.07.2013 21:30
kik11, неверно с точки зрения архитектуры, но пример то, конечно, рабочий.
Последний раз редактировалось ap0stal; 06.07.2013 в 21:42.
- 06.07.2013 21:41
ap0stal, почему?
Я не гуру php, хотелось бы узнать.
Из-за конкатенации строки с целым числом? - 06.07.2013 21:52
kik11, потому что, если вдруг изменится количество полей в front-части, нужно будет изменять предложенный Вами код. Если использовать массивы - всего этого можно избежать. Разрабатывая системы, нужно придерживаться принципа, если так уместно выразиться, минимализма. Чтобы в случае необходимости, код изменялся в одном месте, и изменения применялись по всему приложению.
Вообще в более широком смысле на системах, взаимодействующей с другими приложениями и базами данных - это может оказаться достаточно сложно (например, я делал систему микроплатежей для Уганды, по аналогии с QIWI, когда клиент выбирает провайдера: ОПСоСа или поставщику электроэнергии по счетчику, у каждого из них свои диалоги и поля, требующие заполнения пользователем, при этом принцип "не дублирования" по всей системе сохраняется).
Но на более начальном уровне - как элементарная форма, лучше приучить себя делать правильно. - 06.07.2013 21:58
ap0stal, спасибо. Можете показать правильный пример?
Я понял идею, но реализацию не придумал. - 10.07.2013 00:18
а не проще передать чекбоксы массивом, если это выбор нескольких значений одного поля грубо говоря то есть
Код HTML:и уже в php<input type=checkbox name=box[] value=1 /> <input type=checkbox name=box[] value=2 /> <input type=checkbox name=box[] value=3 /> <input type=checkbox name=box[] value=4 />
PHP код:если правильно понял твою задачу то это то что тебе нужно
if(isset($_POST['box'])){
print_r($_POST['box']);
}
соответственно в $_POST['box'] попадут только чекбоксы которые были чекнуты, либо пустое если нет,
в случае если тебе нужно конкретное значение для $page, а не данные выбранных чекбоксов
то тебе смотреть в сторону type=radioСпасибо сказали:
ap0stal(10.07.2013),
Тэги топика:
Похожие темы
| Темы | Раздел | Ответов | Последний пост |
|---|---|---|---|
EPayService: Debit Cards, Check Cashing, Money Transmitting | Реклама партнерских программ | 1 | 13.10.2011 14:23 |
EPayService: Debit Cards, Check Cashing, Money Transmitting | Финансовый раздел | 0 | 25.05.2011 12:30 |





