Php 之后在select语句中使用MySQL随机行

Php 之后在select语句中使用MySQL随机行,php,mysql,random,comparison,row,Php,Mysql,Random,Comparison,Row,我有一个数据库“学校”。它只有一个表——“单词”。里面有单词id,单词名称,单词描述。我想随机抽取一个描述并显示在页面上。然后我想输入一个单词,看看这个单词是否与随机抽取的单词具有相同的描述。我做错了什么?这是代码- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Изпит</title> &l

我有一个数据库“学校”。它只有一个表——“单词”。里面有单词id,单词名称,单词描述。我想随机抽取一个描述并显示在页面上。然后我想输入一个单词,看看这个单词是否与随机抽取的单词具有相同的描述。我做错了什么?这是代码-

    <!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) 在您的查询中,$\u POST['word\u description']中有一个输入错误:

$q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'";
2) 此外,我建议使用单词_id而不是单词description来进行验证。。。您需要在表单中的
中编写它来传递它。 更好的办法是,为了防止人们通过查看代码来知道答案(以防他们知道哪个单词与哪个id匹配),可以将隐藏字段中的值编码为
md5($word\u id.$word\u name)
,然后在查询中检查
“其中md5(CONCAT(word\u id,word\u name))=”“$\u POST['word\u 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>
然后需要将其设置为某个变量,然后在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>
注意:在代码中更改$\u POST数组是一种不好的做法

此数组由客户端发送的请求填充,如果更改其中的值,可能会导致混乱。 最好创建另一个变量并将其设置为$\u POST中的值(例如:
$word\u description=$\u POST['word\u description'];


这样,您仍然可以使用
array\u key\u exists('word\u description',$\u POST)
以验证客户端是否确实发送了内容。

没有语法错误,至少在您所比较的内容中没有语法错误。您是正确的,我将其命名为错误的。我仍然认为他试图从words表中找到$word\u name变量,而不是单词“$word\u name”看起来更像是一个打字错误。请参阅OP问题下的注释。那么我如何检查如果单词_name等于数据库中的描述?请告诉我,如果您不理解我,我会更好地解释。@Гччч.Счччччччччччччччч109就在你打开
word_decsription
!=
word_description
^^^之后,如果OP正在使用它,DB端的错误报告和检查会发现一个很好的陷阱。我知道这对你的要求没有任何帮助,但尝试使用PDO而不是MySQLi。从长远来看,你会从中受益d与它一起工作要容易得多!好吧,我现在感觉糟透了。我对PHP和编程还不熟悉,真的没有人可以问。我只想看看我是否为明天的考试学习了英语单词。随机获取描述并写下单词。如果正确,很好,如果不正确..我会看到的。每当我键入单词名称时,它都会说这不是下面描述的那个。我不知道如何用单词_id来做。我甚至不知道有一个隐藏类型的输入…你能告诉我怎么做吗?
$q = mysqli_query($connection, ' SELECT word_id, word_description
FROM words ORDER BY rand() LIMIT 1
');
<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>
$q2="SELECT * FROM words WHERE word_name='$word_name' and word_id='".$_POST['word_id']."'";