Piszę prostą stronę na której będzie można się rejestrować oraz logować, mam problem z funkcją logowania się i pomimo wielu prób nie mogę go rozwiązać.
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
if(isset($_POST['zaloguj'])) { 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{
echo 'Klasa ' .$class_db_file. ' nie została odnaleziona'; }
}
}
?>
3.user_log_in.php
<?php
class User_Log_In extends User{
public static function checkForm_login
($login,$password){
if(!filter_var
($login,FILTER_VALIDATE_REGEXP
,array("options"=>array
("regexp"=>"/[a-zA-Z0-9]{3,12}/")))){ echo'Nie prawidłowy login lub hasło.'; return false;
}
if(!filter_var
($password,FILTER_VALIDATE_REGEXP
,array("options"=>array
("regexp"=>"/[a-zA-Z0-9]{3,12}/")))){ echo'Nie prawidłowy login lub hasło.'; return false;
}
return true;
}
function log_in(){
if ($this->db->connect()){
echo "Zalogowany jako " .$this->login; }
else{
echo'Niepoprawne dane logowania'; }
}
}
}
?>
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
if($connection = mysql_connect($this->db_host, $this->db_user, $this->db_passw)) //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
if(isset($sql) && $sql!=''){ //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 (isset($sql) && $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
Ten post edytował xsalok 21.01.2016, 15:27:16