0

我关于这个的最后一个问题建议我将 AJAX 与 PHP 结合起来。但是,我真的很想专门为这个项目尝试 PHP,而且我似乎已经完成了大约 95%。我只需要在这一问题上的帮助。

这是一个快速的背景。我的项目需要一个动态表单来填充最多 10 个问题。每个表单包含一个问题、一个问题编号和一个文本字段。学生会继续回答问题。这一切都是由数据库表驱动的(显然),当一个问题得到正确回答时,它将关闭并出现下一个问题。页面上总会有 10 个问题。这是编码的外观,它完美地工作。

<? 
$rt = mysql_query("SELECT * FROM The_Questions WHERE Status='Open' ORDER BY 'Number' LIMIT 10");
while ($row = mysql_fetch_array($rt)) {
$number=$row[0]; 
$category = $row[1];
$question=$row[2];
$points=$row[4];
$_SESSION['number'] = $number; 
?>

<form action="processor.php" method="post" class="qForm">
<div class="questionCell">
<div class="question"><? echo $number; echo $question ?></div>
<div class="answer">Answer: <input class="inputField" name="q1" type="text" size="40" maxlength="40" />
<input name="HHQuestion" value="Submit" type="submit" /></div>
</div>
</form>
<? 
} 
?>

这些问题按照正确的顺序和正确的限制出现。在问题得到回答并通过 processor.php 操作进行处理之前,一切似乎都很好。首先是 processor.php 文件的代码:

<?php
session_start();
if(isset($_POST["HHQuestion"])){
$dbhost = 'localhost';
$dbname = 'localhost';
$dbuser = 'localhost';
$dbpass = 'localhost'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $conn);
{
$number1 = $_SESSION['number'];
$answer=$_POST['q1'];
$sql="SELECT * FROM The_Questions WHERE Number='$number1'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$question = $row[2];
echo $question .'<br>';
echo $number1.'<br>';
echo $answer;
}
}
?>

这还没有上线,出于测试目的,我正在重复问题、问题编号和答案(如您所见)。发生的事情是 $question 和 $number1 显示数组中的最后一个问题($answer 显示正确,这意味着它显示了以动态形式编写的任何内容)。

谁能告诉我这是为什么?如果我将 LIMIT 数字更改为 20,则 processor.php 操作将显示第 20 个问题和数字,即使我正在回答问题 8,例如以动态形式。同样,动态表单正在正确显示,并且编号正确。出于某种我不知道的原因,操作 - processor.php - 正在抓取数组中的最后一个问题。

关于我做错了什么的任何想法?我希望这是一个我忽略的简单代码更改。提前谢谢各位!

4

1 回答 1

1

请阅读SQL 注入。这是非常重要的

另外,请注意:

  1. mysql_select_db你后面的花括号是什么processor.php
  2. 你有session_start()其他文件还是只有processor.php
  3. 您正在覆盖您$_SESSION['number']while()循环,将放置在变量中的最后一个条目是您的最后一条记录,$rt = mysql_query("SELECT * FROM The_Questions WHERE Status='Open' ORDER BY 'Number' LIMIT 10");因此,当您将限制更改为 20 时,它包含第 20 个问题是合乎逻辑的。

你可以做什么:

  1. 将此添加到您的<form>并停止使用$_SESSION

    <input type="hidden" name="num" value="<?php echo $number; ?>" />

  2. 然后,在您的循环中,更改$number1 = $_SESSION['number'];为:

    $number1 = $_POST['num'];

  3. 尽量不要与您使用的变量名称混淆。您用于$q1答案,并且您正在$number1用于项目编号。使用更具描述性的变量将在以后调试时为您提供帮助。

于 2012-10-14T03:44:48.613 回答