За последние 24 часа нас посетили 56375 программистов и 1694 робота. Сейчас ищут 896 программистов ...

Вопрос по передаче данных методом ПОСТ

Тема в разделе "PHP для новичков", создана пользователем bkm, 15 июн 2010.

  1. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Пример:

    PHP:
    1. $n++;
    2. <select name="parameters".$n."">
    В результате имеем: parameters1 parameters2 parameters3 и т.д.

    Как теперь получить эти данные?
    PHP:
    1. $n++;
    2. echo $_POST['parameters$n'];
    Смешно...
    Может цикл поможет, но как его организовать?
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    PHP:
    1.  
    2. <?php
    3. echo '<select name="parameters['.$n.']">';
    4. foreach($_POST['parameters'] as $key => $val) {}
     
  3. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Ух ты, круто. А я уж input type="hidden" value="$n." хотел использовать, а тут все за раз.

    Спасибо.
     
  4. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    В продолжение вопроса.
    Есть несколько селектов

    <select name="parameters1">
    <select name="parameters2">
    <select name="parameters3" multiple>

    Один из них multiple, но какой из них еще не знаем. Здесь в примере это третий. Но не факт, он может быть и первым и каким угодно.

    Как узнать, какой из селектов multiple?
     
  5. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    для multiple заголовок оформляется по-другому:
    <select name="parameters3[]" multiple>
    Получите массив parameters3-если что-то было выбрано
    Для обычного single select получите строковое значение-если что-то было выбрано
     
  6. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Почти получилось:
    PHP:
    1.  
    2. if ($multiselect == 1){
    3.  
    4. $multi = "_m";
    5. $multiple = "multiple";
    6.  
    7. }
    8.  
    9. $n++;
    10.  
    11. echo '<select name="parameters".$multi."['.$n.']" $multiple >';
    12. foreach($_POST['parameters'] as $key => $val) {}
    13.  
    14. foreach($_POST['parameters_m'] as $key_m => $val_m) {}
    Немного не то. Видимо из-за индекса. Буду думать.
     
  7. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    А где вывод опций для parameters1,parameters2,parameters3?

    Для multiple к названию переменной добавляются только квадратные скобки и безо всяких индексов.


    Насколько я понял, у вас три поля ввода типа "select" :parameters1,parameters2,parameters3, а multiple определяется каким-то способом.
    Таким образом вывод должен быть таким
    1) вывод заголовка(для parameters1 )
    echo "<select name='parameters1'>";
    или для multiple
    echo "<select name='parameters1[]' multiple>";

    2) вывод в цикле опций


    3) вывод завершающего тега "</select>"

    А проверка такая
    PHP:
    1.  
    2. for($i=0;$i<3;$i++)
    3. {
    4.       $var='parameters'.$i;
    5.       if(isset($_POST[$var]))
    6.       {
    7.             //выбрана какая-та опция или несколько опций для multiple
    8.            if(is_string($_POST[$var]))
    9.            {
    10.                   //у вас single select
    11.            }
    12.            else
    13.            {
    14.                   //у вас multiple select
    15.            }
    16.  
    17.       }
    18.       else
    19.       {
    20.                //ничего не выбрано
    21.       }
    22. }
    23.  
    24.  
     
  8. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Видимо я должен извиниться. Дело в том, что код выглядит немного не так:

    PHP:
    1. // выясняем multiple select или single select
    2. if ($multiselect == 1){
    3. $multi = "_m";
    4. $multiple = "multiple";
    5. }
    6.  
    7. # Здесь не должно быть индекса. Т.е. в $n не лежат цифры по-порядку
    8. # Вместо индекса кладутся другие цифры - это id из базы данных
    9. # соответственно они могут быть всякие разные
    10. # $n++;
    11.  
    12. $id = "здесь индекс из БД, он может быть какой угодно, но всегда уникальный";
    13.  
    14. echo '<select name="parameters".$multi."['.$id.']" $multiple >';
    15. foreach($_POST['parameters'] as $key => $val) {}
    16.  
    17. foreach($_POST['parameters_m'] as $key_m => $val_m) {}
    Вот теперь как есть.
     
  9. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Все, разобрался.

    PHP:
    1. if ($multiselect == 1){
    2.  $multi = "_m";
    3.  $multiple = "multiple";
    4.  $multi_skob = "[]"; # все дело было в скобках
    5. }
    6.  
    7. echo '<select name="parameters".$multi."['.$id.']{$multi_skob}" $multiple >';
    8.  
    9. foreach($_POST['parameters_m'] as $key_m => $val_m) {
    10.  
    11.     foreach($val_m as $key_mm => $val_mm) {}
    12.  
    13. }
    Всем спасибо за помощь.