2

私は学校のシステムに取り組んでおり(PHPを学ぶためだけに)、管理者側はすでに完了していますが、ログインフォームで学生、教師、およびシステム管理者からのログインデータを受け入れて、特定のビューを表示できるようにしたいと考えています。ユーザーのタイプごとのシステム。「if(isset($_POST["log"]))」の下にコメントされているコードは、私が現在管理者に使用しているものであり、(私の標準では) 完全に機能します。コードは次のとおりです。

<?php
//Fazer login para admin e prof;ligar todas databases ao login;????
include("conect.php");
include("classes/class_est.php");
include("classes/class_login.php");
include("classes/class_admin.php");
include("classes/class_prof.php");
$user=(empty($_POST["username"])? "" :$_POST["username"]);
if(isset($_POST["log"])){
/*if(($user)&&($_POST["senha"]!=null)){
        $est=new admin();
        $est->login($user,$_POST["senha"],$_POST["tipo_user"]);
        }else{
            echo"<script>alert('Nome ou Senha Incorrecto')</script>";
        }
    }*/

switch($_POST["tipo_user"]){
        case"administrador":echo 'ighb';
            if(($_POST["username"])&&($_POST["senha"]!=null)){
            $admin=new admin();
            $admin->login($_POST["username"],$_POST["senha"],$_POST["tipo_user"]);
            }else{
            echo"<script>alert('Nome ou Senha Incorrectos')</script>";
        }
            ;
         break;
        case"estudante":
            if(($_POST["username"])&&($_POST["senha"]!=null)){
            $est=new est();
            $est->login($_POST["username"],$_POST["senha"],$_POST["tipo_user"]);
            }else{
            echo"<script>alert('Nome ou Senha Incorrectos')</script>";
        };
        break;
        case"professor":
            if(($_POST["username"] && $_POST["senha"])!=null){
                $prof=new prof();
                $prof=login($_POST["username"],$_POST["senha"],$_POST["tipo_user"]);
            }else{
                echo"<script>alert('Nome ou Senha Incorrectos')</script>";
            };
            break;
        default;break;
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="estilos/forms.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
<body>
    <center>
        <div id="login">
            <div id="black_m"><img src="estilos/imagens/black_mamba_logo.png"/></div>
        <table>
        <form method="POST">
            <tr><td>Tipo de usuário:</td><td><?php $listar=new login;$listar->list_tipo()?></td><td><span>(Para Alpha)</span></td></tr>
            <tr><td>Username: </td><td><input type="text" name="username" placeholder="Insira o nome de usuário" id="texto"/></td></tr>
            <tr><td>Senha: </td><td><input type="password" name="senha" placeholder="Insira a senha" id="texto"/><td></tr>
            <tr><td><input type="submit" name="log" value="ENTRAR" id="texto"/></tr>
        </form>
    </table>
    </div>
    </center>
</body>`
4

1 に答える 1

2

データベースの使用に精通していますか?データベースのusersテーブル内にusername、password、access_levelsを保存するのが最適なオプションかもしれません。それ以外の場合は、スクリプトにユーザーのアクセス値をハードコーディングする必要があります。これを行うと、次のように特権値を定義するスイッチを作成できます。

$username=$_POST['user'];
switch $username {
  case "supercool_admin":
  $access_level="admin";
break;
  case "supercool_student":
  $access_level="student";
break;
  case "supercool_teacher":
  $access_level="teacher";
break;
  default:
  $access_level="none";
}

次に、コンテンツを表示するときに、access_levelをifステートメントまたは別のスイッチとして参照します。

例えば:

if($access_level=="admin") {
 //DISPLAY ADMIN CONTENTS
} elseif ($access_level=="teacher") {
 //DISPLAY TEACHER CONTENTS
} elseif ($access_level=="student") {
 //DISPLAY STUDENT CONTENTS
} else {
  echo "YOU DO NOT HAVE PERMISSION TO VIEW THESE CONTENTS";
}

また、post値を使用してルックアップを行うのではなく、post値を使用してデータベースに対して、または場合によってはスイッチ内で認証することをお勧めします。認証され、access_levelが定義されたら、それらの値をセッションに保存し、代わりにそれを参照します。

于 2012-06-06T21:26:49.540 に答える