У меня есть база данных «Школа». У него только одна таблица — «Слова». В нем есть word_id, word_name, word_description. Я хочу вытащить случайное описание и отобразить его на странице. Затем я хочу ввести слово и посмотреть, имеет ли слово такое же описание, как случайное, которое было вытащено. Что я делаю неправильно? Вот код —
<!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 [‘word_description’]:
$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="..." />
в вашей форме, чтобы передать его.
Что было бы еще лучше, чтобы люди не знали ответ, глядя на код (в случае, если они будут знать, какое слово соответствует какому идентификатору), вы можете закодировать значение в скрытом поле, чтобы 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 должен содержать word_description И отправленное word_name.
РЕДАКТИРОВАТЬ 2:
Если вы хотите использовать идентификатор, вам сначала нужно добавить его в свой запрос 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)
чтобы проверить, действительно ли клиент отправил что-то.