За последние 24 часа нас посетили 18102 программиста и 1599 роботов. Сейчас ищут 911 программистов ...

Передача массива из формы.

Тема в разделе "PHP для новичков", создана пользователем СергейБу, 24 мар 2008.

  1. СергейБу

    СергейБу Активный пользователь

    С нами с:
    24 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Имеется форма:

    <form id="add" method="POST" action="addexec.php">
    <input type="checkbox" name="idroot[0]">Надпись 1<br />
    <input type="checkbox" name="idroot[1]">Надпись 2<br />
    <input type="checkbox" name="idroot[2]">Надпись 3<br />
    <input type="checkbox" name="idroot[3]">Надпись 4<br />

    <input type="submit" value="Добавить!"></td>
    </form>

    Если установить галки,например, на первом и четвертом чекбоксе,и нажать на кнопку Добавить то в обработчик передается запрос:

    idroot%5B0%5D=on&idroot%5B3%5D=on

    Обработчик имеет следующее:
    ...
    for($i=0;$i<4;$i++){
    echo $_POST['idroot'][$i].'</br>';
    }
    ...

    В результате выполнения получается:

    on
    Notice: Undefined offset: 1 in D:\UsbWebserver\Root\addexec.php on line 36
    Notice: Undefined offset: 1 in D:\UsbWebserver\Root\addexec.php on line 36
    on

    Как получить значение не установленных чекбоксов?
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?
    2. for($i=0;$i<4;$i++){
    3. @print $_POST['idroot'][$i].'</br>';
    4. }
    ?
    Ты какое значение у неустановленных хочешь увидеть? off?
     
  3. СергейБу

    СергейБу Активный пользователь

    С нами с:
    24 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Не обязательно off, хотябы просто = 0. Дело в том, что пхп v4 это нормально обрабатывает и не установленные чекбоксы равны в этом массиве нулю. А в пхп v5 выдается вышеуказанная ошибка. Хотелось бы уяснить суть данного явления.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Тогда так:
    PHP:
    1. <?
    2. for($i=0;$i<4;$i++)
    3.  {
    4.   $_POST['idroot'][$i]?print $_POST['idroot'][$i].'</br>':print 'off<br>';
    5.  }
    Суть в разной обработке данных поулченый через $_POST в 4 и 5 версии.
     
  5. Anonymous

    Anonymous Guest

    Нонсенс.
    Ошибка эта была и в 4. это не ошибка а нотайс, неинициализированные переменные по дефолту интерпрeтируются как 0, false, ''
     
  6. СергейБу

    СергейБу Активный пользователь

    С нами с:
    24 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Ясно. Тогда правильно ли будет обрабатывать этот массив следующим образом:
    if(isset($_POST['idroot'][$i])) echo 'on </br>';
    else echo 'off </br>;
    для того, чтобы избежать вывод Notice? Или существуют другие методы, доступные только великим мира сего?
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    СергейБу

    юзай

    PHP:
    1. <?
    2. foreach($_POST['idroot'] as $key => $val) {
    3.      print "{$key} => {$val}<br />";
    4. }
    5.  
     
  8. СергейБу

    СергейБу Активный пользователь

    С нами с:
    24 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Всем спасибо, с этим разобрался. Воспользовался советом великого Ля.
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    только не забываем, что foreach работает с копией массива. с копией.
     
  10. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    А если сделать так
    PHP:
    1.  
    2. <?php
    3.  
    4. foreach (&$Array as $key=>$val)
    5.  if ($key === 'string1')
    6.    $val++;
    7. ?>
    8.  
    Тож будет работать с копией ?
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Professor
    Если указать массив, то foreach будет работать с копией массива. Если указать указатель на массив, то foreach будет работать с копией массива на который указывает указатель :-D
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а попробовать и результаты гениальности сюда писнуть религия не позволяет?
     
  13. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    Parse error: syntax error, unexpected '&' in C:\*путь к файлу* on line 284
     
  14. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. foreach ($array as $k => &$v) {
    3.     if ($k == 'string1') {
    4.         $v++;
    5.     }
    6. }
     
  15. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    осторожней с этим примером. Sergey89, расскажи про прикол при выходе из foreach
     
  16. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    stas_t
    ты про
    PHP:
    1. <?php
    2. $array = range(1, 5);
    3.  
    4. foreach ($array as $k => &$v) {
    5.     $v++;
    6. }
    7.  
    8. $v = 10;
    9. print_r($array);
    ?
     
  17. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
  18. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ну тогда unset решит все проблемы