2012-10-28 57 views
1

我必須使用多個可相互修改的下拉菜單製作表單。菜單/數據庫表是:如何使用mysql和php製作級聯下拉列表

類別,樣式,類型和機制

我試圖用我有限的Ajax的知識要做到這一點,但似乎只訪問MySQL一次(初始頁)填充Categories表,但不能通過查詢下一組結果來更新樣式表。我收到一個聲明數據庫爲空的錯誤。

我也嘗試通過選項組填充下拉列表來處理類別和樣式,但只有類別標題顯示所有樣式子值顯示爲空白。我的代碼如下:

   $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> 

任何洞察到我做錯了將不勝感激!

+1

[**請不要在新代碼'mysql_ *'功能** ](http://bit.ly/phpmsql)。他們不再被維護,[棄用過程](http://j.mp/Rj2iVR)已經開始。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – hakre

+0

特別是在你的情況下,PDO結果的迭代器功能對你詢問的內容非常有用。 – hakre

+0

@hakre我希望能夠在mysql中使用它,據我瞭解,在未來將所有內容切換到PDO之前......時間限制正在成爲他們目前的工作......但感謝您的支持! –

回答

0

最後我不得不自己想出來,但感謝那些試圖幫助的人。

我會從我的類/類別/風格/類型級聯表發佈我的中間表。首先做一個函數,如下面的:

<?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 ...

0

選項必須是數組。

$options[]="<OPTGROUP LABEL=\"$category_name\"> <br />"; 
<SELECT NAME="category_id"> 
    <?php foreach ($options as $value) 
      echo $value?> 
</SELECT> 
+0

感謝您的建議,但我收到一條消息:「致命錯誤:[]運算符不支持字符串」。我還可能在這裏做錯什麼? –