ログインスクリプトで何か助けが必要です。私はちょうどphpとmysqliを自前で教えようとしていて、これで固執していますので、どんなアドバイスや助けも大歓迎です。ログインが成功したら別のクエリを実行してください
ログインの詳細をチェックする実際の部分は、一致するものが見つかった場合はページを、失敗した場合はログインページに戻るように指示します。
私は、ユーザー名が確認され、セッション 'user'を使用してセッション 'member_type'に応じて、瞳孔または講師のテーブルから同じユーザーを見つけることができます。セッション 'user'はログインテーブルと同じ 'user_id'に設定され、残りの詳細は保存され、両方のテーブルの主キーとなります。
<?php
include_once ("includes/dbconnect.php");
session_start();
$error="";
if (isset($_POST['btn_signin'])) {
// username and password received from loginform
$username=mysqli_real_escape_string($conn,$_POST['username']);
$password=mysqli_real_escape_string($conn,$_POST['user_password']);
$sql_checklogin="SELECT * FROM user_logins WHERE username='$username' and password='$password'";
$result=mysqli_query($conn,$sql_checklogin);
$login=mysqli_fetch_array($result,MYSQLI_ASSOC);
$count=mysqli_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1)
{
// Set Sessions
$_SESSION['logged_in']=TRUE;
$_SESSION['user']=$login['user_id'];
$_SESSION['member_type']=$login['reg_type'];
} else {
header("location:login.php");
$error = "Invalid Username or Password!";
}
}
//This part to be replaced with code that checks both tables to find the user details
if (isset($_SESSION['member_type'])) {
header("Location:mydashboard.php");
}
?>
//The above code works and allows user to login but sends both member types to same page
ちょうどこれでうまくいきますが、私はスクリプトの最後のIF部分をこのようなもの(またはより良い提案?)に置き換えたいと思います。
//if (isset($_SESSION['member_type'])=='pupil' {
//$sql_findpupil="SELECT * FROM pupils WHERE user_id='$_SESSION['user']'";
//$result=mysqli_query($conn,$sql_findpupil);
//$pupil=mysqli_fetch_array($result,MYSQLI_ASSOC);
この部分に別のカウント機能を追加する必要がありますか?
//header("location:mydashboard.php");
//}elseif (isset($_SESSION['member_type'])=='instructor' {
//$sql_findinstructor="SELECT * FROM instructors WHERE user_id='$_SESSION['user']'";
//$result=mysqli_query($conn,$sql_findinstructor);
//$instructor=mysqli_fetch_array($result,$MYSLQI_ASSOC);
ここには?
//header("location:control_panel.php");
//}
//}
私が言ったように 、私は自宅でいくつかの新しいスキルはとてもおそらく、ここでいくつかの基本的な学校の男の子の誤りを犯したと変数が設定されているかどうか
あなたの出口が不足しているためです。あなたのheader()メソッドの後。 – KDOT
パスワードを平文で保存しているようです。PHPは['password_hash()'](http://php.net/manual/en/function.password-hash.php) と['password_verify()']を提供していますhttp://php.net/manual/en/function.password-verify.php)それらを使用してください。 ここにいくつかの[パスワードに関する良いアイデア]があります(https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) 5.5より前のバージョンのPHPを使用している場合は、[互換パックがあります](https ://github.com/ircmaxell/password_compat) – RiggsFolly
あなたのスクリプトは[SQL Injection Attack]の危険にさらされています(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) [Little Bobby Tables](http://bobby-tables.com/)に何が起こったかを見てください。 [入力を逃れているなら、その安全ではありません!](http://stackoverflow.com/質問/ 5741187/sql-injection-that-gets-around-mysql-real-escape-string) [prepared parameterized statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements)を使用してください。 php) – RiggsFolly