Link to home
Start Free TrialLog in
Avatar of Peter Kroman
Peter KromanFlag for Denmark

asked on

Why do I get a mysqli_fetch_array() error

HI,

I am working on a project where I get an error I don't understand.
The error is this:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/kroweb.dk/public_html/ourdev/demo/classes/Post.php on line 42
and I put in the Post.php file here below.
You can see the page here: https://kroweb.dk/ourdev/demo/index.php

I hope that somebody can help me to fix this :)

	
<?php
  class Post { //ændret fra class User
    private $user_obj; //ændret fra class User
    private $con;

    public function __construct($con, $user) {
      $this->con = $con;
      $this->user_obj = new User($con, $user); //ændret fra class User
    }

    public function submitPost($body, $user_to) { //ændret fra class User - ALT HERFRA OG NED
      $body = strip_tags($body); // fjerner HTML tags
      $body = mysqli_real_escape_string($this->con, $body); //fjerner enkelt '' fra $body, således at det ikke skaber problemer i en sql query
      $check_empty = preg_replace('/\s+/', '', $body); //Fjerner alle mellemrum i $body (fordi man ikke skal kunne lave en post med mellemrum alene)

        if($check_empty != "") { //hvis der er indhold i $check_empty - som er er $body uden mellemrum

          $date_added = date("Y-m-d H:i:s"); //aktuel dato og tid variabel
          $added_by = $this->user_obj->getUsername(); // brugernavn variabel
            if($user_to == $added_by) {
              $user_to = "none"; //hvis der laves en post fra egen profil til egen profil angives det ikke hvilken bruger den kommer fra (Slå op knappen på index siden)
            }

            $query = mysqli_query($this->con, "INSERT INTO posts VALUES('', '$body', '$added_by', '$user_to', '$date_added', 'Nej', 'Nej', '0' )");
            $returned_id = mysqli_insert_id($this->con);

            // indsætter notifikation

            $num_posts = $this->user_obj->getNumPosts(); //opdaterer antallet af poster for brugeren
            $num_posts++; //øger antallet ef poster med en
            $update_query = mysqli_query($this->con, "UPDATE users SET num_posts='num_posts WHERE username ='$added_by");

        }

    }

    public function loadPostsFriends() {
    $str = ""; //tekst streng vi kan returnere - lige nu er den tom
    $data = mysqli_query($this->con, "SELECT posts WHERE deleted ='Nej' ORDER BY id DESC");

        while($row = mysqli_fetch_array($data)) { //laver variabler ud fra data hentet via queryen
          $id = $row['id'];
          $body = $row['body'];
          $added_by = $row['added_by'];
          $date_time = $row['date_added'];

          if($row['user_to'] == "none") { //hvis posten er lavet fra index siden
            $user_to = "";
          } else {
            $user_to_obj = new User($con, $row['user_to']); // laver et objekt med brugernavnet på den bruger der postes til
            $user_to_name = $user_to_obj->getFirstAndLastName(); //henter for- og efternavn på denne bruger
            $user_to = "to <a href ='" . $row['user_to'] . "'>" . $user_to_name . "</a>"; // laver et linkk til denne bruger og viser for- og efternavn på samme
          }

          //Checker om brugeren der poster har fået sin konto lukket
          $added_by_obj = new User($this->con, $added_by);
          if($aded_by_obj->isClosed()) {
          	continue;
          }
          $user_details_query = mysqli_query($this->con, "SELECT first_name, last_name, profile_pic FROM users WHERE username='$added_by'");
          $user_row = mysqli_fetch_array($user_details_query);
          $first_name = $user_row['first_name'];
          $last_name = $user_row['last_name'];
          $profile_pic = $user_row['profile_pic'];

          //Timeframe
          $date_time_now = date("Y-m-d H:i:s");
          $start_date = new DateTime($date_time); //Tiden der bliver postet
          $end_date = new DateTime($date_time_now); //Aktuel tid
          $interval =$start_date->diff($end_date);// Difference mellem de to datoer
          if($interval->y<=1) {
          	if($interval == 1)
          		$time_message = $interval->y ." år siden"; //returnerer "1 år siden"
          	else
          		$time_message = $interval->y ." år siden"; //returnerer "1+ år siden"
          }
          else if ($interval-> m >= 1) {
          	if($interval->d == 0) {
          		$days = " ago";
          	}
          	else if($interval->d == 1) {
          		$days = $interval->d . " dag siden";
          	}
          	else {
          		$days = $interval->d . " dage siden";
          	}
          	if ($interval->m == 1) {
          		$time_message = $interval->m . " måned" . $days;
          	}
          	else {
          		$time_message = $interval->m . " måneder" . $days;
          	}
          }
          else if ($interval->d >=1) {
          	if($interval->d == 1) {
          		$time_message = "I går";
          	}
          	else {
          		$time_message = $interval->d . " dage siden";
          	}
          }
          else if($interval->h >= 1) {
          	if($interval->h == 1) {
          		$time_message = $interval->h . " time siden";
          	}
          	else {
          		$time_message = $interval->h . " timer siden";
          	}
          }
          else if($interval->i >= 1) {
          	if($interval->i == 1) {
          		$time_message = $interval->i . " minut siden";
          	}
          	else {
          		$time_message = $interval->i . " minutter siden";
          	}
          }
          else {
          	if($interval->s < 30) {
          		$time_message = "Lige nu";
          	}
          	else {
          		$time_message = $interval->s . " sekunder siden";
          	}
          }

          $str .= "<div class='status_post'>
					<div class='post_profile_pic'>
						img src='$profile_pic' width='50'>
					</div>

					<div class='posted_by' style ='color: #acacac;'>
						<a href ='$added_by'> $first_name $last_name </a> $user_to &nbsp;&nbsp;&nbsp;&nbsp;
							$time_message
					</div>
					<div id='post_body'>
						$body
						<br>
					</div>


				</div>";

        }

        echo $str;
    }


  }


 ?>

Open in new window

Avatar of gr8gonzo
gr8gonzo
Flag of United States of America image

This is because your query failed. See my notes in the article below (just search for "boolean given"):

https://www.experts-exchange.com/articles/32160/How-to-Fix-Just-About-Every-Common-PHP-Error.html

Basically, your query failed, so instead of mysqli_query() returning a valid result set object, it returned false (a boolean). Then you tried to fetch a row from the result first before checking to see if the query was successful.

Check the mysqli_error() for what went wrong with your query.
ASKER CERTIFIED SOLUTION
Avatar of Julian Hansen
Julian Hansen
Flag of South Africa image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Peter Kroman

ASKER

Thanks Julian,

That helped. I have looked at that query line one million times - but I just did not recognize that the FROM statement was missing in there :)
We all need a rubber duck from time to time
We all need a rubber duck from time to time

Classic! I was explaining Rubber Duck Debugging to someone the other day and they thought I was mad :)