2016-07-09 2 views
-1

Я изучаю PHP-ориентированный объект, и я хочу запросить некоторые данные из базы данных и показать их на странице. В принципе у меня есть 2 файла, который выглядит примерно так:Правильно ли этот объектно-ориентированный код PHP?

login.php 
dashboard.php 

В моем login.php я закодированы это для того, чтобы подписать пользователя на моем сайте:

<?php 
    class User{ 
    private $db; 
    public function __construct(){ 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 
    public function Login($name, $pass){ 
     if(!empty($name)&&!empty($pass)){ 
     $st = $this->db->prepare("select * from admins where username=? and password=?"); 
     $st->bindParam(1,$name); 
     $st->bindParam(2,$pass); 
     $st->execute(); 
     if($st->rowCount() == 1){ 
      header('Location: maint/dashboard.php'); 
      $_SESSION["admin_username"] = $name; 
     } else { 
      echo "No user!"; 
     } 
     } 
    } 
    } 
?> 

Как вы можете видеть, что я поставил сессию переменная, которая называется $_SESSION["admin_username"] на линии 16. Таким образом, в этом случае я могу быть в состоянии извлекать данные из БД по ней ..

а дальше, я сделал это как мой admin.class.php, который идет как это:

<?php 
    class Admin{ 
    private $db; 
    public function __construct(){ 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
     $inf = $this->db->prepare("select * from admins where username = ".$_SESSION['admin_username'].""); 
     $inf->execute(); 
     if($st->rowCount() == 1){ 
     while ($record = mysql_fetch_array($st)) { 
     $this->username[] = $record['username']; 
     } 
    } 
    public function get_name() { 
     return $this->username[]; 
    } 
    } 
?> 

Затем я добавил этот код dashboard.php:

<?php 
    $adm = new Admin(); 
    echo $adm->get_name(); 
?> 

Он должен получить имя пользователя из базы данных и показать его на странице, но всякий раз, когда я запускаю этот код, я получаю эту ошибку:

Синтаксической ошибки : синтаксическая ошибка, неожиданное «публичное» (T_PUBLIC) в admin.class.php в строке 16

Так что же случилось? Я думаю, что с ними должна быть проблема, как я кодирую. Каков правильный способ получения данных из базы данных с помощью переменной сеанса в oop?

+0

Вы пропустили фигурные скобки в своих циклах 'if' и' while' в методе '__construct'. Он не закрыт. – NoLifeKing

+1

Правильно использовать пароли Hash с помощью [API Hash API] (http://php.net/manual/de/book.password.php) PHP. Если у вас еще нет PHP 5.5, используйте пакет [Compatibility Pack] (https://github.com/ircmaxell/password_compat), опубликованный в GitHub. –

+0

OP, как @NoLifeKing сказал, вы должны либо удалить открытую скобку, где начинается '' ', либо закрыть ее перед закрытием скобки' if'. –

ответ

0

Вы пропустили фигурные скобки в __construct. попробуйте это в admin.class.php :)

<?php 
    class Admin{ 
    private $db; 
    public function __construct(){ 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
     $inf = $this->db->prepare("select * from admins where username = ".$_SESSION['admin_username'].""); 
     $inf->execute(); 
     if($st->rowCount() == 1){ 
     while ($record = mysql_fetch_array($st)) { 
     $this->username[] = $record['username']; 
     } 
    } 
    } 
    public function get_name() { 
    return $this->username[]; 
    } 
} 
?> 
+0

Невозможно использовать [] для чтения, но я исправился, так что спасибо u – cariowritrai

+0

вы используете предыдущую версию 5.4? @cariowritrai –

Смежные вопросы