Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2012, 18:32
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Элемент <option> в PHP
<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 строки, как они работают
if($k == $selected) $ch = " selected"; else $ch = "";
		$text .= "<option$ch value='$k'>$v</option>\n";

И как происходит работа с вот этим элементом формы:
<select name="surname">
	<?=selectItems($names, $_REQUEST['surname'])?>
	</select><br>
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2012, 19:59
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

1)И что там сложного? Если элемент совпадает с выбранным, то у него ставится флаг selected

2) selectItems по массиву данных и выбранному элементу возвращает сформированную строчку из option
Ответить с цитированием
  #3 (permalink)  
Старый 29.03.2012, 20:12
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Что-то не могу понять что делает свойство selected? Прочитал здесь http://htmlbook.ru/html/option/selected - Делает текущий пункт списка выделенным.
В каком смысле выделенным? Сделал тестовое задание по той ссылке выше, не увидел различия со свойством selected и без него. Что он делает?
Ещё в чем разница <option selected="selected"><option> от <option selected><option> ??
Ответить с цитированием
  #4 (permalink)  
Старый 29.03.2012, 20:24
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от kilogram
<option selected="selected"><option> от <option selected><option>
это равнозначные записи (но правильнее, по логике, первая).

selected делает пункт выделенным, среди других пунктов, у которых нет selected:

<option>Раз</option> 
<option>Два</option>
<option selected="selected" >Три</option>
<option>Четыре</option>


выделен по умолчанию будет пункт "Три".
__________________
С моих слов записано верно.
Ответить с цитированием
  #5 (permalink)  
Старый 29.03.2012, 21:22
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Точно, спс. Немного по поводу кода.
Скажите ,вот когда мы написали "<select name="surname">"
это равносильно мы создали переменную $surname с которой можем делать что угодно? Ещё, немного не понятно, каким образом попадают в глобальный ассрциативный массив REQUEST значения surname(Фамилия) с массива $names? Если да, каким образом?
Ответить с цитированием
  #6 (permalink)  
Старый 29.03.2012, 21:42
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

После сабмита формы все поля попадают в массивы ключами ,в $_POST $_GET итд
переменные $surname создаются, только если включено register_global=on в настройках пхп.
Ответить с цитированием
  #7 (permalink)  
Старый 29.03.2012, 22:12
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

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

щас распишу логику всего твоего скрипта:

1. функция selectItems, в неё передаётся массив всех пунктов списка ($items)+ выбранный (номер по порядку от 0) — $selected (если его нет, то оно равно 0)

function selectItems($items, $selected=0) {


2. Переданный массив $items циклом разбивается на пары: ключ — значение: $k — ключ, $v — значение.
Если текущий ключ равен тому же, что пришло в функцию вторым параметром ($selected), то в переменную $text заносится:

<option  selected value='Значение из текущей $k'> значение текущей $v</option>


Если не равен:

<option  value='значение текущей $k'> значение текщей $v</option>


ну и возвращается $text.
$text = "";
    foreach($items as $k=>$v){
        if($k == $selected) $ch = " selected"; else $ch = "";
        $text .= "<option$ch value='$k'>$v</option>\n";
    }   
return $text;   
}


3. Создаётся массив с именами и фамилиями.

$names = array(
"Weaving" => "Hugo",
"Goddard" => "Paul",
"Taylor"  => "Robert",
);


4. Если по GET или POST на сервер в массиве $_REQUEST пришло surname (т.е. фамилия, заполненная в форме), то $name равна имени из массива $names, где ключ равен пришедшей фамилии surname.
Ну и выводится на экран "Вы выбрали...."
if(isset($_REQUEST['surname'])){
$name = $names[$_REQUEST['surname']];
echo "Вы выбрали: {$_REQUEST['surname']} - {$name} ";
}
?>


А тут форма, отправляющая на эту же страницу ($_SERVER['SCRIPT_NAME'] = текущий адрес скрипта) значения выбранного поля surname (то, что потом принимается в $_REQUEST['surname']).

И с помощью функции selectItems, куда передаётся массив всех имен/фамилий и текущая полученная фамилия (если страница только что открыта — текущей фамилии не будет, и второй параметр в функции станет равен нулю — т.е выбранным окажется первый пункт.
<!-- Форма для выбора имени человека -->
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post">
Выберите имя: 
    <select name="surname">
    <?=selectItems($names, $_REQUEST['surname'])?>
    </select><br>
<input type="submit" value="Узнать фамилию">
</form>
</body></html>
__________________
С моих слов записано верно.
Ответить с цитированием
  #8 (permalink)  
Старый 29.03.2012, 23:16
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

А в этой строке: <?=selectItems($names, $_REQUEST['surname'])?>

$names - это в первый параметр функции подставился сам массив name который описан выше? В массиве цикл форич он возвращает за первым разом в первый параметр $names попадает значение "Weaving", 2 раз - "Goddard", 3-ий раз - "Taylor" после отправки формы? Во второй параметр также после отправки формы из-за цикла формч, тоже 3 раза во второй параметр попадают значения ключей цикла форич?
Ответить с цитированием
  #9 (permalink)  
Старый 30.03.2012, 11:08
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от kilogram Посмотреть сообщение
А в этой строке: <?=selectItems($names, $_REQUEST['surname'])?>

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

в функцию один раз передаётся массив:

$names = array(
"Weaving" => "Hugo",
"Goddard" => "Paul",
"Taylor"  => "Robert",
);


и один раз передается второй параметр, который равен выбранной фамилии (той, которая была выбрана в форме), если выбрана не была ни одна фамилия, то передаётся 0.

К примеру, массив фамилий/имён у нас есть, а из формы было передано Goddard.

и дальше три шага цикла:

(дословно: пока есть значения в $names, разбить из попарно)

Шаг 1:
$k = Weaving.
$v = Hugo.

Weaving не равно Goddard, поэтому добавляем строчку:
<option value='Weaving'>Hugo</option>

Шаг 2:
$k = Goddard.
$v = Paul.

Goddard равно Goddard, поэтому добавляем строчку:
<option selected value='Goddard'>Paul</option>

Шаг 3:
$k = Taylor.
$v = Robert.

Taylor не равно Goddard, поэтому добавляем строчку:
<option value='Taylor'>Robert</option>
__________________
С моих слов записано верно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
PHP работа с DOM(получить последний\первый элемент) bayah Серверные языки и технологии 5 14.02.2011 17:29
событие на динам. элемент (jQery, Ajax, php) kost_ik jQuery 2 06.11.2010 12:16
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33
Как передать картинку из javascript в php KIVagant AJAX и COMET 3 12.05.2010 11:54