Skip to content
View in the app

A better way to browse. Learn more.

Web Designer Forum

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp

Featured Replies

Hey people, I'm just having some trouble with this multichoice that I have been working on.

 

I'm using XAMP at the moment before I put my website onto my webserver (heart internet).

 

When I run the quiz I'm getting the following error message

 

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp

 

I know it has got something to do with the sql query but I just dont know what is going on! I want to bang my head against a brick wall.

 

Here is the code

<?php
//Connect with mysql
$db = new mysqli("127.0.0.1", "root", "", "quiz");

//Perform the query to choose random questions
$query = $db->query("SELECT * FROM `table` ORDER BY RAND() LIMIT 20");

while ($row = $query->fetch_assoc()):
    $question = $row['question'];
    echo $question . "<br />";
endwhile;

//close result
$query->close();
//Close connection
$db->close();

session_start();
if (isset($_GET['question'])) {
    $question = preg_replace('/[^0-9]/', "", $_GET['question']);
    $next     = $question + 1;
    $prev     = $question - 1;
} // <--- I added this brace. You need to double-check it logically belongs here
if (!isset($_SESSION['qid_array']) && $question != 1) {
    $msg = "Sorry! No cheating.";
    header("location: start.php?msg=$msg");
    exit();
}
if (isset($_SESSION['qid_array']) && in_array($question, $_SESSION['qid_array'])) {
    $msg = "Sorry, Cheating is not allowed. You will now have to start over. Haha.";
    unset($_SESSION['answer_array']);
    unset($_SESSION['qid_array']);
    session_destroy();
    header("location: start.php?msg=$msg");
    exit();
}
if (isset($_SESSION['lastQuestion']) && $_SESSION['lastQuestion'] != $prev) {
    $msg = "Sorry, Cheating is not allowed. You will now have to start over. Haha.";
    unset($_SESSION['answer_array']);
    unset($_SESSION['qid_array']);
    session_destroy();
    header("location: start.php?msg=$msg");
    exit();
}
?>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Quiz Page</title>

    <script type="text/javascript">
    function countDown(secs,elem) {
    var element = document.getElementById(elem);
    element.innerHTML = "You have "+secs+" seconds remaining.";
    if(secs < 1) {
    var xhr = new XMLHttpRequest();
    var url = "userAnswers.php";
    var vars = "radio=0"+"&qid="+<?php echo $question; ?>;
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 && xhr.status == 200) {
    alert("You did not answer the question in the allotted time. It will be marked as incorrect.");
    clearTimeout(timer);
    }
    }
    xhr.send(vars);
    document.getElementById('counter_status').innerHTML = "";
    document.getElementById('btnSpan').innerHTML = '<h2>Times Up!</h2>';
    document.getElementById('btnSpan').innerHTML += '<a href="quiz.php?question=<?php echo $next; ?>">Click here now</a>';
    }
    secs--;
    var timer = setTimeout('countDown('+secs+',"'+elem+'")',1000);
    }
 
    function getQuestion(){
    var hr = new XMLHttpRequest();
    hr.onreadystatechange = function(){
    if (hr.readyState==4 && hr.status==200){
    var response = hr.responseText.split("|");
    if(response[0] == "finished"){
    document.getElementById('status').innerHTML = response[1];
    }
    var nums = hr.responseText.split(",");
    document.getElementById('question').innerHTML = nums[0];
    document.getElementById('answers').innerHTML = nums[1];
    document.getElementById('answers').innerHTML += nums[2];
    }
    }
    hr.open("GET", "questions.php?question=" + <?php echo $question; ?>, true);
    hr.send();
    }
    function x() {
    var rads = document.getElementsByName("rads");
    for ( var i = 0; i < rads.length; i++ ) {
    if ( rads[i].checked ){
    var val = rads[i].value;
    return val;
    }
    }
    }
    function post_answer(){
    var p = new XMLHttpRequest();
    var id = document.getElementById('qid').value;
    var url = "userAnswers.php";
    var vars = "qid="+id+"&radio="+x();
    p.open("POST", url, true);
    p.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    p.onreadystatechange = function() {
    if(p.readyState == 4 && p.status == 200) {
    document.getElementById("status").innerHTML = '';
    alert("Thanks, Your answer was submitted"+ p.responseText);
    var url = 'quiz.php?question=<?php echo $next; 
	
	?>';
	
    window.location = url;
    }
    }
    p.send(vars);
    document.getElementById("status").innerHTML = "processing...";
    }
    window.oncontextmenu = function(){
    return false;
    }
    </script>


    </head>
     
    <body onLoad="getQuestion()">
    <div id="status">
    <div id="counter_status"></div>
    <div id="question"></div>
    <div id="answers"></div>
    </div>
     
     
    </script>
    </body>
    </html> 

Any help would really be appreciated

 

RIch

  • Author

Have you tried copying the query into a piece of MySQL software like HeidiSQL or Sequel Pro?

no i haven't i will have to give it a go

 

not yet going to have a look at it later, I have been xmas shopping all day

Have you made sure your mysqli connection details are correct? check your connection by doing

if(!$db)
{
die("Connection failed");
}

if the page shows Connection Failed you know your problem is connecting to mysql

You're correct in thinking it is the query; there's no data being returned to the query variable; could you post your database structure? I'd like to recreate it myself and test a few things,

 

thanks,

  • Guest locked this topic
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.