Код (Text): <html><body> <?php function selectItems($items, $selected=0) { $text = ""; foreach($items as $k=>$v){ if($k == $selected) $ch = " selected"; else $ch = ""; $text .= "<option$ch value='$k'>$v</option>\n"; } return $text; } $names = array( "Weaving" => "Hugo", "Goddard" => "Paul", "Taylor" => "Robert", ); if(isset($_REQUEST['surname'])){ $name = $names[$_REQUEST['surname']]; echo "Вы выбрали: {$_REQUEST['surname']} - {$name} "; } ?> <!-- Форма для выбора имени человека --> <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post"> Выберите имя: <select name="surname"> <?=selectItems($names, $_REQUEST['surname'])?> </select><br> <input type="submit" value="Узнать фамилию"> </form> </body></html> НЕ совсем понятна передача параметров функции. Не понятны вот эти 2 строки, как они работают Код (Text): if($k == $selected) $ch = " selected"; else $ch = ""; $text .= "<option$ch value='$k'>$v</option>\n"; И как происходит работа с вот этим элементом формы: Код (Text): <select name="surname"> <?=selectItems($names, $_REQUEST['surname'])?> </select><br>
Код (PHP): if($k == $selected) $ch = " selected"; else $ch = ""; $text .= "<option$ch value='$k'>$v</option>\n"; Тут ключ $k сравнивается с переменной $selected для того, чтобы определить переменную $ch, которая делает элемент option "выбранным" в списке, добавляет параметр selected: <option selected>значение</option>. Код (PHP): <select name="surname"> <?=selectItems($names, $_REQUEST['surname'])?> </select><br> Тут конструкция <?=что-либо?> просто выводит в поток это "что-либо". Эквивалентно <?php echo что-либо ?>. В данном случае на месте "что-либо" идет вызов функции "selectItems" с параметрами. Первым параметром передаёт массив (через переменную $names), вторым параметром - номер выбранного элемента. Номер выбранного элемента нужен для того, чтобы вывести параметр "selected" в примере выше.
Код (Text): <option selected value="t4">МЫШКА МУРУШКА</option> Что-то не могу понять что делает свойство selected? Прочитал здесь http://htmlbook.ru/html/option/selected - Делает текущий пункт списка выделенным. В каком смысле выделенным? Сделал тестовое задание по той ссылке выше, не увидел различия со свойством selected и без него. Что он делает? Ещё в чем разница <option selected="selected"><option> от <option selected><option> ??
Только в стандартах, по сути разницы нет. Свойство selected делает текущий элемент выделенным в том смысле, что если мы отправим форму, то значение комбобокса (или листбокса) будет таким, как у выбранного. Это либо его индекс (какой он по счету), либо другое значение, если у элемента указано value="значение". Означает, что выбрано по умолчанию. Если мы кликнем по комбобоксу и выберем другой элемент из списка, то будет другое значение.
Точно, спс. Немного по поводу кода. Скажите ,вот когда мы написали "<select name="surname">" это равносильно мы создали переменную $surname с которой можем делать что угодно? Ещё, немного не понятно, каким образом попадают в глобальный ассрциативный массив REQUEST значения surname(Фамилия) с массива $names? Если да, каким образом?
Мы создли элемент формы <select name="surname">. При отправке формы создаётся строка вида: surname=значениеВыбранногоЭлемента Эта строка отсылается скрипту, прописанному в параметре "action" у тега "form". Сервер и PHP на основе запросов создают глобальные массивы, которыми можно пользоваться. Строка "surname=значениеВыбранногоЭлемента" разбивается на ключ (surname) и значение (значениеВыбранногоЭлемента) и помещается в массив $_REQUEST. Из $_REQUEST мы можем взять теперь то, что было передано из формы - $_REQUEST['surname'].
А в этой строке: <?=selectItems($names, $_REQUEST['surname'])?> $names - это в первый параметр функции подставился сам массив name который описан выше? В массиве цикл форич он возвращает за первым разом в первый параметр $names попадает значение "Weaving", 2 раз - "Goddard", 3-ий раз - "Taylor" после отправки формы? Во второй параметр также после отправки формы из-за цикла формч, тоже 3 раза во второй параметр попадают значения ключей цикла форич?