2017-03-27 72 views
0

我創建了一個數據庫(在線教程之後),它將所有用戶引導到一個登錄頁面。我想知道如何指導不同的用戶訪問不同的網頁。例如,我想將JOHN SMITH(user1)指向localhost/pages/johnsmith.html和JANE SMITH(用戶2)到localhost/pages/janesmith.html。如何在登錄後將不同的用戶導向不同的頁面?

代碼:

db_const.php

<?php 
# mysql db constants DB_HOST, DB_USER, DB_PASS, DB_NAME 
const DB_HOST = 'localhost'; 
const DB_USER = 'root'; 
const DB_PASS = 'root'; 
const DB_NAME = 'ClientDashboard'; 
?> 

的login.php

<html> 
<head> 
<title>User Login Form - PHP MySQL Ligin System | W3Epic.com</title> 
</head> 
<body> 
<h1>User Login Form - PHP MySQL Ligin System | W3Epic.com</h1> 
<?php 
    if (!isset($_POST['submit'])){ 


?> 
<!-- The HTML login form --> 
<form action="<?=$_SERVER['PHP_SELF']?>" method="post"> 
    Username: <input type="text" name="username" /><br /> 
    Password: <input type="password" name="password" /><br /> 

    <input type="submit" name="submit" value="Login" /> 
</form> 
<?php 
    } else { 
require_once("db_const.php"); 
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
# check connection 
if ($mysqli->connect_errno) { 
    echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>"; 
    exit(); 
} 



$username = $_POST['username']; 
$password = $_POST['password']; 

$sql = "SELECT * from users WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1"; 
$result = $mysqli->query($sql); 
if (!$result->num_rows == 1) { 
    echo "<p>Invalid username/password combination</p>"; 
} else { 
    echo "<p>Logged in successfully</p>"; 
    // do stuffs 
} 
} 
?>  
</body> 
</html> 

register.php

<html> 
<head> 
    <title>User registration form- PHP MySQL Ligin System | W3Epic.com</title> 
</head> 
<body> 
    <h1>User registration form- PHP MySQL Ligin System | W3Epic.com</h1> 
<?php 
require_once("db_const.php"); 
if (!isset($_POST['submit'])) { 
?> <!-- The HTML registration form --> 
<form action="<?=$_SERVER['PHP_SELF']?>" method="post"> 
    Username: <input type="text" name="username" /><br /> 
    Password: <input type="password" name="password" /><br /> 
    First name: <input type="text" name="first_name" /><br /> 
    Last name: <input type="text" name="last_name" /><br /> 
    Email: <input type="type" name="email" /><br /> 

    <input type="submit" name="submit" value="Register" /> 
</form> 
<?php 
} else { 
## connect mysql server 
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
# check connection 
if ($mysqli->connect_errno) { 
    echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli- >connect_error}</p>"; 
    exit(); 
} 
## query database 
# prepare data for insertion 
$username = $_POST['username']; 
$password = $_POST['password']; 
$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$email  = $_POST['email']; 

# check if username and email exist else insert 
$exists = 0; 
$result = $mysqli->query("SELECT username from users WHERE username = '{$username}' LIMIT 1"); 
if ($result->num_rows == 1) { 
    $exists = 1; 
    $result = $mysqli->query("SELECT email from users WHERE email = '{$email}' LIMIT 1"); 
    if ($result->num_rows == 1) $exists = 2;  
} else { 
    $result = $mysqli->query("SELECT email from users WHERE email = '{$email}' LIMIT 1"); 
    if ($result->num_rows == 1) $exists = 3; 
} 

if ($exists == 1) echo "<p>Username already exists!</p>"; 
else if ($exists == 2) echo "<p>Username and Email already exists! </p>"; 
else if ($exists == 3) echo "<p>Email already exists!</p>"; 
else { 
    # insert data into mysql database 
    $sql = "INSERT INTO `users` (`id`, `username`, `password`, `first_name`, `last_name`, `email`) 
      VALUES (NULL, '{$username}', '{$password}', '{$first_name}', '{$last_name}', '{$email}')"; 

    if ($mysqli->query($sql)) { 
     //echo "New Record has id ".$mysqli->insert_id; 
     echo "<p>Registred successfully!</p>"; 
    } else { 
     echo "<p>MySQL error no {$mysqli->errno} : {$mysqli->error} </p>"; 
     exit(); 
     } 
    } 
} 
?>  
</body> 
</html> 

謝謝!

+0

我認爲這不是爲了上線,*對嗎?*最少,我當然希望不要。 –

+0

如果JOHNS MITH創建賬戶該怎麼辦?他將擁有與JOHN SMITH相同的頁面。 – Aloso

+0

第一個和最後一個名字永遠不會獨一無二,無法用作用戶標識符。 – Ibu

回答

2

查詢中存在一些安全問題,但只是回答實際要求的部分,您可以添加標題(「Location:」。$ url)將重定向到任何頁面。

//if (!$result->num_rows == 1) { 
if($result->num_rows !==1){ 
echo "<p>Invalid username/password combination</p>"; 
} else { 
echo "<p>Logged in successfully</p>"; 
// do stuffs 
header('Location:/' . $result->firstname. $result->lastname. '.html'); 
} 
+0

然後兩個共享名稱的用戶將共享相同的頁面。 – Ibu

+0

如果你看看他的問題,那就是他所要求的。如果沒有$ username可以使用。 –

+0

'例如,我想將JOHN SMITH(user1)指向localhost/pages/johnsmith.html和JANE SMITH(用戶2)到localhost/pages/janesmith.html.' –

0

這裏最常用的方法是讓一些通用用戶頁面,比如說user.php,接收用戶的$_GET參數id。然後,當用戶註冊時,您將他重定向到user.php?id=1,其中1將是註冊用戶的ID。

+0

感謝您的意見@gmc – ancad

0

使用switch敘述將與頭工作

switch ($userName) { 
    case "JOHN SMITH": 
     header('location: localhost/pages/johnsmith.html'); 
     break; 
    case "JANE SMITH": 
     header('location: localhost/pages/janesmith.html'); 
     break; 
    default: 
     header('location: /noname.html'); 
} 

這是確定的,如果你有很少的用戶,但如果你有很多你想存儲用戶的頁面URL,然後重定向到它成功登錄

if(USERLOGEDIN){ 
    header('location: ' . $userHomePage); 
} 
+0

感謝您的評論@dsadnick – ancad

0

解決方案之類的依賴,如果你只是要對有一些特定的用戶,你只需要放一個if語句會被重定向到指定的頁面登錄。 PHP,類似於:

if (username == 'Whatever the username might be') { 
    Header("Location: file.html"); 
} elseif (username == 'Some other user') { 
    Header("Location: file2.html"); 
} //so on 

這當然會在驗證密碼和用戶名後進行。

我希望這可以幫助,我不確定如果你想要更大的東西,解決方案可能會是什麼。

(如果你得到一個錯誤說頭已經存在,使用此:

ob_start(); 

<html>標籤上方後<?php,有時你可能會,如果你使用太多的頭功能,OB得到一個錯誤開始應該解決這個問題。)

0

它不是從它指向正確的用戶名/密碼組合被提交後的代碼完全清楚。

看起來這是驗證之後做任何事情的唯一部分:

if (!$result->num_rows == 1) { 
echo "<p>Invalid username/password combination</p>"; 
} else { 
echo "<p>Logged in successfully</p>"; 
// do stuffs 
} 

如果是這樣,嘗試將其更改爲下面的代碼。請注意,此解決方案是必需的JavaScript,因爲您已經發送了標題,因此不可能使用元刷新。

if (!$result->num_rows == 1) { 
echo "<p>Invalid username/password combination</p>"; 
} else { 
while ($row = $result->fetch_assoc()) { 
echo "<p>Logged in successfully</p>"; 
// do stuffs 
echo '<script type="text/javascript">'; 
echo 'window.location = "http://localhost/pages/.' .$row['first_name']. $row['last_name']. '.htm";'; 
echo '</script>'; 
} 
} 

也注意到,我的代碼是從DB拉出第一和最後一個名稱和合並他們發現頁面名稱。如果你願意,你可以使用更多的手動方法,但這種方式你不需要編輯這段代碼來添加額外的用戶。

+0

謝謝@digibucc。有效。但是,我希望用戶所指向的頁面,例如:localhost/pages/johnsmith.html也是安全的,並且只能由用戶的憑據訪問。這可能嗎? – ancad

+0

是的,你需要驗證他們在下一頁上的登錄。我會添加一個通用函數來檢查會話變量,並在登錄後在login.php中設置該會話變量。 – digibucc

相關問題