За последние 24 часа нас посетили 21783 программиста и 1018 роботов. Сейчас ищут 623 программиста ...

Элемент <option> в PHP

Тема в разделе "PHP для новичков", создана пользователем kilogram, 29 мар 2012.

  1. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Код (Text):
    1.  
    2. <html><body>
    3. <?php
    4. function selectItems($items, $selected=0) {
    5. $text = "";
    6.     foreach($items as $k=>$v){
    7.         if($k == $selected) $ch = " selected"; else $ch = "";
    8.         $text .= "<option$ch value='$k'>$v</option>\n";
    9.     }  
    10. return $text;  
    11. }
    12.  
    13. $names = array(
    14. "Weaving" => "Hugo",
    15. "Goddard" => "Paul",
    16. "Taylor"  => "Robert",
    17. );
    18.  
    19. if(isset($_REQUEST['surname'])){
    20. $name = $names[$_REQUEST['surname']];
    21. echo "Вы выбрали: {$_REQUEST['surname']} - {$name} ";
    22. }
    23. ?>
    24. <!-- Форма для выбора имени человека -->
    25. <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post">
    26. Выберите имя:
    27.     <select name="surname">
    28.     <?=selectItems($names, $_REQUEST['surname'])?>
    29.     </select><br>
    30. <input type="submit" value="Узнать фамилию">
    31. </form>
    32. </body></html>
    НЕ совсем понятна передача параметров функции. Не понятны вот эти 2 строки, как они работают
    Код (Text):
    1. if($k == $selected) $ch = " selected"; else $ch = "";
    2.         $text .= "<option$ch value='$k'>$v</option>\n";
    И как происходит работа с вот этим элементом формы:
    Код (Text):
    1. <select name="surname">
    2.     <?=selectItems($names, $_REQUEST['surname'])?>
    3.     </select><br>
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код (PHP):
    1. if($k == $selected) $ch = " selected"; else $ch = "";
    2.       $text .= "<option$ch value='$k'>$v</option>\n"; 
    Тут ключ $k сравнивается с переменной $selected для того, чтобы определить переменную $ch, которая делает элемент option "выбранным" в списке, добавляет параметр selected: <option selected>значение</option>.

    Код (PHP):
    1. <select name="surname">
    2.    <?=selectItems($names, $_REQUEST['surname'])?>
    3.    </select><br>
    Тут конструкция <?=что-либо?> просто выводит в поток это "что-либо". Эквивалентно <?php echo что-либо ?>. В данном случае на месте "что-либо" идет вызов функции "selectItems" с параметрами. Первым параметром передаёт массив (через переменную $names), вторым параметром - номер выбранного элемента. Номер выбранного элемента нужен для того, чтобы вывести параметр "selected" в примере выше.
     
  3. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Код (Text):
    1.  <option selected value="t4">МЫШКА МУРУШКА</option>
    Что-то не могу понять что делает свойство selected? Прочитал здесь http://htmlbook.ru/html/option/selected - Делает текущий пункт списка выделенным.
    В каком смысле выделенным? Сделал тестовое задание по той ссылке выше, не увидел различия со свойством selected и без него. Что он делает?
    Ещё в чем разница <option selected="selected"><option> от <option selected><option> ??
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Только в стандартах, по сути разницы нет.
    Свойство selected делает текущий элемент выделенным в том смысле, что если мы отправим форму, то значение комбобокса (или листбокса) будет таким, как у выбранного. Это либо его индекс (какой он по счету), либо другое значение, если у элемента указано value="значение".
    Означает, что выбрано по умолчанию. Если мы кликнем по комбобоксу и выберем другой элемент из списка, то будет другое значение.
     
  5. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Точно, спс. Немного по поводу кода.
    Скажите ,вот когда мы написали "<select name="surname">"
    это равносильно мы создали переменную $surname с которой можем делать что угодно? Ещё, немного не понятно, каким образом попадают в глобальный ассрциативный массив REQUEST значения surname(Фамилия) с массива $names? Если да, каким образом?
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Мы создли элемент формы <select name="surname">. При отправке формы создаётся строка вида:
    surname=значениеВыбранногоЭлемента
    Эта строка отсылается скрипту, прописанному в параметре "action" у тега "form". Сервер и PHP на основе запросов создают глобальные массивы, которыми можно пользоваться. Строка "surname=значениеВыбранногоЭлемента" разбивается на ключ (surname) и значение (значениеВыбранногоЭлемента) и помещается в массив $_REQUEST. Из $_REQUEST мы можем взять теперь то, что было передано из формы - $_REQUEST['surname'].
     
  7. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    А в этой строке: <?=selectItems($names, $_REQUEST['surname'])?>

    $names - это в первый параметр функции подставился сам массив name который описан выше? В массиве цикл форич он возвращает за первым разом в первый параметр $names попадает значение "Weaving", 2 раз - "Goddard", 3-ий раз - "Taylor" после отправки формы? Во второй параметр также после отправки формы из-за цикла формч, тоже 3 раза во второй параметр попадают значения ключей цикла форич?