【问题标题】:How can I add option values in the select tag with PHP如何使用 PHP 在 select 标签中添加选项值
【发布时间】:2018-10-30 03:23:57
【问题描述】:

我正在使用 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

当产品类别字段为空并且选择标签的选项在表单字段中上升时。

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

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

谢谢。

【问题讨论】:

  • 为此使用htmlspecialchars
  • 尝试从 php 表单中显示更多代码。从我看来是正确的

标签: php function mysqli while-loop


【解决方案1】:

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

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

您期望发生的事情是您将获取get_cats() 的返回值并将其插入到HTML 中。但是在get_cats() 函数中,您没有返回值 - 您在进行过程中会回显这些值 可能发生的情况是,它会像您期望的那样混合而不是加入(如您所见从你的输出)。相反,您应该构建一个字符串并将完整的 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 已使用。

【讨论】:

  • 能否请您给我一个参考链接,说明将连接传递给函数的正确方法,而不是使用$GLOBALS['con']
  • @traebeapaiso 你不知道怎么给函数传参数? get_cats($con);
【解决方案2】:

简单答案:将生成的代码写入字符串,并在函数末尾返回。进一步呼应您的功能。然后就可以了。

【讨论】:

    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2019-02-08
    • 2020-02-15
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多