0

これは、私のプロジェクトの Web ページからのコード ピンチです。ここでは、ユーザーが選択したカテゴリを表示し、カテゴリに属する​​そのサブジェクトを表示したいと考えています。そこでは、ユーザーは複数のカテゴリを持つことができますが、問題はありません。最初の while ループで、これらすべてのカテゴリを出力できます。問題は、件名を印刷しようとすると、結果として 1 行しか表示されませんが、各カテゴリにはより多くの件名があります。誰が何が起こっているのか教えてもらえますか?

これは私のコードです。
注:両方のクエリが正常に機能しています。私はmysqlクライアントプログラムを使ってそれらを試しました。

<?php

require_once ('../../includes/config.inc.php');
require_once( MYSQL1 );

$q = "SELECT institute_category.category_id, category_name
      FROM institute_category
      INNER JOIN category ON institute_category.category_id = category.category_id
      WHERE institute_category.institute_id = $instituteId";    

$r = mysqli_query( $dbc, $q);

while ( $row = mysqli_fetch_array ( $r, MYSQLI_ASSOC) )   {

    $categoryId = $row['category_id']; 
    $category = $row['category_name']; 

    echo '<fieldset class="alt">
              <legend><span>Category : <em style="color: red;">' . $category .
              '</em></span></legend>';

    $qy = "SELECT category_subject.category_id, category_subject.subject_id, subjects
           FROM category_subject
           INNER JOIN category ON category_subject.category_id = category.category_id
           INNER JOIN subject ON category_subject.subject_id = subject.subject_id
           WHERE category_subject.category_id = $categoryId";   

    $result = mysqli_query( $dbc, $qy);

    $c = $i = 0;

    echo '<table class="form_table" ><tr>'; 

    while($row = mysqli_fetch_array( $result, MYSQLI_ASSOC  )){
        // if remainder is zero after 2 iterations (for 2 columns) and when $c > 0, end row and start a new row:
        if( ($c % 2) == 0 && $c != 0){
            echo "</tr><tr>";
        }

        echo '<td width="50%"><input type="checkbox" name="subject[]"  value="' . 
              $row['category_id'] . ":" . $category . ":"  . $row['subject_id'] . 
              ":". $row['subjects'] . '" />&nbsp;&nbsp;' . $row['subjects'] . 
              '</td>' . "\n";

        $c++; 

    } // while..

    // in case you need to fill a last empty cell:
    if ( ( $i % 2 ) != 0 ){
        // str_repeat() will be handy when you want more than 2 columns
        echo str_repeat( "<td>&nbsp;</td>", ( 2 - ( $i % 2 ) ) );
    }
    echo "</tr></table>";   
} 
echo '</fieldset>'; 
?>
4

3 に答える 3

1

私のコメントを答えに変える:

あなたのコードをちょっとだけ見ると$row、外側のループと内側のループの両方に変数を使用していることがわかります。外側のループの$row変数を$outerRowに、内側のループの$row変数をに名前変更してみてください$innerRow。これが最初の問題かもしれません。これは、変数などの他の変数にも適用される場合があり$resultます。

于 2012-05-21T06:47:06.790 に答える
0

内側のループ$resultなど$rowのユーザー別$inresultの変数名$inrow

于 2012-05-21T06:46:04.197 に答える
0

$row両方のループで$row[]同じ変数を使用しているため、探している変数がその結果セットに含まれていないinner loop可能性があるreference of outer oneため、内側のループから何も出力しないようにするには、内側または外側のループの変数を変更してください。

于 2012-05-21T06:50:26.927 に答える