• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Błąd w MySQL

VPS Starter Arubacloud
0 głosów
319 wizyt
pytanie zadane 15 listopada 2015 w PHP przez Radekoslaw123 Gaduła (3,080 p.)
zamknięte 15 listopada 2015 przez Radekoslaw123

Błąd w MySQL o treści:

Fatal error: Call to a member function fetch_assoc() on boolean in --- on line 12

Ten skrypt obsługuję wysyłanie do bazy danych wiadomości, które są potem wyświetlane.

A o to kod:

<?php
$polaczenie = @new mysqli($host,$user,$password, $database);
if($polaczenie->connect_errno!=0)
{
    echo "Error: ".$polaczenie->connect_errno;
    exit();
}
$data = $_COOKIE['login'];
$query = "SELECT * FROM users WHERE login='$data'";
$results= $polaczenie->query($query);
$data  = $results->fetch_assoc();
if(isset($_POST['send']))
{
$send = htmlentities($_POST['send'], ENT_QUOTES);
$lsend = strlen($send);
if($lsend>400)
{
    header("Location:chat.php");
    exit();
}
else
{
$id = $data['id'];
$time = date('H:i:s');
$polaczenie->query("INSERT INTO messages SET idu='$id', content = '$send', time = '$time'");
    header("Location:chat.php");
    exit();
}
}
?>

 

komentarz zamknięcia: Udało mi się rozwiązać :D

3 odpowiedzi

+1 głos
odpowiedź 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
wybrane 15 listopada 2015 przez Radekoslaw123
 
Najlepsza
Czemu nie sprawdzasz czy zmienna $results zwraca oczekiwaną wartość? Wystarczy najzwyklejszy IF. Może się zdarzyć, że w bazie nie będzie takiego loginu i co wtedy?
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)

Zrobiłem tak jak powiedzieliście i zmieniłem nazwę $results i nie przechodzi i tak IFa a testowałem zapytanie w MySQL i działało

o to kod:

<?php
$polaczenie = @new mysqli($host,$user,$password, $database);
if($polaczenie->connect_errno!=0)
{
    echo "Error: ".$polaczenie->connect_errno;
    exit();
}
$data = htmlentities($_COOKIE['login'],ENT_QUOTES);
$query = "SELECT * FROM users WHERE login='$data'";
if($rezultat= $polaczenie->query($query))
{
$data  = $rezultat->fetch_assoc();
if(isset($_POST['send']))
{
$send = htmlentities($_POST['send'], ENT_QUOTES);
$lsend = strlen($send);
if($lsend>400)
{
    header("Location:chat.php");
    exit();
}
else
{
$id = $data['id'];
$time = date('H:i:s');
$polaczenie->query("INSERT INTO messages SET idu='$id', content = '$send', time = '$time'");
    header("Location:chat.php");
    exit();
}
}
}
else
{
    echo "Niespodziewany błąd, nie można wysłać wiadomości.";
}
?>

 

komentarz 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
Prawdopodobnie nie ma takiego loginu w bazie danych.

Usuń też tą małpę sprzed new i zobacz czy nie jest zwracany jakiś błąd. Bo to, że masz później warunek nie oznacza, że klasa mysqli nie może zwrócić jakiegoś błędu i sama zakończyć działanie skryptu.
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
Błąd poprostu godny mnie :)

zapomniałem dodać include z connect.php

i nawet nie nawiązał połączenia,

masz naj i upvote :)
komentarz 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
Przewinęło się już tutaj wiele podobnych tematów, ale tym razem akurat na to nie zwróciłem uwagi.
0 głosów
odpowiedź 15 listopada 2015 przez Boshi VIP (100,240 p.)
$results nie jest typem mysqli.
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
A jak mam zrobić żeby był MySQLi?
0 głosów
odpowiedź 15 listopada 2015 przez Arkadiusz Waluk Ekspert (287,550 p.)

https://forum.pasja-informatyki.pl/36444/call-to-a-member-function-fetch_assoc-on-boolean?show=36459#a36459

Co więcej pisać jak tu wszystko wyjaśnione.


A tak poza tym

$data = $_COOKIE['login'];
$query = "SELECT * FROM users WHERE login='$data'";

Odważnie, gratuluję zaufania do tego co jest w ciasteczku (ja bym się tak troszkę bał) ;)

komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)

Faktycznie, co do ciasteczka trochę zmieniłem ale i tak teraz mi wychodzi else i błąd że

Niespodziewany błąd, nie można wysłać wiadomości.

A kod taki jest:

<?php
$polaczenie = @new mysqli($host,$user,$password, $database);
if($polaczenie->connect_errno!=0)
{
    echo "Error: ".$polaczenie->connect_errno;
    exit();
}
$data = htmlentities($_COOKIE['login'],ENT_QUOTES);
$query = "SELECT * FROM users WHERE login='$data'";
if($rezultat= $polaczenie->query($query))
{
$data  = $rezultat->fetch_assoc();
if(isset($_POST['send']))
{
$send = htmlentities($_POST['send'], ENT_QUOTES);
$lsend = strlen($send);
if($lsend>400)
{
    header("Location:chat.php");
    exit();
}
else
{
$id = $data['id'];
$time = date('H:i:s');
$polaczenie->query("INSERT INTO messages SET idu='$id', content = '$send', time = '$time'");
    header("Location:chat.php");
    exit();
}
}
}
else
{
    echo "Niespodziewany błąd, nie można wysłać wiadomości.";
}
?>

 

komentarz 15 listopada 2015 przez Arkadiusz Waluk Ekspert (287,550 p.)
Jesteś pewien że to zapytanie jest dobre? Na pewno sprawdzasz w dobrej bazie, masz taką tabele, kolumny itd?
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
Ja takie samo zapytanie dałem w MySQL i działało, jak to konieczne to ja mogę dać bazę danych w pliku .sql
komentarz 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
Raczej nie o to chodziło z tym ciastkiem :p
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
To ja nie wiem, ja jestem nie zbyt dobry w PHP ;-;

Podobne pytania

0 głosów
4 odpowiedzi 374 wizyt
pytanie zadane 25 listopada 2015 w PHP przez natip21 Nowicjusz (230 p.)
0 głosów
1 odpowiedź 171 wizyt
pytanie zadane 3 października 2015 w SQL, bazy danych przez ReksetoDev Gaduła (4,530 p.)
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 9 listopada 2015 w PHP przez Pytający Początkujący (290 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...