[英]How to make cascading drop-down lists using mysql and php
我必須制作一個帶有多個相互修改的下拉菜單的表單。 菜單/數據庫表是:
類別,樣式,類型和機制
我嘗試使用有限的Ajax知識來執行此操作,但是似乎只能訪問一次MySQL(在初始頁上)以填充Categories表,而后無法通過查詢下一組結果來更新Styles表。 我收到一個錯誤,聲稱數據庫為空。
我還嘗試通過選項組填充下拉列表,以使用循環查詢來處理“類別”和“樣式”,但是僅顯示“類別”標題,而所有“樣式”子值顯示為空白。 我的代碼如下:
$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>
任何對我做錯事的見解將不勝感激!
選項必須是數組。
$options[]="<OPTGROUP LABEL=\"$category_name\"> <br />";
<SELECT NAME="category_id">
<?php foreach ($options as $value)
echo $value?>
</SELECT>
最后,我只能自己解決問題,但是感謝那些嘗試提供幫助的人。
我將從我的Class / Category / Style / Type級聯表中發布中間表。 首先執行如下功能:
<?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 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.