2017-03-27 8 views
0

私はデータベースを作成して(オンラインチュートリアルの後に)、すべてのユーザーを1つのログインページに誘導します。私はどのように私は別のWebページに別のユーザーを指示することができますかと思っていた。たとえば、JOHN SMITH(user1)をlocalhost/pages/johnsmith.html、JANE SMITH(user 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がアカウントを作成するとどうなりますか?彼はジョン・スミスと同じページを持っていました。 – 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

名前を共有する2人のユーザーが同じページを共有します。 – Ibu

+0

あなたが彼の質問を見るなら、それは彼が求めていたものです。そうでなければ$ usernameを使用できます。 –

+0

'たとえば、JOHN SMITH(user1)をlocalhost/pages/johnsmith.htmlに、JANE SMITH(ユーザー2)をlocalhost/pages/janesmith.htmlに指定したいとします。 –

0

ここで最も一般的なアプローチは、ユーザのid$_GETというパラメータとして受け取る、ある程度の一般的なユーザページを持つことです。これは、user.phpとしましょう。ユーザーが登録すると、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'); 
} 

を働くだろうあなたは非常に少数のユーザーを持っている場合、これはOKですが、あなたは多くを持っている場合は、そのユーザーのページの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

関連する問題