2016-03-25 13 views
0

Öğrenme amaçlı basit bir OOP giriş sistemi oluşturmaya çalışıyorum.Sayım hataları mantık sorunu

Bu, kayıt/oturum açma sistemi için kullandığım Auth sınıfıdır.

<?php 

require_once 'Database.class.php'; 

class Auth extends Database 
{ 
    const DATEFORMAT = 'd/m/Y'; 
    const TIMEFORMAT = 'H:i:s'; 

    public function __construct($host, $username, $password, $database) 
    { 
     parent::__construct($host, $username, $password, $database); 
     $this->connect(); 
     $this->setTable('users'); 
    } 

    public function insert(array $data) 
    { 
     $username = $data['username']; 
     $password = $data['password']; 
     $repeat_password = $data['repeat_password']; 
     $last_login = date(self::DATEFORMAT . ' ' . self::TIMEFORMAT); 

     if ($password == $repeat_password) 
     { 
      $password = hash("sha256", $password); 
      $stmt = $this->connection->prepare("INSERT INTO {$this->table} (username, password, last_login) VALUES(:username, :password, :last_login)"); 

      $stmt->execute(array(':username' => $username, 
           ':password' => $password, 
           ':last_login' => $last_login 
           ) 
          ); 
     } 
     else 
     { 
      // do something 
     } 
    } 

    public function select(array $data) 
    { 
     $username = $data['username']; 
     $password = $data['password']; 
     $password = hash("sha256", $password); 

     $stmt = $this->connection->prepare("SELECT * FROM {$this->table} WHERE username=:username AND password=:password LIMIT 1"); 

     $stmt->execute(array(':username' => $username, 
          ':password' => $password 
          ) 
         ); 

     return $stmt->fetch(PDO::FETCH_ASSOC); 
    } 

} 

Ve bu sınıfını kullanın yerdir:

<?php 

require_once 'Auth.class.php'; 

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 

    $auth = new Auth('localhost', 'root', '', 'oop'); 

    $user = $auth->select($_POST); 

    if (count($user) === 0) { 
     echo 'User not found!'; 
    }else{ 
     echo 'Hello, ' . ucfirst($user['username']); 
    } 

sorun olduğunu şifre hatalı veya kullanıcı adı o hata mesajı "göstermez var olmasa bile Kullanıcı bulunamadı!" Bu yüzden kullanıcı değişkeni sayısının 0'dan büyük olması gerektiğini belirttiğim durumun çalışmadığı görülüyor.

Kullanmakta olduğum basit count() için bir alternatif aramayı denedim ama bu yardımcı olmadı. OOP'un detaylarında kayboluyorum ve bence bu bir sözdiziminden daha mantıklı bir problem.

Neyi yanlış yaptığım hakkında bir fikrin var mı? Ayrıca, yazdığım kodun herhangi bir yapıcı incelemesi okumak harika.

+1

'var_dump': YANLIŞ yana

bir sayılabilir değilse veya bir dizi fonksiyonu 1.

count return values

Bunu çözmek için dönecektir, sen durumunu ayarlayabilirsiniz 'select' dedikten sonra '$ user' içinde ne olduğunu görmek için. – PierreDuc

+1

OOP ile ilgisi yoktur. Kendine sor, burada ne saymak istiyorsun? Ardından koşulu sadece 'if ($ user)' ile değiştirin. İnceleme ile ilgili olarak, bu makaleyi ilginç bulabilirsiniz, [İlk veritabanı sarıcınızın çocukluk hastalıkları] (https://phpdelusions.net/pdo/common_mistakes) –

+0

@PierreDuc kullanarak var_dump, 'bool (false)' döndürür –

cevap

1

Getir başarısız olursa, FALSE değerini döndürür. Böylece, getirme hatası durumunda FALSE değerini sayarsınız.

if (!$user) 
kullanabilirsiniz