Я должен сделать форму с несколькими раскрывающимися меню, которые изменяют друг друга. Таблицами меню / базы данных являются:
Категории, стили, типы и механизмы
Я попытался сделать это с моим ограниченным знанием Ajax, но могу просто получить доступ к MySQL один раз (на начальной странице), чтобы заполнить таблицу «Категории», не имея возможности затем обновить таблицу «Стили», запросив следующий набор результатов. Я получаю ошибку, заявляющую, что база данных пуста.
Я также попробовал с раскрывающимся списком, заполненным группой опций, для обработки как категорий, так и стилей с помощью петлевого запроса, но отображаются только заголовки категории со всеми значениями стиля, которые отображаются пустым. Мой код выглядит следующим образом:
$query1="SELECT categories.category_id, categories.Category_Name "; $query1.="FROM categories "; $query1.="ORDER BY categories.Category_Name ASC"; $category_result=mysql_query($query1, $connection); if(!$category_result){ die("Database query failed: " . mysql_error()); } $options=""; $con=0; while ($category_row=mysql_fetch_array($category_result)) { $category_name=$category_row["Category_Name"]; $CategoryID=$category_row["category_id"]; $options.="<OPTGROUP LABEL=\"$category_name\"> <br />"; $query2="SELECT categories.category_id, categories.Category_Name, "; $query2.="styles.style_id, styles.Style_Name "; $query2.="FROM categories, styles "; $query2.="WHERE styles.Category_ID = $CategoryID "; $style_result=mysql_query($query2, $connection); if(!$style_result){ die("Database query failed: " . mysql_error()); } while ($style_row=mysql_fetch_array($style_result)) { $style_name=$row["Style_Name"]; $id=$row["style_id"]; $options.="<OPTION VALUE=\"$id\" <a href=\"#\" onClick=\"javascript:swapContent('$style_name');\" >".$style_name.'</OPTION>'; } $options.='</OPTGROUP> <br />'; } ?> <SELECT NAME="category_id"> <OPTION VALUE=0></OPTION> <?php echo $options ?>choose </SELECT>
Любое понимание того, что я делаю неправильно, будет с благодарностью!
http://www.michaeljbaird.com/post/2009/04/12/ASPnet-MVC-and-JQuery-Cascading-Dropdown-list.aspx
Вы можете посмотреть здесь пошаговое руководство.
Параметр должен быть массивом.
$options[]="<OPTGROUP LABEL=\"$category_name\"> <br />"; <SELECT NAME="category_id"> <?php foreach ($options as $value) echo $value?> </SELECT>
В конце концов, мне просто нужно было разобраться в этом, но спасибо тем, кто пытался помочь.
Я отправлю свою среднюю таблицу из каскадных таблиц класса / категории / стиля / типа. Сначала создайте функцию, такую как:
<?php //Category Selection function Category_Selection($link) { global $connection; $options=""; if(isset($_GET["class_id"])) { $query="SELECT categories.category_id, categories.Category_Name "; $query.="FROM categories "; $query.="ORDER BY categories.Category_Name ASC"; $result=mysql_query($query, $connection); $class_id=$_GET['class_id']; if(!$result){ die("Database query failed: " . mysql_error()); } while ($row=mysql_fetch_array($result)) { $name=$row["Category_Name"]; $id=$row["category_id"]; $link2=$link."&category_id={$id}"; $options.="<OPTION VALUE=\"$link2\" "; if(isset($_GET["category_id"])) { $category_id = $_GET['category_id']; if($id==$category_id) { $options.=" selected=\"selected\" "; } } $options.=" >".$name.'</OPTION>'; } } else { $options.="<OPTION selected=\"selected\" VALUE=0>First Select Class</OPTION>"; } return($options); } ?>
Затем разместите на главной странице:
<?php session_start() ?> //Category if(isset($_GET['category_id'])) { $category_id=$_GET['category_id']; setcookie('category_id',$category_id); $link.="&category_id={$category_id}"; }elseif(isset($_COOKIE['category_id'])) { $_GET['category_id']=$_COOKIE['category_id']; $category_id=$_COOKIE['category_id']; $link.="&category_id={$category_id}"; }
Теперь сделайте свой выбор раскрывающимся:
<?php //Category Selection $options=Category_Selection($link); ?> <center> <SELECT NAME="category_id" ONCHANGE="location = this.options[this.selectedIndex].value;"> <OPTION VALUE=0></OPTION> <?php echo $options ?> </SELECT> </center>
Повторите выше для каждого требуемого раскрывающегося списка.
Удачи … и, конечно же, используйте MYSQLi для защиты вашего сайта, а не от MYSQL, показанного выше …