Запарки с check-box

(Ответов: 10, Просмотров: 683)
Страница 1 из 2 12 Последняя
  1. Banned
    • Регистрация: 03.03.2012
    • Сообщений: 163
    • Репутация: 11
    Всем привет! пол дня ломаю голову над такой вот штукой:

    есть семь чекбоксов. Каждый имеет уникальное имя и одинаковое значение "yes"
    Код:
      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
    При выборе одного пунктика проблем не возникает, но если выбрать несколько - то в значении page отображается наиболее высокое значение. Как сделать так, чтобы при выборе нескольких чекбоксов отображались все значения выбранных...
    Заранее спасибо)))
    • 0
  2. Sapienti sat Аватар для brainix
    • Регистрация: 01.01.2013
    • Сообщений: 1,925
    • Записей в дневнике: 1
    • Репутация: 817
    • Webmoney BL: ?
    Так переменные должны быть разные, а не одна $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'
    • 0
  3. Дипломник Аватар для Tiefe
    • Регистрация: 17.12.2012
    • Сообщений: 120
    • Репутация: 18
    furian, можно просто добавлять значения в массив:
    PHP код:
      $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'
    А дальше работать с этим массивом как вам нужно, через цикл или implode, если нужны строки с номерами страниц
    • 0
  4. Студент
    • Регистрация: 24.01.2013
    • Сообщений: 94
    • Репутация: 14
    • Webmoney BL: ?
    Вы вообще неверно делаете. Используйте массивы, подобного кода никогда не должно быть в проекте:

    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'
    • 0
  5. Дипломник Аватар для kik11
    • Регистрация: 03.01.2013
    • Сообщений: 218
    • Репутация: 43
    furian, советую вам почитать учебники программирования. Причем не по конкретному языку, а по простейшим алгоритмам. Которые детям в школе / студентам на первом курсе объясняют. Так как есть гораздо более простой способ:
    К name'ам check-box'ов в форме прибавьте какую-нибудь уникальную штуку. В примере - просто английская буква 'с'.
    И в обработчике поставьте такой код:
    PHP код:
    for ($i=1$i<=7$i++){
        if (
    $_POST['c'.$i] == 'yes')
            
    $page .= $i;

    • 0
  6. Студент
    • Регистрация: 24.01.2013
    • Сообщений: 94
    • Репутация: 14
    • Webmoney BL: ?
    kik11, неверно с точки зрения архитектуры, но пример то, конечно, рабочий.
    Последний раз редактировалось ap0stal; 06.07.2013 в 21:42.
    • 0
  7. Дипломник Аватар для kik11
    • Регистрация: 03.01.2013
    • Сообщений: 218
    • Репутация: 43
    ap0stal, почему?
    Я не гуру php, хотелось бы узнать.
    Из-за конкатенации строки с целым числом?
    • 0
  8. Студент
    • Регистрация: 24.01.2013
    • Сообщений: 94
    • Репутация: 14
    • Webmoney BL: ?
    kik11, потому что, если вдруг изменится количество полей в front-части, нужно будет изменять предложенный Вами код. Если использовать массивы - всего этого можно избежать. Разрабатывая системы, нужно придерживаться принципа, если так уместно выразиться, минимализма. Чтобы в случае необходимости, код изменялся в одном месте, и изменения применялись по всему приложению.

    Вообще в более широком смысле на системах, взаимодействующей с другими приложениями и базами данных - это может оказаться достаточно сложно (например, я делал систему микроплатежей для Уганды, по аналогии с QIWI, когда клиент выбирает провайдера: ОПСоСа или поставщику электроэнергии по счетчику, у каждого из них свои диалоги и поля, требующие заполнения пользователем, при этом принцип "не дублирования" по всей системе сохраняется).

    Но на более начальном уровне - как элементарная форма, лучше приучить себя делать правильно.
    • 0
  9. Дипломник Аватар для kik11
    • Регистрация: 03.01.2013
    • Сообщений: 218
    • Репутация: 43
    ap0stal, спасибо. Можете показать правильный пример?
    Я понял идею, но реализацию не придумал.
    • 0
  10. Студент Аватар для bestxp
    • Регистрация: 21.04.2011
    • Сообщений: 91
    • Репутация: 29
    • Webmoney BL: ?
    а не проще передать чекбоксы массивом, если это выбор нескольких значений одного поля грубо говоря то есть
    Код HTML:
    <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

    PHP код:

    if(isset($_POST['box'])){
       
    print_r($_POST['box']);

    если правильно понял твою задачу то это то что тебе нужно
    соответственно в $_POST['box'] попадут только чекбоксы которые были чекнуты, либо пустое если нет,
    в случае если тебе нужно конкретное значение для $page, а не данные выбранных чекбоксов
    то тебе смотреть в сторону type=radio
    • 1

    Спасибо сказали:

    ap0stal(10.07.2013),
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
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

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры