0

重複の可能性:
内部 while ループが機能しない

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

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

    <?php

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

    $outQuery = "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";  

    $outResult = mysqli_query( $dbc, $outQuery);


    while ( $outRow = mysqli_fetch_array ( $outResult, MYSQLI_ASSOC) )   {

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

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



                    $innerQuery = "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";  

                    $innerResult = mysqli_query( $dbc, $innerQuery);

                    $c = $i = 0;

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

                                while($innerRow = mysqli_fetch_array( $innerResult, 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="' . $innerRow['category_id'] . ":" . $category . ":"  . $innerRow['subject_id'] . ":". $innerRow['subjects'] . '" />&nbsp;&nbsp;' . $innerRow['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>'; 
?>

これは私のHTMLです

    good<fieldset class='alt'>
<legend><span>Category : <em style='color: red;'>grade 1 - 4</em></span></legend>
    <table class='form_table'><tr>
    <tr>
        <td width='50%'><input type='checkbox' name='subject[]' value='2:grade 1 - 4:2:Art' />&nbsp;&nbsp;Art</td>
        <td width='50%'><input type='checkbox' name='subject[]' value='2:grade 1 - 4:3:Art & Craft' />&nbsp;&nbsp;Art & Craft</td>
    </tr>
    <tr>
        <td width='50%'><input type='checkbox' name='subject[]' value='2:grade 1 - 4:4:Bialogy' />&nbsp;&nbsp;Bialogy</td>
        <td width='50%'><input type='checkbox' name='subject[]' value='2:grade 1 - 4:5:Buddhism' />&nbsp;&nbsp;Buddhism</td>
    </tr>
    </table>
<fieldset class='alt'>
    <legend><span>Category : <em style='color: red;'>grade 5 (scholarship exam)</em></span></legend>
        <table class='form_table'><tr>
            <tr>
            <td width='50%'><input type='checkbox' name='subject[]' value='3:grade 5 (scholarship exam):1:Agro & Food Technology' />&nbsp;&nbsp;Agro & Food Technology</td>
            <td width='50%'><input type='checkbox' name='subject[]' value='3:grade 5 (scholarship exam):2:Art' />&nbsp;&nbsp;Art</td>
            </tr>
    <tr>
        <td width='50%'><input type='checkbox' name='subject[]' value='3:grade 5 (scholarship exam):3:Art & Craft' />&nbsp;&nbsp;Art & Craft</td>
        <td width='50%'><input type='checkbox' name='subject[]' value='3:grade 5 (scholarship exam):4:Bialogy' />&nbsp;&nbsp;Bialogy</td>
    </tr>
    </table>
        <fieldset class='alt'>
    <legend><span>Category : <em style='color: red;'>grade 6 - 10</em></span></legend>
        <table class='form_table'><tr>
    <tr>
        <td width='50%'><input type='checkbox' name='subject[]' value='4:grade 6 - 10:2:Art' />&nbsp;&nbsp;Art</td>
        <td width='50%'><input type='checkbox' name='subject[]' value='4:grade 6 - 10:3:Art & Craft' />&nbsp;&nbsp;Art & Craft</td>
    </tr>
    <tr>
        <td width='50%'><input type='checkbox' name='subject[]' value='4:grade 6 - 10:4:Bialogy' />&nbsp;&nbsp;Bialogy</td>
        <td width='50%'><input type='checkbox' name='subject[]' value='4:grade 6 - 10:5:Buddhism' />&nbsp;&nbsp;Buddhism</td>
    </tr>
    </table>
</fieldset> 

コメントは大歓迎です..

ありがとうございました

4

1 に答える 1

0

内側のループで行を連想配列にフェッチし、キーが であるためcategory_id、反復ごとに前の結果が置き換えられます。mysqli_fetch_row()代わりに使うべきだと思います。

于 2012-05-21T09:08:06.580 に答える