Я знаю проблему, но, похоже, не могу ее решить, и я надеялся, что кто-то здесь сможет направить меня в правильном направлении. Что я хочу сделать, так это проверить, не передал ли пользователь правильный ответ на вопрос раньше проверяя его по базе данных ответов и вставляя его в базу данных, просто чтобы не дать ответить на один и тот же вопрос несколько раз, я новичок в 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 , они ответили на это.
Итак, мой вопрос: правильно ли я к нему подхожу, и какой подход мне выбрать?
Это хороший подход. Попробуйте использовать
$row_cnt = $result->num_rows;
скорее, чем
$row_cnt = mysqli_numrows($result);
также не забывайте, что $row_cnt
будет равно -1 в случае любой формы ошибки запроса, поэтому вы должны проверить это, прежде чем предположить, что все значения, которые не равны 0, являются действительными.
Я бы предложил вам посмотреть обработка естественного языка (НЛП) техники. Если ваш ответ униграмм (одно слово). Этот подход в порядке. Если вы имеете дело с n-граммами размером более 1, то есть с длинными предложениями или абзацами, тогда ваш подход не будет работать хорошо. Ответы могут быть написаны по-разному. Поэтому я хотел бы предложить некоторые семантические методы, такие как LSA(Скрытый семантический анализ) или простой модели векторного представления.
Я не могу придумать какие-либо другие методы для решения этой проблемы. Попробуйте NLP методы. Даст вам потрясающие результаты.
Я использовал другой подход, пытаясь заставить его работать и, наконец, получил его. Просто хотел опубликовать свое решение и поблагодарить всех за помощь.
<?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>