2012-05-26 49 views
0

我很難理解從數據庫通過php回顯變量的概念。取而代之的是字符串格式的變量,我得到一個整數。如何通過選擇框顯示類別字符串變量?PHP:回顯變量並通過選擇框顯示輸出

這裏是我的數據庫中的信息:

CREATE TABLE `category` (
    `c_id` tinyint(4) not null auto_increment, 
    `category` varchar(30) not null, 
    PRIMARY KEY (`c_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5; 

INSERT INTO `category` (`c_id`, `category`) VALUES ('1', 'Animals >'); 
INSERT INTO `category` (`c_id`, `category`) VALUES ('2', 'Humans >'); 
INSERT INTO `category` (`c_id`, `category`) VALUES ('3', 'Technology >'); 
INSERT INTO `category` (`c_id`, `category`) VALUES ('4', 'Oceans >'); 
INSERT INTO `category` (`c_id`, `category`) VALUES ('5', 'Desert >'); 
INSERT INTO `category` (`c_id`, `category`) VALUES ('6', 'Jungles >'); 

這裏是我的PHP:

<select name="category" size="6" onChange="autoSubmit();"> 
     <?php 

     //POPULATE DROP DOWN MENU WITH CATEGORIES 
     $conn = new PDO($DSN, $USERNAME, $PASSWORD); 
     $sql = "SELECT * FROM category ORDER BY c_id"; 

     while($row = mysql_fetch_array($categories)) 
     {   
      echo ("<option value=\"$row[c_id]\" " . ($category == $row["c_id"] ? " selected" : "") . ">$row[category]</option>");   
     } 

     ?> 


    <option value="1" <?php if($category == 1) echo " selected"; ?>><? echo $category; ?></option> 
    <option value="2" <?php if($category == 2) echo " selected"; ?>><? echo $category; ?></option> 
    <option value="3" <?php if($category == 3) echo " selected"; ?>><? echo $category; ?></option> 
    <option value="4" <?php if($category == 4) echo " selected"; ?>><? echo $category; ?></option> 
    <option value="5" <?php if($category == 5) echo " selected"; ?>><? echo $category; ?></option> 
    <option value="6" <?php if($category == 6) echo " selected"; ?>><? echo $category; ?></option> 
    </select> 
+3

指定$ category變量的代碼在哪裏? –

+5

你的問題是什麼? – slash197

+3

啊!循環是你的朋友!另外,'>'是一個html特殊字符,所以你需要轉義你的'echo $ category;'''echo'htmlspecialchars($ category);'。 – Corbin

回答

4

升級到一個答案

  1. <select></select>標籤都應該安排你的PHP代碼塊的一面;
  2. 您應該從SQL中刪除WHERE子句;和
  3. 您不需要手動包含<option>..</option>代碼,因爲這是由PHP構建/輸出的。

例如,使用PDO:

<select name="category" size="6" onChange="autoSubmit();"> 
<?php 
    $dbh = new PDO($DSN, $USERNAME, $PASSWORD); 
    $qry = $dbh->query('SELECT * FROM category ORDER BY c_id'); 

    while ($row = $qry->fetch()) { 
    echo '<option value="' . $row['c_id'] . '"'; 
    if ($row['c_id'] == $category) echo ' selected'; 
    echo '>' . htmlentities($row['category']) . '</option>' 
    } 
?> 
</select> 
+0

感謝您的建議和回覆。請原諒我的無知,我對此很陌生。 – CodingWonders90

1

我可以看到一個問題 - 不知道這是你的問題?這是你如何做「選擇」位。

<option value="1" <?php if($category == 1) echo ' "selected=selected"'; ?>><? echo $category; ?></option> 

但我們需要看到你的代碼,在那裏你指定$類變量,以瞭解更多

+0

僅在XHTML中需要;在HTML中,'selected'沒有'= selected'是完全有效的。 – eggyal

2

這可能會幫助你,記得eggyal

3)中提到的第三點你不需要手動包括代碼..因爲這全部由PHP構建/輸出。

<select name="category" size="6" onChange="autoSubmit();"> 
     <?php 

     //POPULATE DROP DOWN MENU WITH CATEGORIES 
     $dbh = new PDO($DSN, $USERNAME, $PASSWORD); 
     $qry = $dbh->query('SELECT * FROM category ORDER BY c_id'); 

     while ($row = $qry->fetch()) { 
     {   
      if($row[c_id] == $category) 
       $selected = "selected=\"selected\"";    
      echo ("<option value=\"{$row['c_id']}\" {$selected}>{$row['category']}</option>");   
     } 
     ?> 
2

下面是與例如式設置的數據:(使用PDO extension

  1. Connect database和準備查詢:

    $dbh = new PDO('mysql:host=localhost;dbname=my_database', $user, $pass); 
    $query = 'SELECT `c_id`, `category` FROM `category`'; 
    
  2. Execute query並將其推到PHP array

    foreach ($dbh->query($query) as $row) { 
        $categories[$row['c_id']] = $row['category']; 
    } 
    
  3. Loop through the array和輸出HTML:

    <?php $my_selected_category = 3; ?> 
    <select name="category" size="6" onChange="autoSubmit();"> 
        <?php foreach($categories as $id => $name) { ?> 
        <option value="<?php echo $id; ?>" <?php echo $id == $my_selected_category ? 'selected="selected"' : ''; ?>><?php echo $name; ?></option> 
        <?php } ?> 
    </select> 
    

    注意,我使用了ternary operator代替if-else控制結構有條件回聲selected="selected"的。在某些情況下,操作員可能會緩解您的生活。

+0

爲什麼循環遍歷數據庫結果填充數組(可能對於大型結果集來說非常耗費內存),然後才能遍歷該數組?爲什麼不直接從循環結果中輸出? – eggyal

+0

@eggyal好點。我想到了一些原因:1.有很多方法,這是其中之一; 2.可重用性; 3.示例數據集很小; 4.學習分離不同層次的應用程序是很好的。 – bostaf