echo语句只返回一个

时间:2017-04-21 14:40:42

标签: php

如果没有类别我需要回应没有类别,如果我需要它回应有类别,我有一点问题。它显示是否有类别,但如果没有则不显示。

<tr>
  <?php 

    $db = dbconnect();
    $stmt = $db->prepare("SELECT * FROM discussion_categories");
    $stmt->execute();
    $result = $stmt->get_result();

    while (($row = mysqli_fetch_assoc($result)) == true) {

    $CategoryID = $row['CategoryID'];    
    $Name = $row['Name'];
    $Description = $row['Description'];
    $Photo = $row['Photo'];



    if(!empty($CategoryID['CategoryID'])){ 

        echo "<td>No categories</td>";

    } else {

        echo "<td colspan='4'><img class='profile-photo' src='" . ROOT_URI . "/uploads/" . $Photo . "'></td>";
        echo "<td colspan='4'><a href='discussions.php?view={$CategoryID}'>{$Name}</a></td>";
        echo "<td><a href='managecategories.php?delete={$CategoryID}'>delete</a></td>";
    }


} 

?>      
     </tr>

6 个答案:

答案 0 :(得分:3)

这是一个容易解决的问题。

如果没有类别,则永远不会执行while循环,因为db结果中现在有行。

首先尝试检查行数:

if (mysqli_num_rows($result) == 0) { 

  //there are no categories
  echo('no categories');

} else {

  //there are categories
  echo('there are categories');

  //in case you want to loop through your categories now
  while (($row = mysqli_fetch_assoc($result)) == true) {

    $CategoryID = $row['CategoryID'];  
    echo($CategoryID);
    //your code
 }

}

这应该对你有帮助!

答案 1 :(得分:2)

如果没有类别,那么这个条件:

while (($row = mysqli_fetch_assoc($result)) == true)

这是一种冗长的写作方式:

while ( $row = mysqli_fetch_assoc($result) )

永远不会是真的,所以你将进入零次循环 - $row永远不会有“真实”的价值。

如果我们将您的代码写成伪代码,我们会得到:

inspect each result
    if the result has a non-empty CategoryID, echo "No categories"
    if the result has an empty CategoryID, echo "There are categories"
end of loop

两个if检查是错误的,但更重要的是它们是在循环中

你可能意味着这样的事情:

set found_results flag to false
inspect each result
    if the result has a non-empty CategoryID, set found_results flag to true
    perform other operations on the result, or use "break;" to end the loop early
end of loop
if found_results flag is true, echo "There are categories"
if found_results flag is false, echo "No categories"

我会留给你把它翻译成PHP。 :)

当然,如果你真的只需要知道是否有结果,你可以通过以下方式写出这样的内容:

  • 使用mysqli_num_rows
  • 计算返回的行数
  • 在您的SQL中使用SELECT COUNT(*)而不是SELECT *,也可能使用WHERE CategoryId IS NOT NULL子句

答案 2 :(得分:1)

如果你没有结果,那么它甚至不会进入while循环,所以你的条件语句是多余的(这就是你没有输出的原因)。

在你试图对它们做任何事情之前,你可以在一些评论中提到检查结果。

df <- data.frame(x = c(1, NA),
                 y = c(1, 1000))
ggplot(df) + geom_point(aes(x, y))

答案 3 :(得分:1)

 while (($row = mysqli_fetch_assoc($result)) == true)

根据上面的代码部分。如果有任何数据从数据库返回或获取,它只会进入while循环,否则如果没有提取数据,它将不会进入循环。

如果没有类别,那么它将退出循环,因此永远不会显示此echo "<td>No categories</td>";

此外,由于你已经发出一个回音说“没有类别”,我认为这意味着你想要在没有类别的情况下回显输出。但是你的if条件是错误的,因为如果你想检查某个变量是否为空,你需要按照下面这样做

if(empty($CategoryID['CategoryID'])){ 

        echo "<td>No categories</td>";

    } else {

        echo "<td colspan='4'><img class='profile-photo' src='" . ROOT_URI . "/uploads/" . $Photo . "'></td>";
        echo "<td colspan='4'><a href='discussions.php?view={$CategoryID}'>{$Name}</a></td>";
        echo "<td><a href='managecategories.php?delete={$CategoryID}'>delete</a></td>";
    }

如果if(empty())为空,则if(!empty())为真,如果不为空,则Vector normal = w.cross(v).normalised(); 为真。

答案 4 :(得分:0)

如果我理解正确,你应该使用empty()not!empty()。 代码运行如下:

if(!empty($CategoryID['CategoryID'])){  //if cat is not empty it says no cat
    //notice the ! in front of empty tag
    echo "<td>No categories</td>";
} else {
    echo "<td>There are categories</td>";
}

根据您的代码,如果类别为空,则会显示有类别。

答案 5 :(得分:0)

通过调用While循环,您可以说,如果查询在结果中返回至少一个类别。

当没有类别时,循环就会混淆。尝试用大于零的CategoryID计数替换empty(),看看会发生什么。

如果&gt; 0

存在

否则

不存在