代码之家  ›  专栏  ›  技术社区  ›  user9818090

如何使用PHP在select标记中添加选项值

  •  1
  • user9818090  · 技术社区  · 8 年前

    我正在使用PHP和MySQL,我想将一些数据从db检索到一个select html标记中。

    我所做的是:

    <select class='form-control select2' name='product_cat' style='width: 100%;'>
        ".get_cats()."
    </select>
    

    功能呢 get_cats 是这样的:

    function get_cats(){
    $get_cats = "select * from categories";
    $run_cats = mysqli_query($GLOBALS['con'],$get_cats);
    $return = '';
    while($row_cats = mysqli_fetch_array($run_cats)){
        $cat_id = $row_cats['cat_id'];
        $table_id = $row_cats['table_id'];
        $cat_title = $row_cats['cat_title'];
        $totalNumberOfProductsQuery = "SELECT * FROM products WHERE product_cat = '" . $cat_id. "'";
        $catsProducts = mysqli_query($GLOBALS['con'], $totalNumberOfProductsQuery);
        if (!$catsProducts) {
           die(mysqli_error($GLOBALS['con']));
        }
        $totalProductsForCats = mysqli_num_rows($catsProducts);
        echo " 
            <option value='$cat_id'>$cat_title</option>
        ";
        }
    }
    

    它只是从数据库中正确地获取数据,但问题是,它以这种方式打印出来:

    capture

    而Product Category(产品类别)字段为空,并且select tag(选择标签)的选项将上升至form(表格)字段。

    我猜这个问题是因为 while() 我在函数中使用的语句。

    使用另一个命令执行此功能的替代方法是什么?如何将选项列表正确放置在此函数中?

    谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Nigel Ren    8 年前

    问题很可能是你输出内容的方式。当你把。。。

    <select class='form-control select2' name='product_cat' style='width: 100%;'>
        ".get_cats()."
    </select>
    

    你期望发生的是,你将获得 get_cats() 并将其插入HTML。但是在 找猫咪 函数时,您没有返回值——您在执行过程中重复了这些值。可能发生的情况是,这些值会被混合在一起,而不是像您期望的那样(从输出中可以看到)。相反,您应该建立一个字符串,并将完整的HTML返回给调用代码,以便可以将其回显。。。

    function get_cats(){
        $get_cats = "select * from categories";
        $run_cats = mysqli_query($GLOBALS['con'],$get_cats);
        $return = '';
        while($row_cats = mysqli_fetch_array($run_cats)){
            $cat_id = $row_cats['cat_id'];
            $table_id = $row_cats['table_id'];
            $cat_title = $row_cats['cat_title'];
            $totalNumberOfProductsQuery = "SELECT * FROM products WHERE product_cat = '" . $cat_id. "'";
            $catsProducts = mysqli_query($GLOBALS['con'], $totalNumberOfProductsQuery);
            if (!$catsProducts) {
               die(mysqli_error($GLOBALS['con']));
            }
            $totalProductsForCats = mysqli_num_rows($catsProducts);
            // Build up HTML
            $return .= " 
                <option value='$cat_id'>$cat_title</option>
            ";
            }
    
        return $return;
    }
    

    还有几件事。

    • 而不是使用 $GLOBALS['con'] ,将连接传递到 函数,这是一种首选的方法。
    • 查看准备好的语句并绑定变量。
    • 您可以将SQL语句缩减为1,这意味着只需要1个SQL 被使用了。
        2
  •  0
  •   Bernhard    8 年前

    简单回答:将生成的代码写入字符串并 回来 它位于函数末尾。进一步回应你的功能。那就行了。