Pierwsze kroki w obiektowym php

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
harry

Pierwsze kroki w obiektowym php

Post przez harry »

Dzień Dobry. Zaczynam naukę obiektowego PHP, napisałem sobie logowanie i coś jest źle:(

login.php

Code: Zaznacz cały

<?php
session_start();

if(!isset($_POST['login']))
{
	
	include_once("class.login.php");
	
	$login = new Login();
	
	if($login->process())
	header (" adf.php");
	else
	$login->show_errors();
}
?>

<form method= "POST" action="<?php echo $_SERVER['PHP_SELF'];?>">

Login:<input type="text" name="uusername"/>
Haslo:<input type="password" name="ppassword"/>
<input type="submit" name="login" value="Zaloguj"/>
</form>
class.login.php

Code: Zaznacz cały

<?php
class Login
{
	private $username;
	private $password;
	private $errors;
	
	
	public function __construct()
	{
		$this->errors = array();
		$this->username = $this->filter($_POST['uusername']);
		$this->password = $this->filter($_POST['ppassword']);
	}
	
	
	public function process()
	{
		if($this->valid_data())
		$this->register();
		
		return count ($this->errors)? 0:1;
	}
	
	public function filter($var)
	{
		return preg_replace('/[^a-zA-Z0-9.]/','',$var);
	}
	
	public function login()
	{
		mysql_connect("localhost","root","") or die(mysql_error());
		mysql_select_db("media") or die (mysql_error());
		
		mysql_query("SELECT * FROM users(username, password) WHERE ('{$this->username}','{$this->password}')");
		
		if(mysql_affected_rows()<1)
		$this->errors[]= 'Nie ma takiego usera';
	}
	
	public function show_errors()
	{
		echo "<h3>Errors</h3>";
		foreach($this->errors as $key=>$value)
        echo $value."<br>";
	}
	
	public function valid_data()
	{
		if(empty($this->username))
        $this->errors[] = 'Invalid Username';
    	if(empty($this->password))
      	$this->errors[] = 'Invalid Password';
		
		return count($this->errors)? 0 : 1;
	}
}
?>
Proszę o rady.
Pozdrawiam
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Pierwsze kroki w obiektowym php

Post przez Morfidon »

Tzn. co jest źle?? jakieś wskazówki? dla mnie kod, która "działa" jest dobry. Źle / dobre to pojęcia względne.

Hint z regulaminu:
"Staraj się zatytułować oraz opisywać swój problem w sposób taki, aby osoba po drugiej stronie zrozumiała go bez problemu. Pomoże to także Tobie - jestem pewien, że w takim wypadku otrzymasz odpowiedź dużo szybciej."

Na forach bez opisania swojego tematu, prawie nikomu (także mi) nie będzie się chciało nawet analizować kodu.

Pozdrawiam
harry

Re: Pierwsze kroki w obiektowym php

Post przez harry »

Bardzo przepraszam za złe wytłumaczenie problemu.
Sytuacja jest taka że nie wyświetla mi żadnych błędów w kodzie ale również nie loguje mnie (nie przekierowuje na strone adf.php)

Walidacja danych z formularza również nie działa ponieważ kiedy wpisuje znaki przed którymi zabezpieczyłem formularz nie wyświetla się błąd.

Dodam jeszcze strukture mojej bazy danych:

Code: Zaznacz cały

 Struktura tabeli dla  `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Zrzut danych tabeli `users`
--

INSERT INTO `users` (`id`, `username`, `password`, `email`) VALUES
(1, 'hmdvbm', 'czxcbzxcb', ''),
(2, 'hbzfgbasdfb', 'absfbasdfbaf', ''),
(3, 'bzxcb', 'xcbxcb', ''),
harry

Re: Pierwsze kroki w obiektowym php

Post przez harry »

Dodam jeszcze że rejestracja na której się wzorowałem działa:

http://wklej.org/id/371464/

http://wklej.org/id/371465/
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Pierwsze kroki w obiektowym php

Post przez Morfidon »

Po kliknięciu na Zaloguj

Code: Zaznacz cały

<input type="submit" name="login" value="Zaloguj"/>
Następujący kawałek kodu po przesłaniu formularza już nigdy nie zadziała, ponieważ $_POST['login'] istnieje po wysłaniu formularza, wystarczy nie negować instrukcji warunkowej.

Code: Zaznacz cały

if(!isset($_POST['login'])) // tu jest błąd powinno być if(isset($_POST['login']))
{
   
   include_once("class.login.php");
   
   $login = new Login();
   
   if($login->process())
   header ("Location: adf.php");
   else
   $login->show_errors();
}
?>

Pozdrawiam
harry

Re: Pierwsze kroki w obiektowym php

Post przez harry »

Bardzo dziękuje za pomoc
figo_fago
Nowicjusz
Posty: 1
Dołączył(a): niedziela, 3 maja 2015, 08:51

Re: Pierwsze kroki w obiektowym php

Post przez figo_fago »

Witam wszystkich.

Ten wątek powstał wieki temu, ale wciąż jest pokazywany w Googlach, gdy szukamy "logowania obiektowego php", dlatego dodam tu również swoją odpowiedź na pytanie postawione przez autora wątku.

Kolejnym błędem w kodzie uniemożliwiającym poprawne logowanie jest niepoprawne użycie funkcji header. Powinno być:

Code: Zaznacz cały

header("Location: adf.php");
Dziękuję i pozdrawiam.
Peace!
Post Reply