1

少し問題があります。オンラインテストを作成しようとしていますが、回答をシャッフルする必要があるため、1 は良い回答で 2,3 は悪いですが、常に a = 1 b = 2 c = 3 と表示され、そのようにランダム化する何かが必要ですa=2 b=3 c=1 どうしたらいいの?

コードはここにあります:

$result = mysql_query( "SELECT * FROM questions ORDER BY RAND() LIMIT 0,10");
while ($row = mysql_fetch_array($result)) {
    $rows[] = $row;
    $question_id = $row['question_id'];
    $question = $row['question'];
    $answare_good = $row['answare_good'];
    $answare_badi = $row['answare_badi'];
    $answare_badii = $row['answare_badii'];
    $number += 1;
    echo '<tr>
    <td rowspan="3" width="10">'.$number.'</td>
    <td rowspan="3" width="70%"><p>'.$question.'</p></td>
    <td width="30%" height="33%"><input type="checkbox" name="a1" id="a1">
    '.$answare_good.'</td>
    </tr>
    <tr>
    <td width="30%" height="33%"><input type="checkbox" name="a2" id="a2">
    '.$answare_badi.'</td>
    </tr>
    <tr>
    <td  width="30%" height="33%"><input type="checkbox" name="a3" id="a3">
    '.$answare_badii.'</td>
    </tr>';

$answare_good & $answare_badi & $answare_badii を配列シャッフルしようとしましたが、失敗しました。

4

2 に答える 2

2

このコードはどうですか:

$result = mysql_query("SELECT * FROM questions ORDER BY RAND() LIMIT 0,10");
while ($row = mysql_fetch_array($result)) {
    $rows[] = $row;
    $question_id = $row['question_id'];

    $answers = array(
        array('a1', 'val1', $row['answare_good']),
        array('a2', 'val2', $row['answare_badi']),
        array('a3', 'val3', $row['answare_badii']),
    );
    shuffle($answers);

    $number += 1;

    echo '<tr>
    <td rowspan="3" width="10">'.$number.'</td>
    <td rowspan="3" width="70%"><p>'.$row['question'].'</p></td></tr>';
    foreach($answers as $answer) {
        echo '<tr><td width="30%" height="33%"><input type="checkbox" name="'.$answer[0].'" id="'.$question_id.'-'.$answer[0].'" value="'.$answer[1].'" />'.$answer[2].'</td></tr>';
    }
}

チェックされた回答の値を取得できるようにするには、チェックボックスの値も指定する必要があります...

また、関数が非推奨になったため、関数に移動するPDOか、少なくともmysqli_*関数に移動します...mysql_*

編集:radio代わりに使用することも考えてcheckboxください-ユーザーが1つの答えだけを選ぶ必要があると仮定します。ユーザーに複数 (または 3 つすべての回答) を選択させたい場合は、checkbox問題ありません。

于 2013-01-17T15:04:05.583 に答える
1

変数を使用可能にする必要がある場合は、シャッフルに追加して抽出できます

$answers = array(
 'opt1' => 'answer1',
 'opt2' => 'answer2',
 'opt3' => 'answer3'
);

shuffle($answers);
extract($answers);

//変数にアクセスします

echo $opt1;
echo $opt2;
echo $opt3;
于 2013-01-17T14:58:13.673 に答える