如何使用php和mysql一次从数据库中拉出一行

时间:2017-03-24 19:08:45

标签: php mysql database

我正在创建一项调查,询问用户问题,以便根据他们的答案确定哪些专业最适合该用户。我想一次显示一个问题。用户应该能够按下一个按钮,数据库中存储的下一个问题将出现在屏幕上。现在我让我的代码工作到它显示数据库中的第一个问题,但我仍然需要让下一个按钮工作。我需要一种有效的方法来完成这项工作,因为我有60个问题存储在数据库中。任何帮助是极大的赞赏! 下面是我的调查目前的样子!

Survey Link

以下是我的代码!

$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> ";
}

1 个答案:

答案 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不再支持该扩展。您需要更新代码才能使用mysqliPDO。其次,当您在SQL中直接使用变量时(如WHERE ID >= '$id'),您很容易受到SQL注入攻击。将您的值绑定到预准备语句将减少该漏洞。