如何使用PHP

时间:2018-05-20 06:57:06

标签: php function mysqli while-loop

我正在使用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()语句。

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

感谢。

2 个答案:

答案 0 :(得分: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 使用。

答案 1 :(得分:0)

简单回答:将生成的代码写入字符串,并在函数末尾返回。进一步回应你的功能。然后它会工作。