Пример: PHP: $n++; <select name="parameters".$n.""> В результате имеем: parameters1 parameters2 parameters3 и т.д. Как теперь получить эти данные? PHP: $n++; echo $_POST['parameters$n']; Смешно... Может цикл поможет, но как его организовать?
PHP: <?php echo '<select name="parameters['.$n.']">'; foreach($_POST['parameters'] as $key => $val) {}
В продолжение вопроса. Есть несколько селектов <select name="parameters1"> <select name="parameters2"> <select name="parameters3" multiple> Один из них multiple, но какой из них еще не знаем. Здесь в примере это третий. Но не факт, он может быть и первым и каким угодно. Как узнать, какой из селектов multiple?
для multiple заголовок оформляется по-другому: <select name="parameters3[]" multiple> Получите массив parameters3-если что-то было выбрано Для обычного single select получите строковое значение-если что-то было выбрано
Почти получилось: PHP: if ($multiselect == 1){ $multi = "_m"; $multiple = "multiple"; } $n++; echo '<select name="parameters".$multi."['.$n.']" $multiple >'; foreach($_POST['parameters'] as $key => $val) {} foreach($_POST['parameters_m'] as $key_m => $val_m) {} Немного не то. Видимо из-за индекса. Буду думать.
А где вывод опций для parameters1,parameters2,parameters3? Для multiple к названию переменной добавляются только квадратные скобки и безо всяких индексов. Насколько я понял, у вас три поля ввода типа "select" arameters1,parameters2,parameters3, а multiple определяется каким-то способом. Таким образом вывод должен быть таким 1) вывод заголовка(для parameters1 ) echo "<select name='parameters1'>"; или для multiple echo "<select name='parameters1[]' multiple>"; 2) вывод в цикле опций 3) вывод завершающего тега "</select>" А проверка такая PHP: for($i=0;$i<3;$i++) { $var='parameters'.$i; if(isset($_POST[$var])) { //выбрана какая-та опция или несколько опций для multiple if(is_string($_POST[$var])) { //у вас single select } else { //у вас multiple select } } else { //ничего не выбрано } }
Видимо я должен извиниться. Дело в том, что код выглядит немного не так: PHP: // выясняем multiple select или single select if ($multiselect == 1){ $multi = "_m"; $multiple = "multiple"; } # Здесь не должно быть индекса. Т.е. в $n не лежат цифры по-порядку # Вместо индекса кладутся другие цифры - это id из базы данных # соответственно они могут быть всякие разные # $n++; $id = "здесь индекс из БД, он может быть какой угодно, но всегда уникальный"; echo '<select name="parameters".$multi."['.$id.']" $multiple >'; foreach($_POST['parameters'] as $key => $val) {} foreach($_POST['parameters_m'] as $key_m => $val_m) {} Вот теперь как есть.
Все, разобрался. PHP: if ($multiselect == 1){ $multi = "_m"; $multiple = "multiple"; $multi_skob = "[]"; # все дело было в скобках } echo '<select name="parameters".$multi."['.$id.']{$multi_skob}" $multiple >'; foreach($_POST['parameters_m'] as $key_m => $val_m) { foreach($val_m as $key_mm => $val_mm) {} } Всем спасибо за помощь.