Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Связанные списки
Форумы портала PHP.SU » PHP » Пользовательские функции » Связанные списки

Страниц (1): [1]
 

1. evgenijj - 07 Июля, 2007 - 20:51:49 - перейти к сообщению
Вы заходите на сайт автосалона и хотите выбрать машину и вы уже знаете какая модель и какого цвета вам нужна. Естественно, что не все сочетания моделей и цветов есть в наличии. Поэтому, будет гораздо удобнее, выбрав модель машины в одном списке, сразу же посмотреть имеющиеся в наличии цвета данной модели.
Файл list.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <head>
  3. <title>Связанные списки</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  5. <style type="text/css">
  6.         fieldset{ width:10em; display:block; padding:.5em }
  7.         select{ width:10em }
  8. </style>
  9. < script type="text/javascript">
  10. // Функция, осуществляющая AJAX запрос.
  11. function loadXMLDoc(method,url){
  12.     if(window.XMLHttpRequest){
  13.         req = new XMLHttpRequest();
  14.         req.onreadystatechange = processReqChange;
  15.         req.open(method, url, true);
  16.         req.send(null);
  17.     }else if(window.ActiveXObject){
  18.         req = new ActiveXObject("Microsoft.XMLHTTP");
  19.         req.onreadystatechange = processReqChange;
  20.         req.open(method, url, true);
  21.         req.send();
  22.     }
  23. }
  24. // Функция, выполняемая при изменении статуса
  25. // запроса, если статус  равен 200, данные получены.
  26. function processReqChange(){
  27.     if(req.readyState == 4){
  28.         if(req.status == 200){
  29.                         getColors(req.responseXML.documentElement);
  30.         }else{
  31.             alert("There was a problem retrieving the XML data:n" + req.statusText);
  32.         }
  33.     }
  34. }
  35. function onChange(_this) {
  36.         var url = "ajax.php?models="+_this.value;
  37.         loadXMLDoc("get",url);
  38. }
  39. function getColors(xml){
  40.         var colors = xml.getElementsByTagName("color");
  41.         var _select = document.getElementById("colors");
  42.         _select.innerHTML = ""; // Удаляем всех потомков.
  43.         // Создаем список с доступными цветами.
  44.         for(i=0; i<colors.length; i++) {
  45.                 var option = document.createElement("option");
  46.                 var optionText = document.createTextNode(colors[i].firstChild.data);
  47.                 option.appendChild(optionText);
  48.                 option.setAttribute("value",colors[i].getAttribute("value"));
  49.                 _select.appendChild(option);
  50.         }
  51. }
  52. </script>
  53. </head>
  54. <body>
  55. <?PHP
  56.         // Проверка, пришли ли данные из формы.
  57.         if( isset($_GET["models"]) ){
  58.                 // Как бы выборка из базы данных.
  59.                 $colorsArray = array(
  60.                         "BentleyAzure" => array("red"=>"Красный", "green"=>"Зеленый"),
  61.                         "ChevroletCorvette" => array("black"=>"Черный", "blue"=>"Синий"),
  62.                         "FerrariEnzo" => array("green"=>"Зеленый", "black"=>"Черный", "yellow"=>"Желтый")
  63.                 );
  64.                 $colors = $colorsArray[$_GET["models"]];
  65.                 // Проверка на доступность модели этого цвета.
  66.                 if( array_key_exists($_GET["colors"], $colors) ){
  67.                         echo '<h3 style="color:#090">Модель такого цвета есть в наличии</h3>';
  68.                 }else{
  69.                         echo '<h3 style="color:#900">Модель такого цвета отсутствует</h3>';
  70.                 }
  71.         }
  72. ?>
  73. <form action="list.php" method="get">
  74. <fieldset>
  75. <legend><label for="models">Модели</label></legend>
  76. <select id="models" name="models" onchange="onChange(this)">
  77.         <option value="BentleyAzure" selected>Bentley Azure</option>
  78.         <option value="ChevroletCorvette">Chevrolet Corvette</option>
  79.         <option value="FerrariEnzo">Ferrari Enzo</option>
  80. </select>
  81. </fieldset>
  82. <fieldset>
  83. <legend><label for="colors">Цвета</label></legend>
  84. <select id="colors" name="colors">
  85.         <option value="red">Красный</option>
  86.         <option value="black">Черный</option>
  87.         <option value="green">Зеленый</option>
  88.         <option value="blue">Синий</option>
  89.         <option value="yellow">Желтый</option>
  90. </select>
  91. </fieldset>
  92. <fieldset>
  93.         <input type="submit" value="Выбрать" />
  94. </fieldset>
  95. </form>
  96. </body>
  97.  

Файл ajax.php - небольшой PHP скрипт, отдающий по AJAX запросу доступные цвета машин в формате XML.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. header('Content-Type: text/xml; charset=windows-1251');
  4. $request = $_GET["models"];
  5. if($request){
  6.         echo loadData($request);
  7. }
  8. function loadData($request){
  9.         // Функция, как бы делающая выборку из базы данных
  10.         if($request == "BentleyAzure"){
  11.                 $result = '<color value="red">Красный</color><color value="green">Зеленый</color>';
  12.         }elseif($request == "ChevroletCorvette"){
  13.                 $result = '<color value="black">Черный</color><color value="blue">Синий</color>';
  14.         }elseif($request == "FerrariEnzo"){
  15.                 $result = '<color value="green">Зеленый</color><color value="black">Черный</color>
  16.                                    <color value="yellow">Желтый</color>';
  17.         }
  18.         if($result) return $result = '<?xml version="1.0" encoding="windows-1251"?>
  19.                                                                   <colors>'.$result.'</colors>';
  20. }
  21. ?>
  22.  

 

Powered by ExBB FM 1.0 RC1