我有一个数据库"学校"。它只有一张表——"单词"。其中有word_id、word_name、worddescription。我想提取一个随机描述并将其显示在页面上。然后我想输入一个单词,看看这个单词是否与随机抽取的单词有相同的描述。我做错了什么?这是代码-
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Изпит</title>
</head>
<body>
<?php
$connection = mysqli_connect('localhost', 'root', '', 'school');
if(!$connection){
echo 'NOT OK';
exit;
}
if(isset($_POST['submit_description'])){
$q = mysqli_query($connection, ' SELECT word_description
FROM words ORDER BY rand() LIMIT 1
');
$row=mysqli_fetch_assoc($q);
if($row){
$_POST['word_description'] = $row['word_description'];
echo $_POST['word_description'];
}
}
if(isset($_POST['submit_word'])){
$word_name = $_POST['word_name'];
$q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'";
$result=mysqli_query($connection, $q2);
$count=mysqli_num_rows($result);
if($count==1){
echo 'Позна ве.';
}else{
echo 'Не позна ве.';
}
}
?>
<br><br><br>
<form method="POST">
<input type="submit" name="submit_description" value="Искай описание.">
<input type="hidden" name="word_description" value="<?php echo $_POST['word_description']?>">
</form>
<form method="POST">
<input type="text" name="word_name">
<input type="submit" name="submit_word" value="Провери дума.">
</form>
</body>
</html>
我想你有一些打字错误。
这里的代码行:
$q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'";
应该是这样的:
$q2="SELECT * FROM words WHERE word_name='".$word_name."' and word_description='".$_POST['word_description']."'";
1)您的查询中$_POST['worddescription']中存在拼写错误:
$q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'";
2) 此外,我建议使用word_id而不是单词描述来进行验证。。。你需要把它写在表单中的<input name="word_id" type="hidden" value="..." />
中才能传递。更好的是,为了防止人们通过查看代码来知道答案(以防他们知道哪个单词与哪个id匹配),你可以将隐藏字段中的值编码为md5($word_id.$word_name)
,然后在查询中检查"WHERE MD5(CONCAT(word_id, word_name))='".$_POST['word_md5']."'"
(假设你的隐藏输入现在被称为"word_md5")。
编辑:看了HTML后,我发现你的问题是什么:
<form method="POST">
<input type="submit" name="submit_description" value="Искай описание.">
<input type="hidden" name="word_description" value="<?php echo $_POST['word_description']?>">
</form>
<form method="POST">
<input type="text" name="word_name">
<input type="submit" name="submit_word" value="Провери дума.">
</form>
这些都应该在同一个<form>
元素中:
<form method="POST">
The word description is: <?php echo $_POST['word_description']; ?>
<input type="hidden" name="word_description" value="<?php echo $_POST['word_description']?>">
<input type="text" name="word_name">
<input type="submit" name="submit_word" value="Провери дума.">
</form>
提交表单时,$_POST数组应包含提交的单词description和单词_name。
编辑2:如果您希望使用id,则必须首先将其添加到SELECT查询中:
$q = mysqli_query($connection, ' SELECT word_id, word_description
FROM words ORDER BY rand() LIMIT 1
');
然后你需要将它设置为某个变量,然后稍后在你的HTML:中
<form method="POST">
The word description is: <?php echo $_POST['word_description']; ?>
<input type="hidden" name="word_id" value="<?php echo $word_id?>">
<input type="text" name="word_name">
<input type="submit" name="submit_word" value="Провери дума.">
</form>
然后,您的第二个SQL查询应该如下所示:
$q2="SELECT * FROM words WHERE word_name='$word_name' and word_id='".$_POST['word_id']."'";
注意:在代码中更改$_POST数组是一种糟糕的做法。
这个数组由客户端发送的请求填充,如果您更改那里的值,事情可能会变得混乱。最好创建另一个变量并将其设置为$_POST中的值(例如:$word_description = $_POST['word_description'];
)。
这样,您仍然可以使用array_key_exists('word_description', $_POST)
来验证客户端是否真的发送了什么。