0

我很难掌握通过 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>
4

4 回答 4

4

升级到答案

  1. 标签应位于 PHP 代码块的<select></select>两侧;
  2. 您应该WHERE从 SQL 中删除该子句;和
  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>
于 2012-05-26T07:54:54.207 回答
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>");        
        }
        ?>
于 2012-05-26T08:26:36.580 回答
2

这是您的示例数据集的公式:

  1. 连接数据库并准备查询(使用PDO 扩展):

    $dbh = new PDO('mysql:host=localhost;dbname=my_database', $user, $pass);
    $query = 'SELECT `c_id`, `category` FROM `category`';
    
  2. 执行查询并将其推送到PHP 数组

    foreach ($dbh->query($query) as $row) {
        $categories[$row['c_id']] = $row['category'];
    }
    
  3. 循环遍历数组并输出 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>
    

    请注意,我使用三元运算符而不是if-else控制结构来有条件地回显selected="selected"。在某些情况下,接线员可能会减轻您的生活压力。

于 2012-05-26T08:27:24.600 回答
1

我可以看到一个问题 - 不确定这是否是您的问题?这就是您执行“选定”位的方式。

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

但是我们需要查看您的代码,您在其中分配 $category 变量以了解更多信息

于 2012-05-26T07:54:41.780 回答