Skocz do zawartości

mysqli_num_rows


PawelC

Rekomendowane odpowiedzi

Hej piszę sobie klasę do obsługi usera, w której jest logowanie. Mam taki kod i wywala mi błąd:

//Logowanie użytkownika
		public function userLogin($login,$haslo)
		 {	

			 $result=$this->db->query("select login,haslo from user where login='$login' and haslo='$haslo'");

			 if(mysqli_num_rows($result)==0)
			   {
				   echo "brak takiego usera";
			}
			else
			{
		   $_SESSION['zalogowany']="$this->login";
		   header("Location: test.php");
		 }



		   }

I wywala mi błąd:

Warning:  mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\database\model_user.class.php on line 49
brak takiego usera

login i hasło podaje dobre, co najdziwniejsze kiedyś ten kod mi działał, a teraz niechce.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli to jest z kohana to coś takiego:

$result=$this->db->query("select login,haslo from user where login='$login' and haslo='$haslo'");
if($query->count()==0)
{
 echo "brak takiego usera";
}

Poza tym w modelu wyświetlać na sztywno komunikaty to bezsens chyba, że testowo...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

W kohana php nie mam z tym problemu, bo wiem co i jak powinno tam być. To jest napisane na luźno w OOP, i chcę sobie napisać klasę do obsługi użytkownika, ale trafiłem na ten dziwny problem.

Cały kod klas, wygląda tak:

Database.class.php

<?php
class database
{
		public function __construct()
		{
			$this->baza=new mysqli('localhost','root','','spam');

		}
		//Pobranie wyników z bazy
		public function getRows($query)
		{
			$result=$this->baza->query($query);
			while($row=$result->fetch_object())
			{
				$wynik[]=$row;
			}
			return $wynik;
		}

		//Wykonanie zapytania do bazy
		public function query($query)
		{
			$result=$this->baza->query($query);


		}



}





?>

Model_User.class.php

<?php

class Model_User
{
		private $db;
		public function __construct(database $db)
		{
			$this->db=$db;
		}
		//Dodanie nowego użytkownika
		public function addUser($login,$haslo)
		{
			$result=$this->db->query("insert into `user` values('$login','$haslo')");
			if(!$result===false)
			{
				echo "Wystąpił błąd podczas rejestracji nowego użytkownika!";
			}
			else 
			{
				echo "Zostałeś zarejestrowany poprawnie.";
			}

		}

		//Usuwanie użytkownika z bazy
		public function deleteUser($login)
		{
			$result=$this->db->query("delete from user where login='$login'");
			if(!$result===false)
			{
				echo "Wystąpił błąd podczas usuwania użytkownika!";
			}
			else 
			{
				echo "Użytkownik o loginie $login został poprawnie usunięty z bazy.";
			}
		}

		//Logowanie użytkownika
public function userLogin($log,$pass)
 {	
$this->log=trim($log);
  $this->pass=trim($pass);

  $result=$this->db->query("select log,pass from user where log='$this->log' and pass='$this->pass'");
   if(mysqli_num_rows($result)==0)
	   {
		   echo "brak takiego usera";
		}
		else
		{
		   $_SESSION['zalogowany']="$this->log";
		   header("Location: test.php");
		 }


	   }


	   	}

?>

A używam tego tak:

require 'database.class.php';
require 'model_user.class.php';
$db=new database();
$user=new Model_User($db);
$user->userLogin('admin','admin');

Odnośnik do komentarza
Udostępnij na innych stronach

W mysqli zależy to czy odwołujesz się obiektowo czy proceduralnie

https://us2.php.net/manual/en/mysqli-result.num-rows.php

Jeśli obiektowo jak to powinno być tak:

$result->num_rows;

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Bez efektu. Dziwne że ten kod kiedyś działał:

 public function userLogin()
 {	

  $this->log=trim($_POST['log']);
  $this->pass=$pass=trim($_POST['pass']);
  $result=$this->db->query("select log,pass from users where log='$this->log' and pass='$this->pass'");
   if(mysqli_num_rows($result)==0)
	   {
		   echo "brak takiego usera";
		}
		else
		{
		   $_SESSION['zalogowany']="$this->log";
		   header("Location: test.php");
		 }


	   }

A teraz niechce

#Wrzuciłem metode userLogin() do klasy database i działa, ale jak umieszcze ją w model_user to wywala błąd

Odnośnik do komentarza
Udostępnij na innych stronach

W metodzie query nic nie zwracasz :) co jest błędem

 public function query($query)
{
 $result=$this->baza->query($query);				
}

powinno być

 public function query($query)
{
return $this->baza->query($query);
}

Całość przetestowana i uproszczona wyglada tak:

class database
{
private $baza;
public function __construct()
{
	$this->baza = new mysqli('localhost', 'xxx', 'xxx', 'hotxxxx');
}

//Wykonanie zapytania do bazy
public function Myquery($query)
{
	return $this->baza->query($query);
}
}

class Model_User
{
private $db;
public function __construct(database $db)
{
	$this->db = $db;
}

public function userLogin($log)
{	


	$result=$this->db->Myquery("SELECT * FROM SEOMaster_Konto where nick='$log'");
	if($result->num_rows ==0)
	{
	   echo "brak takiego usera";
	}
	else
	{

		echo 'OK';
	}
}
}

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Do nauki mogą być, ale dla aplikacji docelowych takie pisanie nie ma sensu. Poza tym widzę, że piszesz za przeproszeniem "na oślep"...

Dlaczego tak uważam nie chce mi się pisać, bo to jest zbyt obszerne zagadnienie.

Ale jak mówi przysłowie "nie od razu Kraków zbudowano" :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Poza tym widzę, że piszesz za przeproszeniem "na oślep"...

Domyślam, się że to dlatego, że zamiast np napisać kilka klas jedna odpowiedzialna za logowanie itp, druga za rejestracje, 3 za profil, to robię wszystko w jednej :)

Do nauki mogą być, ale dla aplikacji docelowych takie pisanie nie ma sensu.

Dlaczego?

Ale jak mówi przysłowie "nie od razu Kraków zbudowano"

No właśnie :( nikt od razu wszystkiego nie potrafił.

Odnośnik do komentarza
Udostępnij na innych stronach

A w ogole IMO bez pracy grupowej OOP nie sensu, strukturalnie przecież wystarczy

Kwestia tego co kto woli. Po co mam za każdym razem pisać kod od zera, skoro klasy utworzone w OOP, mogę użyć ponownie w innym projekcie, i bez większego problemu rozbudowywać, co przy programowaniu strukturalnym jest utrudnione, a czasami nie możliwe.

Odnośnik do komentarza
Udostępnij na innych stronach

A w ogole IMO bez pracy grupowej OOP nie sensu, strukturalnie przecież wystarczy
Po co internet jak można wysłać znaki dymne :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności