11.8.2. Динамическое формирование URL-адресов

В этом задании будет создан список ссылок, по которым посетитель сможет перейти на страницу с информацией о нужной стране. Поскольку список должен формироваться динамически и так как все ссылки указывают на одну страницу (различия заключаются только в параметрах URL-адреса), в этом упражнении следует позаботиться о некоторых моментах. Для этого все названия стран должны выводиться на страницу таким образом, чтобы посетитель смог их прочитать. Для каждого из этих названий следует назначить ссылку, указывающую на страницу profiles_detail.php. И, наконец, требуется прикрепить к каждому URL-адресу соответствующие значения полей countryID и countryName, необходимые при формировании страницы profiles_detail.php.

333. Поместите курсор в строке, расположенной под текстом страницы. На панели Bindings разверните список rs_countryNames и выберите countryName, а потом нажмите Insert. Значение поля countryName прикрепляется к текущему абзацу на странице.

334. Выделите динамический текст {rs_countryNames.countryName}, а затем в поле Link на панели Property Inspector введите abc. В ближайшее время к URL-адресу будут добавлены динамические данные. После этого любая информация, введенная в поле, будет заменена другой. Однако, если оставить поле Link незаполненным, Dreamweaver не сможет добавить динамический параметр к тегу <a>, поскольку тег не будет создан. Другими словами, значение abc вводится в поле в качестве обходного маневра.

335. Не снимая выделение с динамического текста, щелкните на теге <a> в селекторе тегов, а затем на панели Bindings щелкните на варианте countryID, а в меню Bind To (Прикрепить к) выберите пункт a.href и нажмите кнопку Bind (Прикрепить). На этом шаге значение поля countryID прикрепляется к атрибуту href тега <a>. Значение abc, введенное на предыдущем шаге, удалено.

336. Поместите курсор в поле Link на панели Property Inspector перед <?php, а затем введите

profiles_detail.php?countryID=       

При открытии страницы, в результате обработки кода PHP, получится одно число, – так что ссылка, например, на информацию об Аргентине будет содержать следующий URL-адрес: profiles_detail.php?countryID=15.

337. Сохраните файл, загрузите его на сервер и нажмите F12, чтобы протестировать. Наведите указатель мыши на ссылку (но не щелкайте). На данный момент о странице можно сказать следующее. Во-первых, в списке присутствует только одна Аргентина. Требуется изменить код таким образом, чтобы на страницу выводились все страны, а не только первая (по алфавиту).Если при наведении указателя мыши на ссылку в нижнем левом углу браузера отобразится правильный URL-адрес, значит, добавленный код, динамически формирующий адреса ссылок, работает надлежащим образом.

338. Вернитесь в Dreamweaver на указанную страницу и вновь выделите динамический текст. Щелкните на теге <a> в селекторе тегов, а затем на панели Server Behaviors (Модели поведения серверов) щелкните на + и выберите Repeat Region. При выборе модели поведения сервера Repeat Region на страницу будет добавлен код, необходимый для того, чтобы при отображении списка выводилась не только первая запись, но и все остальные.

339. В диалоговом окне Repeat Region оставьте без изменения опцию в поле со списком Recordset, а в группе переключателей Show установите переключатель All records. Нажмите ОК

Выбор переключателей в группе Show позволяет задать для просмотра определенное количество записей, так и отображение всех записей. Эта возможность называется постраничным выводом наборов записей.

341. Сохраните файл, загрузите его на сервер и протестируйте. В списке отобразятся 16 стран, и, если навести указатель мыши на ссылку (но не щелкать), то в строке состояния будет отображаться адрес с отдельным значением countryID для каждой страны. Единственная проблема заключается в форматировании. Все страны последовательно размещаются в строке, довольно далеко друг от друга.

В программировании циклы – это конструкции, в которых определенные действия в теле цикла повторяются многократно заданное число раз до тех пор, пока какое-то событие не прервет этот цикл. Циклы применяются для управления данными, точно так же, как и условный оператор выбора (if…else). Разница заключается в том, что в условных конструкциях все действия выполняются однократно, если выполняется какое-то условие, а в циклах действие повторяется, пока не будет выполнено условие. Цикл был создан в момент добавления на страницу модели поведения Repeated Region. Повторяющаяся область – это участок кода для вывода текста, расположенный внутри цикла, в результате чего определенная область выводится на страницу несколько раз. В данном случае в область входят название страны и соответствующая ему ссылка. Условие, которое должно выполняться для прерывания цикла и перехода к дальнейшей обработке страницы заключается в том, что должны отобразиться все записи набора.

342. Вернитесь в Dreamweaver и переключитесь в режим Code, затем найдите динамический код, расположенный прямо под абзацем, начинающимся со слов В следующем списке показаны…

<?php do { ?>

<p><a href="profiles_detail.php?countryID=<?php echo $row_rs_countryNames['countryID'];

?>"><?php echo $row_rs_countryNames['countryName']; ?></a></p>

<?php while ($row_rs_countryNames = mysql_fetch_assoc($rs_countryNames)); ?>

В PHP для создания цикла применяется условная конструкция do…while. Участок кода, связанный с выполнением тела цикла, следующий за ключевым словом do, содержится в первой строке блока, а участок после ключевого слова while, включающий условие, – в последней. Между ними присутствует код, формирующий строку с именем и ссылкой, содержащей в качестве параметра URL-адреса значение поля countryID.

Для определения необходимого количества повторений цикла в код добавляется ссылка на набор записей (функция mysql_fetch_assoc()). При отправке запроса в базу данных с помощью функции mysql_query() и оператора SELECT PHP получает возвращаемые данные, однако это происходит не сразу. Для получения данных требуется извлечь их при помощи одной из предназначенных для этой цели функции PHP. В данном случае это функция mysql_fetch_assoc(). За каждое прохождение цикла она возвращает одну запись (или строку) из массива данных, который в предшествующем блоке кода записан в переменную $row_rs_countryNames. Таким образом, для возвращения всех строк следует перебрать набор записей при помощи циклической структуры. Каждый раз значение переменной $row_rs_countryNames меняется и, соответственно, выводится в HTML-код.

343. Найдите внутри цикла закрывающий тег </a> и сразу после него добавьте тег <br />.  На этом проблема корректного отображения страницы оказывается решенной.

344. Переместите открывающий тег <p> таким образом, чтобы он находился перед <?php do. Точно так же переместите закрывающий тег </p>, чтобы он находился после строки <?php } while, но перед закрывающим тегом </td>.

В этом шаге решается проблема вложенности. Теперь все элементы, выводимые на страницу при выполнении цикла, будут расположены внутри одного абзаца и отделены друг от друга разрывами строки (<br />).

В итоге, код PHP должен выглядеть следующим образом:

Пример 11.8. Код цикла динамического формирования URL-адресов

<p><?php do { ?>
<a href="profiles_detail.php?countryID=<?php echo  
$row_rs_countryNames['countryID']; ?>"><?php echo  
          
                     
$row_rs_countryNames['countryName']; ?></a><br /> 
<?php while ($row_rs_countryNames = mysql_fetch_assoc($rs_countryNames));
  ?> </p></td>


345. Сохраните файл, загрузите его на сервер и протестируйте. Теперь страница работает и отображается надлежащим образом.