Peter Kroman
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/ourde v/demo/cla sses/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 :)
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_
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
$time_message
</div>
<div id='post_body'>
$body
<br>
</div>
</div>";
}
echo $str;
}
}
?>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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 :)
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 :)
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.