2017-04-21 3 views
1

カテゴリがない場合は少し問題があります。エコーする必要がある場合はカテゴリをエコーする必要がありますカテゴリがあります。カテゴリがある場合は表示されますが、カテゴリがない場合は表示されません。エコーステートメントのみ1つ返す

<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> 
+0

もし 'CategoryId'が** not **空であれば、" No categories "と表示されますか?よくわかりません。なぜ '$ CategoryID = $ row ['CategoryID']; '? '$ row'を使うだけです –

+0

カテゴリがないとどうなりますか?それは空白ですか? – FirstOne

+0

if文がループチェックの前に開始する必要があります。結果が返ってこない場合は、何もエコーされません。 –

答えて

3

存在しない存在します。

カテゴリがない場合、db結果に行が存在するため、whileループは実行されません。

試してみて、最初の行の量を確認してください。

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

マイナーなコーディングスタイルポイントですが、 'echo'は関数ではないので、一般的には括弧で囲まれていません。' echo $ CategoryID; '' echo($ CategoryID); ' – IMSoP

2

何のカテゴリが存在しない場合、この条件:

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

これを書いの長ったらしい方法です:

while ($row = mysqli_fetch_assoc($result)) 

が真なることはありませんので、あなた」ループを0回入力してください。$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 

2つのチェックが周りの間違った方法ですが、もっと重要なのは、彼らがループ内部ある場合。私はPHPにその背中を翻訳するためにあなたにそれを残しておきます

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" 

:あなたはおそらく何を意味するのか

はこのようなものでした。 :)もちろん

、あなたが本当に唯一の存在の結果であるかどうかを知る必要がある場合は、あなたは非常にすっきりすることにより、これを書くことができますでSELECT COUNT(*)を使用してmysqli_num_rows

  • を使用して返される行をカウント

    • あなたSQLの代わりにSELECT *の代わりにWHERE CategoryId IS NOT NULL
  • +0

    == trueを追加する必要はありませんが、実際には効果はありません。空白の文字列、0、null、空の配列、偽 – Augwa

    +0

    @Augwaええと、私はそれが同じことを書くのは長年の方法だと言ったように、わかりました。しかし、この場合は読みやすさが積極的に痛いと思いますので、私はそれを呼びました。 – IMSoP

    +0

    @Augwa Zend Supportによって提供されたものを追加する必要があります。それがなければ、条件警告フラグに代入が与えられます。 – Case

    0

    正しく理解すれば、empty()ではなく!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>"; 
    } 
    

    : コードは次のように実行します。

    +1

    このバグは確かに存在しますが、OPが求めているものではありません。問題は、ループが決して入力されないため、カテゴリがない場合は出力が*空白*であるということです。 – IMSoP

    +0

    o ya ..私はそれを逃した – sagar

    0

    Whileループを呼び出すと、クエリで結果に少なくとも1つのカテゴリが返された場合、それが表示されます。

    したがって、カテゴリがない場合はループが混乱します。 empty()を0より大きいCategoryIDのカウントで置き換えて、何が起こるかを見てください。 > 0

    場合

    が問題を解決するのは簡単です

    1

    結果がない場合は、whileループに入っていないので、条件文が冗長です(出力が得られない理由です)。

    あなたが何かをしようとする前に、結果を確認するためにいくつかのコメントに記載されているように、あなたの方が良いでしょう。

    if($result->num_rows > 0) { 
        // you now know there are results 
        while ($row = mysqli_fetch_assoc($result)) { 
         // do your business in here as you would have, but you dont need to worry about nothing to process 
        } 
    } else { 
        // do something in here to send back a null result, or whatever you like 
    } 
    
    1
    while (($row = mysqli_fetch_assoc($result)) == true) 
    

    コードの上記部分によります。それは、ループされていないデータがフェッチされていない場合に、データベースから返されたデータまたはフェッチされたデータがある場合にのみ、whileループの内部に入ります。

    カテゴリがない場合、ループから外れてこのecho "<td>No categories</td>";は表示されません。

    また、「No Categories」というエコーを入れているので、カテゴリがない場合は、出力をエコーし​​たいという意味です。しかし、あなたのuは、いくつかの変数が空であるかどうかを確認したい場合は

    それが空の場合 if(empty())はtrueになり、それが空でない場合は if(!empty())はtrueになります
    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>"; 
        } 
    

    以下のように実行する必要があり、以来、条件が間違っている場合。

    関連する問題