2016-02-29 48 views
-1

我想登錄(PHP,MySQL)。我已經登錄,註冊,註銷,home.php。問題是當我登錄家裏什麼都沒有顯示。我想讓兩個不同的用戶登錄,登錄後必須創建一個名爲username的用戶名。用戶登錄mysql php multyple會話,當我登錄我無法看到主頁上

我想擁有多個用戶,他們在登錄時擁有自己的信息表,這是其他用戶看不到的。

我的代碼:

MySQL的

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` text NOT NULL, 
    `password` text NOT NULL, 
    `psalt` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

的login.php

<?php 
session_start(); 
if($_SESSION['user']!=''){ 
    header("Location:home.php"); 
} 
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'username', 'password'); 
$email=$_POST['mail']; 
$password=$_POST['pass']; 
if(isset($_POST) && $email!='' && $password!=''){ 
    $sql=$dbh->prepare("SELECT id,password,psalt FROM users WHERE username=?"); 
    $sql->execute(array($email)); 
    while($r=$sql->fetch()){ 
     $p=$r['password']; 
     $p_salt=$r['psalt']; 
     $id=$r['id']; 
    } 
    $site_salt="subinsblogsalt"; 
    $salted_hash = hash('sha256',$password.$site_salt.$p_salt); 
    if($p==$salted_hash){ 
     $_SESSION['user']=$id; 
     header("Location:home.php"); 
    }else{ 
     echo "<h2>Username/Password is Incorrect.</h2>"; 
    } 
} 
?> 

home.php

<html><head></head> 
<body> 
<? 
session_start(); 
if($_SESSION['user']==''){ 
    header("Location:login.php"); 
}else{ 
    $dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'root', 'backstreetboys'); 
    $sql=$dbh->prepare("SELECT * FROM users WHERE id=?"); 
    $sql->execute(array($_SESSION['user'])); 
    while($r=$sql->fetch()){ 
     echo "<center><h2>Hello, ".$r['username']."</h2></center>";  
    } 
} 
?> 
</body> 
</html> 
+0

你真的不應該使用密碼哈希自己的鹽和你真的應該使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 –

+0

在使用'sql-> fetch'之前,你可能想調用'$ sql-> get_result'或'store_result',然後使用fetch() –

+0

@ user5871514,代碼顯示'PDO',而不是'mysqli'。現在,這就是爲什麼我無法在PDO的頁面上找到任何有關它的信息... – FirstOne

回答

0

你有沒有允許使用從短PHP標籤選項你的php.ini文件你明確地使用短標籤作爲home.php而不是login.php。這可能會導致空白頁問題。你也不應該在session_start()函數之前有任何輸出。試試這個:

<?php session_start(); ?>  
<html> 
<head></head> 
<body> 

<?php 
if($_SESSION['user']==''){ 
    header("Location:login.php"); 
}else{ 
    $dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'root', 'backstreetboys'); 
    $sql=$dbh->prepare("SELECT * FROM users WHERE id=?"); 
    $sql->execute(array($_SESSION['user'])); 
    while($r=$sql->fetch()){ 
     echo "<center><h2>Hello, ".$r['username']."</h2></center>";  
    } 
} 
?> 
</body> 
</html> 

編輯:

而且,不會告發它是更好地保存你從會話用戶需要的所有信息,而不是使在home.php另一個SQL查詢?

的login.php

<?php 
session_start(); 

if($_SESSION['user'] != '') { 
    header("Location:home.php"); 
} 
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'username', 'password'); 

$email=$_POST['mail']; 
$password=$_POST['pass']; 

if(isset($_POST) && $email != '' && $password != ''){ 
    $sql=$dbh->prepare("SELECT id, password, psalt, username FROM users WHERE username=?"); 
    $sql->execute(array($email)); 
    while($r=$sql->fetch()){ 

     $p = $r['password']; 
     $p_salt = $r['psalt']; 
     $id = $r['id']; 
     $username = $r['username']; // Username 

    } 
    $site_salt="subinsblogsalt"; 
    $salted_hash = hash('sha256',$password.$site_salt.$p_salt); 
    if($p==$salted_hash){ 

     $_SESSION['user'] = $id; 
     $_SESSION['username'] = $username; // Username saved into session. 

     // Redirect 
     header("Location:home.php"); 
    }else{ 
     echo "<h2>Username/Password is Incorrect.</h2>"; 
    } 
} 
?> 

home.php

<?php session_start(); ?>  
<html> 
<head></head> 
<body> 

<?php 
if($_SESSION['user']==''){ 
    header("Location:login.php"); 
} else { 
    echo "<center><h2>Hello, ".$_SESSION['username']."</h2></center>";  
} 
?> 
</body> 
</html> 
+0

它的作品!我有更多疑問。我在做用戶登錄的門戶,只看到指定的數據(連接到他自己的輸入存儲的自己的表)。在同一時間,另一個用戶進入,必須看到不同的內容。我的目標是不同的用戶看到他們自己的內容。它們在登錄後將輸入存儲在數據庫中。用戶只能看到他的輸入 - 只能由用戶指定。如果有人能指出我的方向是正確的,那就太難了。 Tnx for previus的答案和幫助。 – OverHeat

+0

好,那麼..如果它有效,也許你可以將它標記爲接受的答案呢? :)只是顯示當前登錄用戶的信息,沒有什麼不同。只需執行一個select語句查詢,您將在哪裏使用where子句獲取想要顯示的所有信息,併爲where子句提供當前登錄用戶的id值。 –