2013-03-06 21 views
0

正在開發一個小型大學項目來開發電子商務網站。我已經提供了一些代碼,並且正在根據我的需要改變它。PHP選項標籤和數組

我目前有一個問題,讓一些數組在選項和選擇標記中工作。不同之處在於這些數組中的每一個都有與之相關的動作,例如移動到另一個頁面上。

問題似乎是這個動作沒有在選項標籤中使用。由於這裏看到http://mkiddr.com/phptests/shopping/

這是我原來的代碼編輯前:

<body> 
<div id="wrapper"> 
<div id="header"> 
    <p><a href="index.php">Home</a> | Browse: 
    <?php 
     $q="SELECT c_id, c_name FROM sc_cat"; 
     $result = mysqli_query($_SESSION['conn'],$q); 
     while ($row = mysqli_fetch_row($result)){ 
      echo "<a href='category.php?id=$row[0]'>$row[1]</a> "; 
     } 
     unset($q); //unset query variable 
     mysqli_free_result($result); //free result 
     ?> 
</div> 
<div id="content"><!-- note this is an opening tag --> 

這是我編輯的代碼(不工作)

<body> 
<div id="wrapper"> 
<div id="header"> 
    <p><a href="index.php">Home</a> | Browse: 

    <select> 
    <?php 
     $q="SELECT CategoryID, CategoryName FROM ProductCategories"; 
     $result = mysqli_query($_SESSION['conn'],$q); 
     while ($row = mysqli_fetch_row($result)){ 

      echo "<option value='category.php?id=".$row[0]."'>".$row[1]."</a></option>"; 
      //display categories 

      } 
     unset($q); //unset query variable 
     mysqli_free_result($result); //free result 
    ?> 
    </select> 

</div> 
<div id="content"><!-- note this is an opening tag --> 

真的很感激,如果有人能夠給我們一個用這個手!

+0

您在''之前有一個無關的''。 – Barmar 2013-03-06 13:29:12

+0

即使這只是一個大學項目要小心SQL注入。使用參數化程序。我只是跑了這個,並得到了所有產品的列表http://mkiddr.com/phptests/shopping/category.php?id=1或1 = 1'。我可以很容易地運行這樣的'http://mkiddr.com/phptests/shopping/category.php?id=1;DROP TABLE ProductCategories; - '並且毀了你所有的努力工作。見http://bobby-tables.com/ – 2013-03-06 13:34:14

+0

@Matt Kidd嚴姆,爲什麼西蒙的回答被證明是正確的 - 你正在使用我的解決方案,據我所知 – Stormherz 2013-03-06 13:50:12

回答

0

問題是選項標籤沒有「動作」執行。您必須使用JavaScript將用戶重定向到選定的選項。更改選擇標記

<select onchange="window.location = this.value;"> 
+0

優秀似乎已經在一定程度上做到了這一點...當您選擇Mens_Accessories時,您會看到mkiddr.com/phptests/shopping它會帶您到正確的類別,但選擇不會顯示正確的標題。第一類似乎也沒有反應。任何想法,爲什麼這可能是? – 2013-03-06 13:43:13

+0

當然,只是改變回聲「」;到$ selected =($ row [0] == $ _GET ['id'])? 'selected =「selected」':''; echo「」; – Stormherz 2013-03-06 13:46:28

+0

太棒了!這非常好,非常感謝。編碼不是我的東西!儘管我已經開始掌握一些東西...... – 2013-03-06 13:52:08

-1

嘗試swopping出while循環以下:

while ($row = $result->fetch_row()) { 

     echo "<option value='category.php?id=".$row[0]."'>".$row[1]."</a></option>"; 
     //display categories 

     } 

看看是否應該工作

由於@Stormherz提到也有這個負載自動選擇上您需要將onclick方法放在select標籤上的選項上;

+0

有什麼區別?您只是從功能切換到面向對象接口,但它們是等效的。 – Barmar 2013-03-06 13:29:50

+0

優秀似乎已經在一定程度上做了... 正如你將看到http://mkiddr.com/phptests/shopping/當選擇Mens_Accessories它會帶你到正確的類別,但是選擇不會顯示正確的標題。第一類似乎也沒有反應。 任何想法,爲什麼這可能是? – 2013-03-06 13:39:26

+0

第一個沒有響應,因爲它已經在值上,所以沒有變化事件,您需要在前面添加另一個選項,如,但將其留在循環外 – 2013-03-06 13:43:04