Teoretycznie funkcja log_in z klasy User_Log_In powinna obliczać ilość linii odpowiedzi z bazy danych i na tej podstawie decydować czy użytkownik istnieje w systemie (wówczas liczba linii w odpowiedzi powinna wynosic 1) i właśnie tutaj mam problem.
W tym momencie wywala mi błąd : "Fatal error: Can't use function return value in write context in C:\xampp\htdocs\php_new\classes\user_log_in.php on line 23"
Ale podejrzewam, że coś innego również może być nie tak.
Na dole zamieszczam listing poszczególnych plików:
1.logowanie.php
<html> <head> <title> Logowanie </title> </head> <body> <form method="POST" action="" onsubmit=""> <table border=0> <tr> <td>Login </td> <td align="center"><input type="text" name="login" size="40" maxlength="50" /></td> </tr> <tr> <td>Hasło</td> <td><input type="password" name="password" size="40" maxlength="50" /></td> </tr> <tr> <td colspan="2" align="center"> <input name="zaloguj" type="submit" value="Zaloguj"/> <button> <a href="index.html">Wstecz</a> </button> </td> </tr> </table> </form> <?php include 'classes/user.php'; include 'classes/user_log_in.php'; if(User_Log_In::checkForm_login($_POST['login'],$_POST['password'])){ $user = new User_Log_In($_POST['login'],'',$_POST['password']); $user->db(); $user->log_in(); } } ?> </body> </html>
2.User.php
<?php class User{ public $login; public $email; public $password; public $checkError; public $db; function __construct($login,$email,$password){ $this->login = $login; $this->password = $password; $this->email = $email; } } function db(){ $class_db_file = 'classes/data_base.php'; require_once($class_db_file); $this->db = new data_base(); } else{ exit; } } } ?>
3.user_log_in.php
<?php class User_Log_In extends User{ if(!filter_var($login,FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/[a-zA-Z0-9]{3,12}/")))){ return false; } if(!filter_var($password,FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/[a-zA-Z0-9]{3,12}/")))){ return false; } return true; } function log_in(){ if ($this->db->connect()){ $sql = "SELECT * FROM `users` WHERE `login` = '".mysql_real_escape_string($this->login)." AND `password` =".mysql_real_escape_string(md5($this->password))."'"; } else{ } } } } ?>
4.data_base.php z komentarzami dla siebie samego żeby lepiej zrozumieć kod
<?php class Data_Base{ // na początek zmienny prywatne, niedostępne poza klasą // ustalamy zmienne na stałe które w pliku php ustalamy // za pomocą define(DB_HOST, 'db_host'); private $db_host = 'localhost'; // podstawiamy host bazy danych private $db_name = 'users'; // podajemy nazwę bazy danych private $db_user = 'user'; // podajemy nazwę użytkownika z uprawnieniami odczytu i zapisu private $db_passw = 'user'; // podajemy hasło dla użytkownika; // zmienne publiczne - dostępne poza klasą public $connection; // połączenie public $error; // ew. błąd zwrócony przez bazę danych //łaczenie z bazą danych public function connect(){ //sprawdzam czy uda mi się nawiązać połączenie z bazą danych //jeśli połączenie zostanie nawiązane podstawiam je pod zmienną $connection //sprawdzam czy uda mi się wybrać bazę danych, jeśli tak to podstawiam pod $connection połączenie i zwracam true $this->connection = $connection; return true; } //jeśli nie podstawiam pod zmienną error błąd MYSQL do późniejszego sformatowania else { return false; } } //w przypadku powodzenia zwraca wynik zapytania SQL public function select($sql){ //sprawdzam czy istnieje aktywne połączenie z bazą danych if($this->connection){ //ustawiam kodowanie dla połączenia na UTF-8 mysql_set_charset('utf8',$this->connection); //sprawdzam czy $sql zaiwera zapytanie SQL do bazy danych i czy nie jest pusta //wysyłam zapytanie do bazy jeśli operacja skończy się sukcesem to zwracam wynik return result; } //jeśli nie to błąd do $error else { return false; } } else{ $this->error = 'Błąd zapytania SQL'; return false; } } else{ $this->error = 'Brak połączenia z bazą danych'; return false; } }//eof select(); //funkcja która zwraca TRUE jako potwierdzenie pomyślnego wykonania operacji public function query($sql){ if ($this->connection) { mysql_set_charset('utf8', $this->connection); //różnica pomiędzy selectem jest tutaj return true; } //eof różnica else { return false; } } else { $this->error = 'Brak połączenia z bazą danych'; return false; } } else { $this->error = 'Błąd zapytania SQL'; return false; } }//eof query(); //zamknięcie połączenia z bazą danych public function close(){ if($this->connection){ return true; } else{ return false; } } else{ $this->error = 'Brak aktywnego połączenia'; return false; } }//eof close(); } ?>
Myślę że może to być jakiś głupi błąd, bo nie jestem doświadczony, dlatego umieszczam w dziale przedszkole.
Korzystam z phpMyAdmin