0

質問があります

mysql_select_db($database_auditing, $auditing);
$query_sections3 = sprintf("SELECT tblanswer.questionid AS answerqid,
                                tblanswer.answerid AS answerid, 
                                tblanswer.answer AS answer, 
                                tblquestion.questionid AS questionid, 
                                tblquestion.questiontext AS questiontext, 
                                tblquestion.questionid AS quesid, 
                                tblquestion.questiontypeid AS questiontype, 
                                tblquestion.sectionid AS sectionid, 
                                tblscore.score1 AS score1, 
                                tblscore.score2 AS score2, 
                                tblscore.score3 AS score3, 
                                tblscore.score3 AS score3, 
                                tblscore.score4 AS score4, 
                                tblhelptext.helptext AS help, 
                                tblsection.sectionname AS sectionname 
                            FROM tblanswer 
                            LEFT JOIN tblquestion ON tblanswer.questionid = tblquestion.questionid 
                            LEFT JOIN tblscore ON tblquestion.questionid = tblscore.questionid 
                            LEFT JOIN tblhelptext ON tblquestion.questionid = tblhelptext.questionid 
                            LEFT JOIN tblsection ON tblquestion.sectionid=tblsection.sectionid 
                            WHERE tblanswer.auditid=%s 
                            ORDER BY tblquestion.sectionid",  
                        GetSQLValueString($_SESSION['auditid'], "int"));

$sections3 = mysql_query($query_sections3, $auditing) or die(mysql_error());

$totalRows_sections3 = mysql_num_rows($sections3);

データベースから関連する質問を引き出し、サイトに関連するアンケートを作成します。

各質問は、特定のセクションに関連しています。

したがって、私がやろうとしている (そして惨めに失敗している) ことは、上記のクエリの結果を、各 div 内でネストされたクエリを使用することなく、アンケートに使用しているアコーディオンの関連部分に表示することです (これは、指定された結果をデータベースに入力する際に​​問題を引き起こしています)。

この投稿に貢献してくれたすべての人に感謝します。

アコーディオンで各質問を独自のタブで再生することができましたが、達成しようとしているのは、関連するすべての質問を同じタブ内で取得することです。

アコーディオンコードは次のとおりです。

<?php $prevsub='';
$purpleronnie=0;
 while ($row_sections3=mysql_fetch_assoc($sections3)) {

     if ($row_sections3['sectionid'] !=$prevsub) {
         ?>

<div class="AccordionPanel">
<div class="AccordionPanelTab"><?php echo $row_sections3['sectionname'];?></div>
<div class="AccordionPanelContent">

<br />
<h5>Please answer the questions below to the best of your ability. For help, hover over the help icon, help text will appear in the box to the right of the screen.</h5>
<?php }?>

<table class="table2" align="center">
<tr>

<th><?php echo $row_sections3['questiontext'];?> <input type="hidden" name="qnumber[]" value="<?php echo $row_sections3['questionid'];?>" />
</th>
<td>
<input type="text" name="answerid[<?php echo $purpleronnie;?>]" value="<?php echo  $row_sections3['answerid'];?>" size="1" />

<?php if ($row_sections3['questiontype']=="1") { ?> 
<input type="text" size="25" name="answer[<?php echo $purpleronnie;?>]" value="<?php echo $row_sections3['answer'];?>" />

<?php } ?>

</table>    

</div>
</div>
<?php $purpleronnie++;
 if ($prevsub!=''&&$prevsub!=$row_sections3['sectionid'])
 $prevsub=$row_sections3['sectionid']; }?>

すべての質問ではなく、セクションIDが増加するたびにアコーディオンdivを変更するように上記を変更する方法の提案はありますか?

どうもありがとうデイブ

4

1 に答える 1

0

セクション ID で並べ替えることができる場合は、最初に section_id で区切られたデータの配列を作成してから、それをループして div などを作成します。以下のコードはサンプル コードに基づいており、prob ではない最もエレガントですが、データが想定どおりに入れば、必要なことを実行できます。これが 100% 必要なものではない場合、少なくとも開始する場所が得られます。また、終了タグにも注意してください。投稿したコード例では、テーブルの列と行を閉じませんでした。

$purpleronnie=0;
$data = array();

// sort your questions into "buckets" first
while ($row_sections3=mysql_fetch_assoc($sections3)) {
    // store that row of data in the correct sectioned off container
    $data[$row_sections3['sectionid']][] = $row_sections3;
}

// do nothing if we have no data! 
if(empty($data)) exit('woops! no results in this section!');

// now loop through these results and build your divs
echo '<div class="AccordionPanel">';

foreach($data as $sectionid => $rows){
    // grab the section name of the first row to use for the main section tabs
    $section_name = $rows[0]['sectionname'];
    echo 
        '<div class="AccordionPanelTab">'.$section_name.'</div>
         <div class="AccordionPanelContent">
            <br />
            <h5>Please answer the questions below to the best of your ability. 
                For help,hover over the help icon, help text will appear in the 
                box to the right of the screen.</h5>
            <table class="table2" align="center">';

    // now just loop through the rows in this section and fill in the stuff
    foreach($rows as $row){
      echo 
          '<tr>
               <th>'.$row['questiontext'].'
                   <input type="hidden" name="qnumber[]"
                          value="'.$row['questionid'].'"/>
               </th>
               <td>
                   <input type="text" name="answerid['.$purpleronnie.']" 
                          value="'.$row['answerid'].'" size="1" />';

        // do your conditional here
        if($row['questiontype']=="1") {
            echo '<input type="text" size="25" name="answer['.$purpleronnie.']" 
                         value="'.$row['answer'].'" />';
        }

        // make sure you close your rows!
        echo '</td></tr>';
    } // end foreach row of questions

    // close of question table and accordion panel content
    echo '</table></div>';

    // increment your counter thing
    ++$purpleronnie; 
}// end foreach sectionid

// close the accordian panel container
echo '</div>';
于 2012-06-18T12:19:26.380 に答える