1

私はphpとデータベースに少し慣れていません。ロールベースのアクセス Web アプリケーションを開発しました。シナリオは、2つのテーブルがあることです

  1. tbl_user

列 -> user_id、username、school_id (school_id は外部キー)

  1. tbl_school


列 -> school_id、school_name


ユーザーが生成されると、管理者とユーザーユーザーのみが学校に基づく 2 つの役割があり
、学校名はユーザー名と user_id に関連付けられます

管理者かユーザーかに関係なく、ID を表示できるようになりました

しかし、ユーザーがログインすると、ロール名の代わりに関連する学校名が表示されます。

助けてくれてとても感謝します

INDEX.PHP

        $errors = array(
            1=>"Invalid user name or password, Try again",
            2=>"Please login to access this area"
          );

        $error_id = isset($_GET['err']) ? (int)$_GET['err'] : 0;

        if ($error_id == 1) {
                echo '<p class="text-danger">'.$errors[$error_id].'</p>';
            }elseif ($error_id == 2) {
                echo '<p class="text-danger">'.$errors[$error_id].'</p>';
            }
       ?>
    <form action="authenticate.php" method="post" role="form">
    <div class="form-group">
      <label>UserName :</label>
      <input id="name" name="username" placeholder="username" type="text" class="form-control" required autofocus></div>
      <div class="form-group">
      <label>Password :</label>
      <input id="password" name="password" placeholder="**********" type="password" class="form-control" required></div>

      <input name="submit" type="submit" value=" Login " class="btn btn-primary btn-lg btn-block">
    </form>

認証.PHP

<?php 
 require 'database-config.php';
 session_start();
 $username = "";
 $password = "";

 if(isset($_POST['username'])){
  $username = $_POST['username'];
 }
 if (isset($_POST['password'])) {
  $password = $_POST['password'];

 } 

 $q = 'SELECT * FROM tbl_user WHERE username=:username AND password=:password';
 $query = $dbh->prepare($q);
 $query->execute(array(':username' => $username, ':password' => $password));

 if($query->rowCount() == 0){
  header('Location: index.php?err=1');
 }else{

  $row = $query->fetch(PDO::FETCH_ASSOC);

  session_regenerate_id();
  $_SESSION['sess_user_id'] = $row['id'];
  $_SESSION['sess_username'] = $row['username'];
        $_SESSION['sess_userrole'] = $row['role'];

        echo $_SESSION['sess_userrole'];
  session_write_close(); 

  $multirole = $row['role'];

    switch ($multirole) {

    case "admin":   
        header('Location: dashboard.php');  
    break;

    case "user":    
        header('Location: user_dashboard.php'); 
    break;

    default:    
    echo "No User Found ! Please Contact Admin";    
    }    
 }? >

ダッシュボード.PHP

<?php 
    session_start();
    $role = $_SESSION['sess_userrole'];
    if(!isset($_SESSION['sess_username']) || $role!="admin"){
      header('Location: index.php?err=2');
    }
? >
html......
Welcome : <?php echo $role; ? >
4

1 に答える 1

0

これは、あなたの質問を読んだことに基づいた簡単な提案です。

したがって、データベースについて質問することができます...つまり、user_idが含まれている学校の名前を教えてください。次のようにします(これはテストされたコードではありません...)

$q = 'SELECT u.username,s.school_name FROM tbl_user u
JOIN tbl_school s ON u.school_id = s.school_id 
WHERE u.user_id=:user_id';

そして、把握できる正しい user_id を指定するだけです。

これは、user_id が与えられた場合 (すでにご存知のとおり)、その user_id のユーザー テーブル内の school_id に関連する tbl_school 内の学校名を教えてください。

それは理にかなっていますか?

于 2016-10-27T23:59:39.630 に答える