1

I know the problem, But I cannot seem to fix it, and I was hoping someone on here could steer me in the right direction, What I want to do is check to see if a user has already submitted a correct answer to a question before checking it against the answers database and inserting it into the database, Simply to stop the same question being answered multiple times, I am a rookie with MYSQLi and not great at it, still learning it.

What I currently have so far is :

$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>";
}

I have tested it most ways, What I need to do is run a check to see if the current logged in user has already answered the questionID correctly, I am using a num_rows to see if its greater than 0, If it is greater than 0, they have answered it.

So my question is, Am I approaching it correctly, and what approach should I take?

Keiththolt
  • 57
  • 8

3 Answers3

1

It's a good approach. Try using

$row_cnt = $result->num_rows;

rather than

$row_cnt = mysqli_numrows($result);

also don't forget that $row_cnt will equal -1 in the event of any form of query error so you should check for that before assuming all values that arn't 0 are valid.

GAMITG
  • 3,810
  • 7
  • 32
  • 51
PC3TJ
  • 852
  • 5
  • 16
  • Thank you for answering, I have tried this and set the counter to <= 0, but my problem now is that it seems to be stalling, when I set the counter = 0, I get the end of the statement (After the else, where it says you already answered the question), when I set it to anything else, the web page shows blank – Keiththolt Oct 21 '15 at 15:16
  • I also se in the code you have if $row_cnt = when proper syntax would be == as you need the comparative operator not the assignment operator. – PC3TJ Oct 21 '15 at 19:23
  • try setting error_reporting(E_ALL); at the beginning of the code and see if you are getting any syntax errors – PC3TJ Oct 21 '15 at 19:25
0

I would suggest you to see natural language processing (NLP) techniques. If your answer is uni-gram (one word). This approach is ok. If you are dealing with n-grams of size more than 1,ie long sentences or paragraphs Then your approach will not work well. Answers can be written in different ways. So i would suggest some semantic methods like LSA(Latent Semantic Analysis) or simple vector representation models.

I can't think of any other methods to solve this problem.Try NLP methods. Will give you awesome results.

Thomas N T
  • 459
  • 1
  • 3
  • 14
  • Thomas, I believe her question is simply reffering to how to check if this user has submitted an answer to the question not how to check if the answer given is correct. Looking briefly at her code it appears it is likely multiple choice. – PC3TJ Oct 21 '15 at 04:36
  • Hi Thomas, Thank you for taking the time to respond, I have already done a comparison if the user answer is equal to the answer in the database, My problem at the moment is I am trying to see if the current user has a submission in the submissions table that equals the users ID and the question ID, If they have, it would mean they have answered the question and it cannot be answered again. – Keiththolt Oct 21 '15 at 15:14
0

I took a different approach to trying to get it to work and finally got it working, Just wanted to post my solution and thank everyone for helping.

<?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>
Keiththolt
  • 57
  • 8