2016-10-02 11 views
0

Ich brauche etwas Hilfe mit meinem Login-Skript. Ich versuche nur, PHP und Mysqli selbst zu unterrichten und bleibe dabei, damit jeder Rat/jede Hilfe sehr geschätzt wird.führen Sie eine andere Abfrage nach erfolgreicher Anmeldung

Der tatsächliche Teil, der die Login-Daten überprüft, funktioniert und leitet dem Benutzer eine Seite, wenn die Übereinstimmung gefunden wird oder zurück zur Login-Seite, falls nicht erfolgreich.

Was ich geschehen möchte, ist, sobald der Benutzername überprüft wurde und die Sitzungen die Sitzung 'Benutzer' verwenden, um dann den gleichen Benutzer aus der Schüler- oder Lehrer-Tabelle abhängig von der Sitzung 'member_type' zu finden. Die Sitzung 'user' wird als die 'user_id' festgelegt, die in der Login-Tabelle und der Tabelle, in der die restlichen Details gespeichert sind, identisch ist und der Primärschlüssel beider Tabellen ist.

<?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 

Gerade jetzt funktioniert das gut, aber ich möchte den letzten IF-Teil des Skripts mit etwas wie diesem ersetzen (oder einen besseren Vorschlag?).

//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); 

Sollte ich eine weitere Zählfunktion in diesem Teil setzen?

//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); 

Und hier?

//header("location:control_panel.php"); 
//} 
//} 

Wie gesagt, ich versuche, mir ein paar neue Fähigkeiten zu Hause haben wahrscheinlich so zu lehren, einige Junge Fehler Grundschule gemacht hier und etwas verpasst offensichtlich

+0

weil Sie Ihren Ausgang vermissen; nach Ihrer header() Methode. – KDOT

+0

Sieht aus wie Sie Passwörter im Klartext speichern PHP bietet ['password_hash()'] (http://php.net/manual/en/function.password-hash.php) und ['password_verify()'] (http://php.net/manual/en/function.password-verify.php) benutzen Sie sie bitte. Und hier sind einige [gute Ideen über Passwörter] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Wenn Sie eine PHP-Version vor 5.5 verwenden [gibt es ein Kompatibilitäts-Pack hier] (https : //github.com/ircmaxell/password_compat) – RiggsFolly

+0

Ihr Skript ist [SQL Injection Attack] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) Werfen Sie einen Blick auf, was mit [Little Bobby Tables] passiert ist (http://bobby-tables.com/) Sogar [Wenn Sie Eingaben entgehen, ist es nicht sicher!] (http://stackoverflow.com/) questions/5741187/sql-injection-das-kommt-um-mysql-real-escape-string) Verwenden Sie [vorbereitete parametrisierte Anweisungen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements. php) – RiggsFolly

Antwort

0

isset() prüft, ob eine Variable gesetzt ist oder nicht, aber Sie möchten den Wert überprüfen. So ist deine if (isset($_SESSION['member_type'])) immer wahr, für Schüler und Lehrer. Versuchen Sie

if ($_SESSION['member_type'] == 'pupil') { 
    header("Location:mydashboard.php"); 
} 

stattdessen.

Und ein weiterer Vorschlag, Refaktor Ihrer Datenbank-Design. Verwenden Sie besser keine Lehrer- und Schüler-Tabelle, die userIds enthält, sondern eine userType-Tabelle, die nur zwei Zeilen enthält (Schüler/Lehrer) und fügen Sie dann eine userTypeId zu Ihrer Benutzer-Tabelle hinzu. Fügen Sie außerdem einen Fremdschlüssel von user.userTypeId zu userType.id hinzu, um sicherzustellen, dass jeder Benutzer mit einem vorhandenen userType verknüpft ist.

Mit diesem Design benötigen Sie keine weitere Abfrage, um festzustellen, ob ein Benutzer ein Schüler oder ein Ausbilder ist.

Verwandte Themen