До
настоящего момента я программировал все формы вручную. Любому программисту известно,
что ручное кодирование - это плохо, поскольку оно увеличивает вероятность ошибок,
не говоря уже о лишних затратах времени. В следующем разделе я представлю
сценарий, в котором раскрывающийся список строится динамически по содержимому
массива. Этот прием несложен, однако он экономит немало времени как при
исходном программировании, так и при последующем сопровождении программы. Пример
7: построение раскрывающегося списка Предположим, у вас имеется список сайтов,
которые вы хотите порекомендовать посетителю из-за классного дизайна. Вместо того
чтобы жестко кодировать каждую строку списка, можно создать массив и воспользоваться
его содержимым для заполнения списка. В листинге 10.9, как и в предыдущих
примерах, реализован вариант с одним сценарием. Сначала мы проверяем, было ли
присвоено значение переменной $site. Если проверка дает положительный результат,
вызывается функция header( ) с параметром, в котором значение $site присоединяется
к строке . При передаче этой команды функция header О перенаправляет браузер на
указанный URL. Если значение переменной $site не задано, форма выводится в браузере.
Раскрывающийся список строится в цикле, количество итераций зависит от размера
массива Sfavsites. В листинге 10.9 я включил в этот массив пять своих любимых
сайтов. Конечно, вы можете добавить в него сколько угодно своих сайтов. Запомните
одно важное обстоятельство - функция header( ) должна вызываться до вывода данных
в браузере. Ее нельзя просто вызвать в любой точке сценария РНР. Несвоевременные
вызовы header( ) порождают столько проблем у неопытных программистов РНР, что
я рекомендую повторить это правило раз пять, чтобы лучше запомнить его. Листинг
10.9. Динамическое построение раскрывающегося списка <? if ($site
!= "") : header("Location: http://Ssite"); exit; else
: ?> <html> <head> <title>Listing
10-9</Fit1e> </head> <body bgcolor="#ffffff"
text="#000000" Iink="#cbda74" vlink="#808040" alink="#808040" $favsites
= array ("www.k10k.com". "www.yahoo.com", "www.drudgereport.com", "www.phprecipes.com", "www.frogdesign.com"): //
Создать форму <? <form action = "Listing10-9.php"
method="post"> <select name="site"> <option
value = "">Choose a site: $х = 0: while ( $х < sizeof
($favsites) ) : print "<option value='$favsites[$x]'>$favsites[$x]"; $x++; endwhile; ?> </select> <input
type="submit" value="go!"> </form> <? endif; ?> Динамическое
конструирование форм особенно удобно при обработке больших объемов данных, которые
в любой момент могут измениться, что приведет к устареванию всей жестко закодированной
информации форм. Впрочем, я рекомендую жестко кодировать все статические данные
(например, список штатов США), поскольку это ускорит работу программы. |