2016-10-12 8 views
-1

私は簡単な質問があります。PHPリダイレクト付きmysqlファイルを含む

私はPHPには新しく、ログインとサインアップフォームを持つウェブサイトを作っています。私はPHPを使用していますが、mysql.phpを使用していますが、別のものにする必要があるのだろうかと思っています。

これは、通常のメンバーのログインとadminのログインがあることを意味します。メンバーがログインしている場合は、リダイレクトをexample.com/member、adminならexample.com/adminに移動します。それはMySQLファイルからですか私はリダイレクトする必要があります私は1以上が必要ですか、それとも私はそれをやるだろう別の場所ですか?

私はこのようにしているのと同じページですべてをやりたいとは思わない。

どのような指針も素晴らしいでしょう。

おかげ

+2

http://stackoverflow.com/questions/39435675/php-sessions-username-passwordにアクセスし、問題を解決した回答を受け入れて、あなたを助けた回答をすべて投票してください。それから、ここでも同じことをしてください。これは、SOコミュニティが技術を初めて使う人たちをより多く助けることを促します。あなた自身の質問に答えることもできます。 – Eugene

答えて

1

TL; DR: 使用header("Location: somepage.php");各ページの先頭に$_SESSION['user_type']またはSQLクエリに基づいてリダイレクトします。別々のログインの必要はありません。

私はmysql.phpは、データベースファイルであると仮定しています。次のようなものを追加し、すべてのページの上部に

のmysql.php

<?php 
$mysqli = new mysqli('localhost', 'username', 'pass', 'db', port); 
if(mysqli_connect_errno()) { 
    echo "DB Error!"; exit(); 
} 
?> 

。あなたは、以下の場合にリダイレクトすることができ、同様に

<?php 
session_start(); 
require("mysql.php"); 
// If not logged in, go to login 
if(isset($_SESSION['user_id']) && $_SESSION['logged_in']) { 
    if($result = $mysqli -> prepare("SELECT id FROM `USER` WHERE id = ? AND session_id = ? LIMIT 1")) { 
    $session_id = session_id(); 
    $result -> bind_param("i", $_SESSION['uid']); 
    $result -> execute(); 
    $result -> store_result(); 
    if($result -> num_rows != 1) { 
     header("Location: login"); 
     exit(); 
    } 
    } 
    else { 
    header("Location: login"); 
    exit(); 
    } 
} 
else { 
    header("Location: login"); 
    exit(); 
} 
?> 

:ユーザーがログインしていない場合、これは、ログインページに仮定のロット(整数ID、セッション変数など)をリダイレクトしますが、あなたのアイデアを得ますログインしたユーザーは管理者またはメンバーです(ログイン時に設定される$_SESSION['user_type']のようなものを使用します)。

login.php

<?php 
session_start(); 
require("mysql.php"); 
// If already logged in, redirect to admin or members based on session variable. 
// ... 
// 
// If a login form has been submitted (assuming you're logging in from a POST) 
if(isset($_POST['submit'])) { 
    if($_POST['username'] && $_POST['password']) { 
    if($result = $mysqli->prepare("SELECT id, username, user_type, password FROM `USER` WHERE username = ? LIMIT 1")) { 
     $result -> bind_param("s", $_POST['username']); 
     $result -> execute(); 
     $result -> store_result(); 
     if($result -> num_rows == 1) { 
     $result -> bind_result($id, $username, $user_type, $bcrypted); 
     $result -> fetch(); 
     if(password_verify($_POST['password'], $bcrypted)) { 
      session_regenerate_id(); // Avoid Session Fixation Attack 
      $session_id = session_id(); // Update the USER table using this 
      $_SESSION['user_id'] = $id; 
      $_SESSION['username'] = $username; 
      $_SESSION['user_type'] = $user_type; 
      $_SESSION['logged_in'] = true; 
      // Log some data to your DB, login time, ip, etc 
      header("Location: ".($_SESSION['user_type'] == 'admin' ? 'admin.php' : 'member.php')); 
      exit(); 
     } 
     } 
    } 
    } 
} 
?> 
<html> ... 

かなりの数の点が存在して:あなたは新しいしているので、ここではいくつかのより多くのコードです。実際の 'ログイン'の前にセッションIDを再生成し、bcryptをパスワードに使用します。MySQLのパラメータ化された文を理解していると仮定すると、三項演算子もあります。私はこれの少なくとも一部が役に立てば幸い

logout.php

<?php 
session_start(); 
$_SESSION['logged_in'] = False; 
$_SESSION = array(); 
session_destroy(); 
header("Location: login.php"); 
?> 

:ログアウトページを忘れないでください。私がカバーしていない何百万ものものがありますが、あなたはすでにウェブ上の資料から多くを学ぶことができます。がんばろう!

関連する問題