我正在创建一项调查,询问用户问题,以便根据他们的答案确定哪些专业最适合该用户。我想一次显示一个问题。用户应该能够按下一个按钮,数据库中存储的下一个问题将出现在屏幕上。现在我让我的代码工作到它显示数据库中的第一个问题,但我仍然需要让下一个按钮工作。我需要一种有效的方法来完成这项工作,因为我有60个问题存储在数据库中。任何帮助是极大的赞赏! 下面是我的调查目前的样子!
以下是我的代码!
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "Cherries7";
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$id = 1; //global variable that represents id
$sql = "SELECT questiontext FROM md WHERE ID= '$id'" ;
mysql_select_db('MajorDecider');
$retval = mysql_query( $sql, $conn );
$nr = mysql_num_rows($retval);
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
else if($nr == 0) {
echo "<h2>Question not found.</h2>";
}
//there should only be one question with specified id number
else if($nr == 1) {
$row = mysql_fetch_array($retval);
echo " <form method='POST'>
<section id='question'><table id='questions'>
<tr>
<td> {$row['questiontext']} </td>
<td> <input type='radio' name='choose' id='interested' value='true' /> Yes </td>
<td> <input type='radio' name='choose' id='uninterested' value='false' /> No </td>
<td> <button name='next'>Next</button> </td>
</tr>
</table></section></form> ";
}
答案 0 :(得分:1)
在表单中添加一个包含行ID的隐藏输入。
<input type='hidden' name='id' value='{$row['ID']}'>
然后,在执行查询之前,请检查$_POST
中的ID。如果那里有一个,请增加它并使用它。
$id = 1;
if (isset($_POST['id'])) {
$id = $_POST['id'] + 1;
}
您需要稍微修改一下您的查询,以便它也选择ID列。此外,如果您使用>=
代替>
,如果有任何遗失的ID,它仍然可以使用。
$sql = "SELECT ID, questiontext FROM md WHERE ID >= '$id' ORDER BY ID";
还有两件事,already mentioned in the comments,但重要的是重申。首先,您使用的是mysql
扩展,PHP不再支持该扩展。您需要更新代码才能使用mysqli
或PDO
。其次,当您在SQL中直接使用变量时(如WHERE ID >= '$id'
),您很容易受到SQL注入攻击。将您的值绑定到预准备语句将减少该漏洞。