2014-01-17 2 views
1

Я делаю простую игру с php-викториной. У меня есть вопросы и ответы, хранящиеся в базе данных. Табличная структура моего tblQuiz такова:Php отображает случайные записи на радиокнопке [quiz]

_id, question, answer1, answer2, answer3, correctanswer. 

Мне нужно в случайном порядке отобразить их на странице.

Это то, что я пытался до сих пор:

<!DOCTYPE html> 
<html> 
<head> 
<title>Sample Quiz</title> 
<?php 
include 'db.php'; 
$stmt = $conn->prepare("SELECT * 
     FROM tblquiz ORDER BY rand()"); 
     $stmt->execute(); 
?> 
</head> 
<body> 
<?php 
    $number = 0; 
    for($i=0; $row = $stmt->fetch(); $i++){ 
      $number++; 
      $id = $row['_id']; 
      $question = $row['question']; 
      $answer1 = $row['answer1']; 
      $answer2 = $row['answer2']; 
      $answer3 = $row['answer3']; 
      $correctanswer = $row['correctanswer'];  
?> 

    <h4> <?php echo $number . ".) " . $question; ?></h4> 
    <label><input type="radio" value="<?php echo $answer1; ?>" name="<?php echo $question; ?>"> <?php echo $answer1; ?></label> 
    <label><input type="radio" value="<?php echo $answer2; ?>" name="<?php echo $question; ?>"> <?php echo $answer2; ?></label> 
    <label><input type="radio" value="<?php echo $answer3; ?>" name="<?php echo $question; ?>"> <?php echo $answer3; ?></label> 
    <label><input type="radio" value="<?php echo $correctanswer; ?>" name="<?php echo $question; ?>"> <?php echo $correctanswer; ?></label> 

<?php 
    } 
?> 
<br /> 
<br /> 
<input type="submit" value="Submit" name="submit"> 

</body> 
</html> 

Но я не могу показаться, чтобы получить то, что я хочу достичь, только в настоящее время в случайном порядке отображаются вопросы. Я также хочу случайным образом позиционировать ответы сами.

Я новичок в PHP, поэтому мне нужна ваша помощь. Большое спасибо заранее тем, кто поможет.

+2

Поскольку вы выводите '$ answer1',' $ answer2', '$ answer3' в определенном порядке ... – Passerby

+0

@Passerby как я положил их в случайном порядке ? – Dunkey

+1

@ Dunkey Вы должны придумать какой-то механизм для этого, не могли бы вы подумать, как это сделать? –

ответ

3

Попробуйте это:

<body> 
<?php 
$number = 0; 
for($i=0; $row = $stmt->fetch(); $i++){ 
     $number++; 
     $id = $row['_id']; 
     $question = $row['question']; 
     $ans_array = array($row['answer1'],$row['answer2'],$row['answer3'],$row['correctanswer']); 
    shuffle($ans_array); 
?> 

<h4> <?php echo $number . ".) " . $question; ?></h4> 
<label><input type="radio" value="<?php echo $ans_array[0]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[0]; ?></label> 
<label><input type="radio" value="<?php echo $ans_array[1]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[1]; ?></label> 
<label><input type="radio" value="<?php echo $ans_array[2]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[2]; ?></label> 
<label><input type="radio" value="<?php echo $ans_array[3]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[3]; ?></label> 

<?php 
} 
?> 
<br /> 
<br /> 
<input type="submit" value="Submit" name="submit"> 

</body> 
+0

спасибо! Это решает мою проблему. Как говорят другие, я должен положить их в массив и перетасовать их. – Dunkey

+0

ваше приветствие :) да, вам нужно перетасовать ответы отдельно, как вы хотите, а также быть случайным. – user2936213

1

Храните все свои ответы в одном массиве, а затем произвольно перебирайте массив и распечатывайте свои таблицы ответов, потому что вы не можете оптимизировать свой запрос для случайного выбора столбцов.

2

Используйте этот

<?php 
function shuffle_assoc($list) { 
    if (!is_array($list)) return $list; 

    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
    $random[$key] = $list[$key]; 
    } 
    return $random; 
} 
$firstquarter = array('January', 'February', 'March'); 
$suff = shuffle_assoc($firstquarter); 

foreach($suff as $suffle) 
{ 
?> 
    <label><input type="radio" value="<?php echo $suffle; ?>" name="<?php echo $question; ?>"> <?php echo $suffle; ?></label> 

<?php 
} 
?> 

Редактор скрипку: http://www.phpfiddle.org/lite/code/rgc-zfj

Результат скрипку: http://www.phpfiddle.org/api/run/rgc-zfj

В коде

<body> 
<?php 
$number = 0; 
for($i=0; $row = $stmt->fetch(); $i++){ 
     $number++; 
     $id = $row['_id']; 
     $question = $row['question']; 
     $ans_array = array($row['answer1'],$row['answer2'],$row['answer3'],$row['correctanswer']); 
    $suff = shuffle_assoc($ans_array); 
    foreach($suff as $suffle) 
    { 
?> 
<h4> <?php echo $number . ".) " . $question; ?></h4> 
<label><input type="radio" value="<?php echo $suffle; ?>" name="<?php echo $question; ?>"> <?php echo $suffle; ?></label> 
<?php 
    } 
} 
?> 
<br /> 
<br /> 
<input type="submit" value="Submit" name="submit"> 

</body> 
Смежные вопросы