mysql — проверка PHP, если форма уже отправлена ​​с использованием num строк

Я знаю проблему, но, похоже, не могу ее решить, и я надеялся, что кто-то здесь сможет направить меня в правильном направлении. Что я хочу сделать, так это проверить, не передал ли пользователь правильный ответ на вопрос раньше проверяя его по базе данных ответов и вставляя его в базу данных, просто чтобы не дать ответить на один и тот же вопрос несколько раз, я новичок в MYSQLi и не силен в этом, все еще изучаю его.

На данный момент у меня есть:

$mysqli = new mysqli($host,$username,$password,$database);

if($mysqli -> connect_error)die($mysqli->connect_error);

$questionID = $_POST['id'];
$userAnswer = $_POST['answer'];
$userAnswer = strtolower(trim($userAnswer));
$questionValue = $_POST['qValue'];

$teamName = $_SESSION['user_email'];
$user_id = "SELECT t.teamID,t.questionGroupID FROM team as t WHERE t.teamName ='$teamName'";


$result2 = $mysqli->query($user_id);

if ($result2->num_rows > 0) {
// output data of each row
while($row = $result2->fetch_assoc()) {

$userID = $row["teamID"];
}
}


$query = "SELECT answers FROM answers WHERE questionID=?";
$statement = $mysqli->prepare($query);
$statement ->bind_param('i', $questionID);
$statement->execute();
$statement->bind_result($answer);


//checking the database to see if the current question is there from the current user/teamName
if ($result = mysqli_query($mysqli, "SELECT * FROM submissions where teamID='$teamName' and questionID='$questionID'")) {

/* determine number of rows result set */
$row_cnt = mysqli_num_rows($result);


/* close result set */
mysqli_free_result($result);
}


/* close connection */
mysqli_close($mysqli);


//checking to see if it returns a result
if(($row_cnt)= 0){
while ($statement->fetch()) {
if ($answer != $userAnswer) {
echo '<br><br><div class="alert alert-danger"><h5>
<strong>Sorry!</strong> the answer is incorrect! Please Try again!.</h5>
</div>';

"<h3>Sorry the answer is incorrect! Please Try again!</h3><br>";
//return to previous Page
echo '<a href="./question.php?id=' . $questionID . '" class="btn btn-primary btn-block">Return to Question </a>';
$statement->free_result();
$sql = "INSERT INTO `submissions`(`submissionsID`, `teamID`, `questionID`, `answer`,`qValue`,`status`,`timestamp`) VALUES (null,'$teamName','$questionID','$userAnswer','0','Wrong',NOW())";

if (mysqli_query($mysqli, $sql)) {

} else {
echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);
}


} else {


echo '<br><br><div class="alert alert-success"><h5>
<strong>Success!</strong> Correct Answer, Good Luck with the Next </h5>
</div>';
echo "<a href='questionList.php' class='btn btn-success btn-block'>Continue with other questions! </a>";

$statement->free_result();

//MySqli Insert Query

$sql = "INSERT INTO `submissions`(`submissionsID`, `teamID`, `questionID`, `answer`,`qValue`,`status`,`timestamp`) VALUES (null,'$teamName','$questionID','$userAnswer','$questionValue','Correct',NOW())";

if (mysqli_query($mysqli, $sql)) {

} else {
echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);
}


}

}
}else{
echo '<br><br><div class="alert alert-warning"><h5>
<strong>Already Answered!</strong> Good Luck with the Next </h5>
</div>';
echo "<a href='questionList.php' class='btn btn-warning btn-block'>Continue with other questions! </a>";
}

Я проверил это большинством способов. Что мне нужно сделать, так это запустить проверку, чтобы убедиться, что текущий вошедший в систему пользователь уже правильно ответил на вопрос. Я использую num_rows, чтобы определить, больше ли это 0, Если оно больше 0 , они ответили на это.

Итак, мой вопрос: правильно ли я к нему подхожу, и какой подход мне выбрать?

1

Решение

Это хороший подход. Попробуйте использовать

$row_cnt = $result->num_rows;

скорее, чем

$row_cnt = mysqli_numrows($result);

также не забывайте, что $row_cnt будет равно -1 в случае любой формы ошибки запроса, поэтому вы должны проверить это, прежде чем предположить, что все значения, которые не равны 0, являются действительными.

1

Другие решения

Я бы предложил вам посмотреть обработка естественного языка (НЛП) техники. Если ваш ответ униграмм (одно слово). Этот подход в порядке. Если вы имеете дело с n-граммами размером более 1, то есть с длинными предложениями или абзацами, тогда ваш подход не будет работать хорошо. Ответы могут быть написаны по-разному. Поэтому я хотел бы предложить некоторые семантические методы, такие как LSA(Скрытый семантический анализ) или простой модели векторного представления.

Я не могу придумать какие-либо другие методы для решения этой проблемы. Попробуйте NLP методы. Даст вам потрясающие результаты.

0

Я использовал другой подход, пытаясь заставить его работать и, наконец, получил его. Просто хотел опубликовать свое решение и поблагодарить всех за помощь.

<?php session_start(); ?>
<!DOCTYPE html>
<html lang="en">

<head>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">


<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">

<!-- Custom CSS -->
<link href="css/modern-business.css" rel="stylesheet">

<!-- Custom Fonts -->
<link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">

<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->

<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

</head>

<body>

<!-- Navigation -->
<?php include_once('navigation.php');

// establishing the MySQLi connection

require_once('connection-test.php');
$mysqli = new mysqli($host,$username,$password,$database);

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$questionID = $_POST['id'];
$userAnswer = $_POST['answer'];
$userAnswer = strtolower(trim($userAnswer));
$questionValue = $_POST['qValue'];

$teamName = $_SESSION['user_email'];
$user_id = "SELECT t.teamID,t.questionGroupID FROM team as t WHERE t.teamName ='$teamName'";


$result2 = $mysqli->query($user_id);

if ($result2->num_rows > 0) {
// output data of each row
while($row = $result2->fetch_assoc()) {

$userID = $row["teamID"];
}
}



$query = "SELECT answers FROM answers WHERE questionID=?";
$statement = $mysqli->prepare($query);
$statement ->bind_param('i', $questionID);

$statement->execute();

$statement->bind_result($answer);

$statement->store_result();


?>

<div class="container">

<!-- Page Content -->

<hr>
<?php
if ($result4 = $mysqli->query("SELECT * FROM submissions where teamID='$teamName' and questionID='$questionID'"))
{
// display records if there are records to display
if ($result4->num_rows > 0)

{
echo '<br><br><div class="alert alert-warning"><h5>
<strong>Already Answered!</strong> Good Luck with the Next </h5>
</div>';
echo "<a href='questionList.php' class='btn btn-warning btn-block'>Continue with other questions! </a>";

}
// if there are no records in the database, display an alert message
else
{
while ($statement->fetch()) {
if ($answer != $userAnswer) {
echo '<br><br><div class="alert alert-danger"><h5>
<strong>Sorry!</strong> the answer is incorrect! Please Try again!.</h5>
</div>';

"<h3>Sorry the answer is incorrect! Please Try again!</h3><br>";
//return to previous Page
echo '<a href="./question.php?id=' . $questionID . '" class="btn btn-primary btn-block">Return to Question </a>';
$statement->free_result();
$sql = "INSERT INTO `submissions`(`submissionsID`, `teamID`, `questionID`, `answer`,`qValue`,`status`,`timestamp`) VALUES (null,'$teamName','$questionID','$userAnswer','0','Wrong',NOW())";

if (mysqli_query($mysqli, $sql)) {

} else {
echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);
}


} else {


echo '<br><br><div class="alert alert-success"><h5>
<strong>Success!</strong> Correct Answer, Good Luck with the Next </h5>
</div>';
echo "<a href='questionList.php' class='btn btn-success btn-block'>Continue with other questions! </a>";

$statement->free_result();

//MySqli Insert Query

$sql = "INSERT INTO `submissions`(`submissionsID`, `teamID`, `questionID`, `answer`,`qValue`,`status`,`timestamp`) VALUES (null,'$teamName','$questionID','$userAnswer','$questionValue','Correct',NOW())";

if (mysqli_query($mysqli, $sql)) {

} else {
echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);
}


}

}

}
}
// show an error if there is an issue with the database query
else
{
echo "<strong>Error:</strong>" . $mysqli->error;
}


?>
<?php include_once('footer.php'); ?>

</div>
<!-- /.container -->

<!-- jQuery -->
<script src="js/jquery.js"></script>

<!-- Bootstrap Core JavaScript -->
<script src="js/bootstrap.min.js"></script>

</body>

</html>
0
По вопросам рекламы [email protected]