子选项未显示在选择菜单中

时间:2016-08-24 17:42:31

标签: php mysql select

我一直在搞乱子类别并为测试目的创建了一个新的数据库类别。

Table newcategories

category_id (int) AUTO
name (varchar) NOT NULL
parent (int) NULL
category_desc (text) NULL
sort_order (int) NOT NULL

我在数据库中输入了一些类别和子类别,但在尝试在选择菜单中显示具有相应子类别的主要类别时遇到了问题。

<?php
    // // // query database to return all existing main categories
    $selectMainCat='SELECT * 
                    FROM newcategories 
                    WHERE parent is NULL 
                    ORDER BY sort_order ASC';

    $smc=$conn->query($selectMainCat);
    while($rowsmc = $smc->fetch_assoc()) { 
        $parent_id = $rowsmc['category_id']; 
?>

        <optgroup label="<?php echo "{$rowsmc['name']}";?>">
        <option value="<?php echo"{$rowsmc['category_id']}"; ?>" 
<?php 
        if (isset($catID) && $catID=="{$rowsmc['category_id']}") 
            echo "selected";
?>
>
<?php 
            echo "{$rowsmc['name']}";?></option>
<?php
    // // // query database to return all sub categories
            $selectSubCat='SELECT * 
                           FROM newcategories 
                           WHERE parent = "$parent_id" ';

            $ssc=$conn->query($selectSubCat);
            while($rowssc = $ssc->fetch_assoc()){ 
?>
                <option value="<?php echo"{$rowssc['category_id']}"; ?>" 
<?php 
                if (isset($catID) && $catID=="{$rowssc['category_id']}") 
                    echo "selected";
?>
>
<?php 
                     echo "{$rowssc['name']}";?></option>
<?php
                }
?>
</optgroup>
<?php
            }
?>

以下是我输入db

的内容
category_id     name        parent  category_desc   sort_order
1               Fruits      NULL    NULL             1
2               Vegetables  NULL    NULL             2
3               Apple       1       NULL             1
4               Arugula     2       NULL             1
5               Cabbage     2       NULL             2
6               Honeycrisp  3       NULL             1
7               Braeburn    3       NULL             2

HTML OUTPUT

<select class="form-control m-b" name="catID" id="catID">
  <option value="" disabled selected> Select Main Category</option>
  <option value="" disabled></option>
  <optgroup label="Fruits">
    <option value="1" >Fruits</option>
  </optgroup>
  <optgroup label="Vegetables">
    <option value="2" >Vegetables</option>
  </optgroup>
</select>

1 个答案:

答案 0 :(得分:1)

您遇到的问题是,由于您使用的是non-interpolating quotes,因此未正确插值。可以使用占位符值正确执行查询来解决此问题:

$ssc = $conn->prepare('SELECT * FROM newcategories WHERE parent=?');
$ssc->bind_param('i', $parent_id);
$result = $ssc->execute();

while ($rowssc = $result->fetch_assoc()) { 
  ...
}

将任何类型的数据直接放入查询中非常危险,尤其通过$_GET$_POST$_REQUEST直接来自用户的内容。即使$_COOKIE$_SESSION也可能有问题,因为这些可能包含以前由用户提供的值,或者用户具有某种程度的控制权。