2016-07-09 12 views
-1

私はPHPオブジェクト指向を学んでおり、データベースからいくつかのデータを照会し、それらをページに表示したいと思います。基本的に私はこのようになります2つのファイルがあります:私のlogin.phpこのPHPオブジェクト指向コードは正しいですか?

login.php 
dashboard.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!"; 
     } 
     } 
    } 
    } 
?> 

私はセッションを設定しています

:だから私は、それによって、DBからデータを取得できるようにすることができ、このようにライン16上 $_SESSION["admin_username"]と呼ばれる変数..

そして次は、私はこのように書きます私の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(); 
?> 

それは、データベースからユーザー名を取得し、ページに表示されますが、私はこのコードを実行するたびに、私はこのエラーを取得する必要があります。

パースエラー:構文エラー、予期しない 'public'(T_PUBLIC)in admin.class.php 16行目

どうしたのですか?彼らがコードするように問題がなければならないと思います。 oopのセッション変数によってデータベースからデータを取得する正しい方法は何ですか?

+0

あなたは '__construct'メソッドの' if'と 'while'ループで中括弧を見逃しました。それは閉じていない。 – NoLifeKing

+1

PHPの[Password Hashing API](http://php.net/manual/de/book.password.php)を使用して正しくパスワードをハッシュします。 PHP 5.5をまだお持ちでない場合は、GitHubに掲載されている[Compatibility Pack](https://github.com/ircmaxell/password_compat)を使用してください。 –

+0

OP、@NoLifeKingは言ったように、 'while'が始まるところの中括弧を削除するか、' 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

[]を読むことはできませんが、私はそれを修正しましたので、あなたに感謝します。 – cariowritrai

+0

あなたは以前のバージョンの5.4を使用していますか? @cariowritrai –

関連する問題