繁体   English   中英

我如何使用PHP随机化内容?

[英]How do I randomize content using php?

我正在写一个从数据库中提取问题的测验。 它随机排列问题,但目前正确的答案始终是最后的答案。 如何重写答案,以便将正确的答案随机放入选择中。 我在思考while循环中的for循环,但我不确定如何编写它

代码如下:

<?php
$sql = 'SELECT * FROM quizquestions ORDER BY rand() LIMIT 5';
$result = $db->query($sql); ?>


        <?php 
            while($row = $result->fetch_assoc())
            {?>
                <div class="questions">
                    <p><?php echo $row['Question'] ?></p>
                    <p><input type="radio" name="<?php echo $row['Ans1Name'] ?>" /><?php echo $row['Ans1'] ?></p>
                    <p><input type="radio" name="<?php echo $row['Ans2Name'] ?>" /><?php echo $row['Ans2'] ?></p>
                    <p><input type="radio" name="<?php echo $row['Ans3Name'] ?>" /><?php echo $row['Ans3'] ?></p>
                    <p><input type="radio" name="<?php echo $row['CorrectAnsName'] ?>" /><?php echo $row['CorrectAns'] ?></p>
                </div>
            <?php }?>

UPDATE

我已经进一步深入了解正在检查分数的部分

我的问题是如何检查是否填写了所有字段,因为我正在使用此代码

<form action="quiz_submitted.php" method="POST">
            <?php $keys = array('Ans1','Ans2','Ans3','CorrectAns');
                    while ($row = $result->fetch_assoc()) 
                    {
                        shuffle($keys);
                        printf('<div class="questions">');
                        printf('<p>%s</p>', $row['Question']);
                            foreach ($keys as $k) 
                            {
                                printf('<p><input type="radio" name="%s" value="%s" />%s</p>', $row['QuesName'], $row[$k.'Value'], $row[$k]);
                            }
                         printf('</div>');
                    }
            ?>
            <input type="submit" name="quiz" value="Get Score!" style="margin-left: 475px;" />
            </form>

我如何定位$ _POST数组中的名称? 我试过用

if(isset($_POST['quiz'])) {
    if(!isset($_POST[$row['QuesName']])) {
        die('Please answer all questions');
    }
}

但它每次都会杀死页面。

不确定我的问题是否正确。 也许你可以在你的.questions div之前把答案放到一个数组中,然后通过array_rand对它进行随机排序,并使用currentnext函数动态地访问你随机排序的数组。

参考http://php.net/manual/en/function.array-rand.phphttp://php.net/manual/en/function.next.php

您应该考虑一下您的数据库模型,您可以添加一个参考表,您可以在其中存储所有答案并使用标记正确答案。

拥有像现在这样的数据库模型,你只能使用x问答每个问题(就像你的列一样多)。

但是对于这个现有的DB模型,我建议像这样解决问题(shuffle混合数组):

$sql = 'SELECT * FROM quizquestions ORDER BY rand() LIMIT 5';
$result = $db->query($sql);
$keys = array(
    'Ans1',
    'Ans2',
    'Ans3',
    'CorrectAns'
);
while ($row = $result->fetch_assoc()) {
    shuffle($keys);
    printf('<div class="questions">');
    printf('<p>%s</p>', $row['Question']);
    foreach ($keys as $k) {
        printf('<p><input type="radio" name="%s" />%s</p>', $row[$k.'Name'], $row[$k]);
    }
    printf('</div>');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM