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

时间:2014-07-27 07:24:25

标签: php mysqli

我在数据库中的选项总共有10个问题,如下所示:  id question 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>

2 个答案:

答案 0 :(得分:0)

因此,您当前的代码实际上遍历了数据库中的所有问题,每次重复分配您的问题和选项。然后,在最后一次,使用这些变量来制作表格。

在你的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>

希望这能让你走上正轨。

答案 1 :(得分:0)

我们可以自己处理它,而不是打扰数据库结果随机化。我们可以采用一维问题(让q_list [])和另一个多维数组,如q_arr [&#39; question&#39; ] [&#39; id&#39; ],q_arr [&#39;问题&#39; ] [&#39; option1&#39; ],q_arr [&#39;问题&#39; ] [&#39; option2&#39; ],q_arr [&#39;问题&#39; ] [&#39; option3&#39; ]。这是:

// 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

现在,shuffle&#34; q_list&#34;数组,只需打印如下:

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++;
}