Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环外的PHP count变量不递增_Php_Mysql_Sql - Fatal编程技术网

while循环外的PHP count变量不递增

while循环外的PHP count变量不递增,php,mysql,sql,Php,Mysql,Sql,我想从问题表中随机选择几个问题。但是,当我使用while循环打印问题时,我想以升序回显计数器。但是计数器变量不是递增的。我不知道我错在哪里 <php $sql = "select id, questions, ans1, ans2, ans3, correctAns from questions Order By RAND() Limit 1"; $result = mysql_query($sql); $result2 = mysql_num_rows($result); for($x

我想从问题表中随机选择几个问题。但是,当我使用while循环打印问题时,我想以升序回显计数器。但是计数器变量不是递增的。我不知道我错在哪里

<php
$sql = "select id, questions, ans1, ans2, ans3, correctAns from questions Order By RAND() Limit 1";
$result = mysql_query($sql);
$result2 = mysql_num_rows($result);
for($x = 1; $x <= $result2; $x++)
{
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$quest = $row['questions'];
$a1 = $row['ans1'];
$a2 = $row['ans2'];
$a3 = $row['ans3'];
$correct = $row['correctAns'];

echo $x.'<br />';
echo $quest.<br />;
echo $a1.'<br />';
echo $a2.'<br />';
echo $a3.'<br />';
echo $correct.'<br />';
} //end while loop
} // end for loop
?>


计数器变量只是在整个循环中回显1作为值。

您不能将计数器放入第二个循环:

<?php
$sql = "select id, questions, ans1, ans2, ans3, correctAns from questions Order By RAND() Limit 1";
$result = mysql_query($sql); //ADDED
$x = 1; // ADDED
while($row = mysql_fetch_array($result)) // CHANGED
{
  $id = $row['id'];
  $quest = $row['questions'];
  $a1 = $row['ans1'];
  $a2 = $row['ans2'];
  $a3 = $row['ans3'];
  $correct = $row['correctAns'];

  echo $x.'<br />';
  echo $quest.<br />;
  echo $a1.'<br />';
  echo $a2.'<br />';
  echo $a3.'<br />';
  echo $correct.'<br />';
  x++; //ADDED
} //end while loop
?>

此外,必须在每个查询字符串中将查询重用结果传递给mysql\u fetch\u数组。

顺便说一句,mysql_*已被弃用。您应该使用mysqli_*或PDO。

这是因为在数据库获取中有一个循环,请将其合并为一个循环,然后尝试以下操作:

<?php
  $sql = "select id, questions, ans1, ans2, ans3, correctAns from questions Order By RAND()";
  $result = mysql_num_rows($sql);
  $x = 1; // Start the counter
  while($row = mysql_fetch_array($sql))
  {
      echo $x.'<br />'
          .$row['questions'].'<br />'
          .$row['ans1'].'<br />'
          .$row['ans2'].'<br />'
          .$row['ans3'].'<br />'
          .$row['correctAns'].'<br />';
      $x++;
  } //end while loop
?>


我想让你们都明白,我感谢你们为解决我提出的挑战所作的集体努力。然而,我已经解决了这个挑战。资料来源如下:

<?php
// Establish Connection with Database// Select Database
include_once( '../../Connections/QUIZ.php' );
// Specify the query to execute
仍然使用找到的记录数将计数器增加1

$x = $records + 1;
下面的选择查询确保学生回答特定问题的次数不超过1次

$sql2 = "SELECT questions.qid, questions.question,questions.ans1, 
questions.ans2, questions.ans3, questons.ans4, questions.correctAns
FROM questions WHERE NOT EXISTS(SELECT * FROM u_answer WHERE u_answer.qid = questions.qid AND u_answer.AS_Id = '" . $_SESSION[ 'appID' ] . "') ORDER BY RAND() LIMIT 1";   
$result2 = mysql_query( $sql2 );
此时在此处执行while循环

while ( $row = mysql_fetch_array( $result2 ) ) {
$id = $row['id'];
$quest = $row['questions'];
$a1 = $row['ans1'];
$a2 = $row['ans2'];
$a3 = $row['ans3'];
$correct = $row['correctAns'];
打印出提取的数据

echo $x.'<br />'; //the counter variable.
echo $quest.<br />;
echo $a1.'<br />';
echo $a2.'<br />';
echo $a3.'<br />';
echo $correct.'<br />';
}

这对我很有用。

这是因为您的while循环在获取所有行后结束。在所有的行都被取出来之后,$x就会增加。伙计们,我已经看过你们所有的建议了。但它们似乎不起作用。问题的关键是:我有100多个问题。每个问题随机抽取一个限制1。这意味着,我已经做了一个检查,任何问题都不应该重复。因此,每次选择问题时,计数器都需要读取不同的值。这就是问题所在。计数器继续打印常量值(1),而不是递增。同时,每次运行select语句时,我都需要递增计数器变量,而不是While()循环。谢谢。你为什么不在原来的问题中解释这些呢?对不起,我错了。我刚刚意识到这一直是个问题,而不是while循环。因为while循环是select查询行的唯一循环。我很抱歉。那么,我该如何解决这个问题呢?非常感谢。与其每次执行随机1行的查询,不如一次获取所有行,然后用php中的逻辑逐个显示它们。这将是有效的,因为您不必担心两次获取同一行,而且DB查询将如何保存?请注意,查询是随机选择的行。请问你是如何构造这个逻辑的?我现在想不出什么主意。非常感谢。伙计们,我已经看过你们所有的建议了。但它们似乎不起作用。问题的关键是:我有100多个问题。每个问题随机抽取一个限制1。这意味着,我已经做了一个检查,任何问题都不应该重复。因此,每次选择问题时,计数器都需要读取不同的值。这就是问题所在。计数器继续打印常量值(1),而不是递增。同时,每次运行select语句时,我都需要递增计数器变量,而不是While()循环。谢谢。但是在代码中,查询只执行一次(在第3行)。柜台应该在哪里更新?你看,我有一百多个问题。这就是为什么我决定使用for循环作为for(x=1;和xwhile ( $row = mysql_fetch_array( $result2 ) ) { $id = $row['id']; $quest = $row['questions']; $a1 = $row['ans1']; $a2 = $row['ans2']; $a3 = $row['ans3']; $correct = $row['correctAns'];
echo $x.'<br />'; //the counter variable.
echo $quest.<br />;
echo $a1.'<br />';
echo $a2.'<br />';
echo $a3.'<br />';
echo $correct.'<br />';
}
mysql_close($con);
?>