2016-11-04 2 views
-1

Ich bin ziemlich neu mit PHP-Programmierung und immer noch selbst vertraut mit den Methoden und Syntax. Im Moment habe ich noch kein Wissen über session.Umleiten auf eine andere Seite, wenn Login gültig ist, sonst auf der gleichen Seite bleiben

Ich möchte der Benutzer eine Nachricht erhalten, dass der "Benutzer nicht existiert oder falsche Login-Daten", wenn er/sie falsche Login-Daten auf dem Formular eingibt. Andernfalls leiten Sie den Benutzer zur nächsten Seite weiter.

Ich versuchte, die header() Methode von PHP, aber wenn ich es nach der Zeile alert() Nachricht setzen, meine alert() Meldung nicht einmal.

nextpage.php

<?php 
    if(isset($_POST['btnLogin'])){ 
    $con = mysqli_connect("localhost","root","","myDb")or die("cannot connect"); 
    if(!$con){ 
     die("Connection failed: " . mysqli_connect_errno()); 
    } 

    $studentNo = $_POST['studentNo']; 
    $username = $_POST['userName']; 
    $password = $_POST['password']; 

    $selectQuery = "SELECT * FROM registered WHERE student_no = '$studentNo' AND username = '$username' AND password = '$password' "; 
    $result = mysqli_query($con,$selectQuery); 

    if(mysqli_num_rows($result) == 0){ 
     echo '<script language="javascript">'; 
     echo 'alert("User doesn\'t exist or incorrect login details")'; 
     echo '</script>'; 
     header("Location: login.php"); //take user back to login.php if user doesn't exist 
    }else{ 
     //do this if user exists 
     //get Parameters for studentNo, userName, password 
    } 
    } 
?> 

login.php

<form action="nextpage.php" method="POST"> 

    <label>Student No</label> 
    <input type="text" name="studentNo" placeholder="Student No" required /> 
    <br /> 
    <label>Username</label> 
    <input type="text" name="userName" placeholder="Username" required /> 
    <br /> 
    <label>Password</label> 
    <input type="password" name="password" placeholder="Password" required /> 
    <br /> 
    <button type="submit" name="btnLogin">Login</button> 
</form> 

header() nimmt Benutzer zurück zu login.php aber die Nachricht nicht angezeigt werden soll.

Gibt es noch einen anderen besseren Weg zu tun, was ich versuche zu tun? Überprüfen Sie zuerst die Anmeldedaten, bevor Sie auf die zweite Seite umleiten. Andernfalls nicht umleiten.

Ich recherchierte und fand, dass ich Daten über <form> oder andere Javascript-Syntax veröffentlichen kann. Ich würde es vorziehen zu lernen, wie man es mit einfach php und html

ich hoffe, Sie können mir helfen.

Vielen Dank.

+3

Beantworten Sie dies würde einen Aufsatz über SQL-Injektion, Binding-Parameter, Passwort-Hashing, möglicherweise Server-Client-Architektur und TLS-Verschlüsselung aaaaa und wie HTTP-Weiterleitungen verwenden ... – CD001

+0

Ich könnte nicht mehr mit CD001 zustimmen. Ich kann nur empfehlen, dass Sie mehr über PHP und SQL-Datenbanken recherchieren. Machen Sie auch nicht den Unterschied für serverseitige Sprachen und clientseitige Sprachen, die Reihenfolge, in der sie ausgeführt werden usw., die Ihnen helfen zu verstehen, warum die Verwendung von serverseitigem 'header()' Ihre clientseitige 'alert() stoppt 'vom Laufen. – NewToJS

Antwort

0

Sie können eine Nachricht auf der Anmeldeseite selbst anzeigen, indem Sie einen Wert auf die Kopfzeile selbst setzen und eine if-Anweisung in Ihrer login.php haben.

Zum Beispiel, ändern Sie Ihre Header header("Location: login.php?error=1");

Und auf login.php-Datei, fügen Sie diese.

if(isset($_GET['error']) && $_GET['error'] == "1") { echo '<div class="alert alert-danger">Login failed</div> }

EDIT: Nachdem CD001 Kommentar gesehen, würde ich empfehlen, auf Lesen auf php mysql & wie besser, sich von SQL-Injektionen zu schützen usw. Here ist ein guter Anfang.

0

Zunächst können Sie keine header() senden, wenn Sie bereits echo 'ed-Ausgabe haben.

Zweitens wird die Warnung nie angezeigt, auch wenn Umleitung würde funktionieren, weil die <script> nicht auf login.php ist. Es ist nicht magisch irgendwo gespeichert, um später aufzutreten.

0

Mit Session Sie diese

In Ihrem Login tun kann.php vor HTML-Code setzen diese

<?php 
session_start(); 
?> 

Dies wird die Sitzung starten. Wenn der Benutzer das Formular abschickt, in nextpage.php, müssen Sie zuerst wieder session_start(); auf dem Skript setzen, nachdem die Benutzer-Authentifizierung zu tun, Sie Session wie diese

if(mysqli_num_rows($result) == 0){ 
    header("Location: login.php?error=User doesnot exists"); //take user back to login.php if user doesn't exist 
}else{ 
    //do this if user exists 
    //get Parameters for studentNo, userName, password 
    $_SESSION['user_id'] = '<userId>'; 
    //.. 
    header("Location: <secure_page>"); 
} 

Im secure_page festlegen können, wo Sie‘ ve umgeleitet setzen den Benutzer, dass pHP-Skript wieder auf dem Skript session_start(); und dass Sie nach Sitzung

if (!isset($_SESSION['user_id']) || $_SESSION['user_id'] != "") { 
    header("Location: login.php?error=access denied"); 
} 

überprüfen Dies wird sicherstellen, dass nicht authentifizierte Benutzer nicht auf diese Seite zugreifen können.

Über das Thema nicht auf die Warnung zeigt

In Ihrem Skript sind, wo Sie Javascript-Code verwenden, dort finden Sie den Typ hinzufügen müssen.

echo '<script type="text/javascript" language="javascript">'; 

Ein weiteres Problem mit dem Code ist javascript nur ausgeführt wird, nachdem Sie Seite sind geladen, aber nach all den Echo sind Sie header("location:login.php"); mit denen der Benutzer umleitet Javascript alert

+1

... Ich bin mir ziemlich sicher, dass das eine ganz andere Frage beantwortet ?! – CD001

+0

Dies ist wie ein 10-sekündiges Tutorial über die Verwendung von Sitzungen, dies beantwortet nicht das Problem mit dem 'alert()' und Weiterleiten, das ist die Frage ... Nicht wie man Sitzungen verwendet. – NewToJS

0

Well ohne zu zeigen, wie andere sagte, dass es bessere Möglichkeiten, dies zu tun, aber wenn Sie immer noch mit Ihrer Lösung gehen wollen, dann wird dies für Sie arbeiten:

echo '<script language="javascript">'; 
echo 'alert("User doesnt exist or incorrect login details");'; 
echo 'location.href="http://www.yoursite.com/login.php";'; 
echo '</script>'; 

die pHP entfernen er Aderumleitung.

Verwandte Themen