如何在php中使用while循环显示一组问题



我总共有10个问题,在数据库中有这样的选项:Id问题option1 option2 option3

下面是我的代码,随机选择1个问题,并显示在网页上与它的选项。现在我想要五个随机问题应该一个接一个的形式显示在网页上与他们各自的选项。我该怎么做呢?

<?php
include_once("db_conx.php");
$sql="SELECT * FROM mymake ORDER BY RAND()";
$query=mysqli_query($db_conx,$sql);
$numrows = mysqli_num_rows($query);
if($numrows > 0){
        while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
                    $id = $row["id"];
                    $question = $row["question"];
                    $option1 = $row["option1"];
                    $option2 = $row["option2"];
                    $option3 = $row["option3"];
        }
}

?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
.ask {
    float: left;
    height: auto;
    width: 100%;
    margin-top: 10px;
}
input{
    background: transparent;
}
option{ color: #C03;
}
placeholder {color: #C03;}
</style>
</head>
<body>
<div class="ask">
<form>
<input type="text" name="q1" placeholder="<?php echo $question;?>"  size="82">
<select>
<option value="<?php echo $option1; ?>"><?php echo $option1; ?></option>
<option value="<?php echo $option2; ?>"><?php echo $option2; ?></option>
<option value="<?php echo $option3; ?>"><?php echo $option3; ?></option>
</select>
</form>
</div>
</body>
</html>

所以当前的代码实际上遍历数据库中的所有问题,每次遍历时重新分配问题和选项。然后,在最后一次执行时,使用这些变量创建一个表单。

在while循环中,可以设置变量$question, $option等。数组,然后在代码中循环5次。

我做了一个快速改变你的代码只是循环通过你现有的查询,但输出HTML代码,而不是重新分配你的变量。

<?php
include_once("db_conx.php");
$sql = "SELECT * FROM mymake ORDER BY RAND()";
$query = mysqli_query($db_conx,$sql);
$numrows = mysqli_num_rows($query);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
.ask {
    float: left;
    height: auto;
    width: 100%;
    margin-top: 10px;
}
input { background: transparent; }
option { color: #C03; }
placeholder { color: #C03; }
</style>
</head>
<body>
<div class="ask">
<form>
<?php
if ($numrows > 0){
  while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
?>
    <input type="text" name="q<?php echo $row["id"];?>" placeholder="<?php echo $row["question"];?>"  size="82">
    <select>
      <option value="<?php echo $row["option1"]; ?>"><?php echo $row["option1"]; ?></option>
      <option value="<?php echo $row["option2"]; ?>"><?php echo $row["option2"]; ?></option>
      <option value="<?php echo $row["option3"]; ?>"><?php echo $row["option3"]; ?></option>
    </select>;
<?php
  }
}
?>
</form>
</div>
</body>
</html>

我们可以自己处理它,而不是麻烦数据库结果随机化。我们可以取问题的一维数组(let q_list[])和另一个多维数组,如q_arr['question']['id'], q_arr['question']['option1'], q_arr['question']['option2'], q_arr['question']['option3']。

// declare arrays
q_list = array();
q_arr = arrar( q_list );
// fetch results
$i = 0;
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
    q_list[ $i++ ] = $row[ "question" ];
    q_arr[ $row["question"] ][ 'id' ] = $row[ 'id' ];
    q_arr[ $row["question"] ][ 'option1' ] = $row[ 'option1' ];
    q_arr[ $row["question"] ][ 'option2' ] = $row[ 'option2' ];
    q_arr[ $row["question"] ][ 'option3' ] = $row[ 'option3' ];
}

这里我们使用shuffle函数比较简单。它随机洗牌数组的所有值。ref: Php Shuffle Function

现在,打乱"q_list"数组,打印如下:

shuffle( q_list );
$i = 0;
while( $i < 5 ){
    echo "Question: " . $q_list[ $i ] ];
    echo "ID: "      . q_arr[ $q_list[ $i ] ][ 'id' ];
    echo "Option1: " . q_arr[ $q_list[ $i ] ][ 'option1' ];
    echo "Option2: " . q_arr[ $q_list[ $i ] ][ 'option2' ];
    echo "Option3: " . q_arr[ $q_list[ $i ] ][ 'option3' ];
    $i++;
}

最新更新