2017-02-05 1 views
-1

Ich habe eine Menge Fragen wie diese hier gesehen, aber es scheint, als würde nichts davon helfen. Ich habe erst dieses Semester angefangen, PHP zu lernen und habe in der letzten Januarwoche formell angefangen, auf der Server-Seite zu arbeiten (gemäß Anweisungen des Lehrers).Header funktioniert nicht, bleibt im Log in Seite

Ich möchte, dass die Benutzer in der Lage sein, sich anzumelden und zu einer Begrüßungsseite weitergeleitet, aber wenn er versucht, sich anzumelden, es bleibt auf der gleichen Seite mit nichts

<?php 
ob_start(); 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$dbname = "dbadmin"; 

$dbcon = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if (isset($_POST["submit"])) { 
    if (!empty($_POST['loginUsername']) && (!empty($_POST['loginPassword']))) { 
     $username = $_POST['loginUsername']; 
     $password = $_POST['loginPassword']; 

     $query = mysqli_query($dbconn, "SELECT * FROM userstable WHERE username= '$username' AND userPassword = '$password'"); 
     $numrows = mysqli_num_rows($query); 
     if ($numrows !=0) { 
      while ($row = mysqli_fetch_assoc($query)) { 
       $dbusername = $row['loginUsername']; 
       $dbpassword = $row['loginPassword']; 

      } 
      if ($username == $dbusername && $password == $dbpassword) { 
       session_start(); 
       $_SESSION['sess_user']=$user; 
       header('Location: home.php'); 
      } else { 
       echo "Invalid Username or Password"; 
      } 
     } 
    } 
} 

?> 

passiert ich hinzugefügt haben ob_start(); Denn wie ich hier recherchiert habe, funktioniert es die meiste Zeit, aber nicht auf meinem Code.

Edit: Hier ist der HTML-Code:

<html> 
<head> 
    <title>DYLAN EVERYWHERE</title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 
    <div class="fullContainer"> 
     <div class="header"> 
      <h1>DYLAN'S WEBSITE BRAH</h1> 
     </div> 
     <div class="subtext"> 
      <h4>DYLAN'S NAME EVERYWHERE BRAH</h4> 
     </div> 
     <div class="loginBox"> 
      <form class="login"> 
       <h3>LOG ON TO DYLAN'S SITE BRAH</h3> 
       <input type="text" name="loginUsername" placeholder="DYLAN USERNAME BRAH"><br> 
       <input type="password" name="loginPassword" placeholder="DYLAN PASSWORD BRAH"> <br> 
       <input class="loginButton" type="submit" name="submit" value="Log In"> 
      </form> 
      <br> 
      <div class="registerText"> 
       <span style="color: black;"> 
        DONT HAVE AN ACCOUNT? DONT WORRY BRAH, SIGN UP <span class="here"><a href="register.php">HERE</a> BECAUSE DYLAN WEBSITE BRAH</span> 
       </span> 
      </div> 
     </div>  
    </div> 
</body> 
</html> 
+3

** Gefahr **: Sie sind ** anfällig für [SQL-Injection-Angriffe] (http://bobby-tables.com/) * * dass Sie sich selbst (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php) von [verteidigen] müssen. – Quentin

+0

Haben Sie das Handbuch gelesen? http://php.net/manual/en/function.header.php - die Beispiele dort zeigen Ihnen, was Sie vermissen. –

+0

'$ dbcon = new mysqli ($ dbhost, $ dbuser, $ dbpass, $ dbname);' - Einfach: Sie haben hier die falsche Variable '$ query = mysqli_query ($ dbconn' <<<) verwendet und die Fehlerberichterstattung hätte Ihnen gesagt über eine undefinierte Variable –

Antwort

-1

UPDATE: sorry diese Lösung nicht gültig, ich habe nicht seine Abfrage sehen. Diese Antwort ist, wenn er nur sollte in der while Schleife

if ($username == $dbusername && $password == $dbpassword) { 
    session_start(); 
    $_SESSION['sess_user']=$user; 
    header('Location: home.php'); 
} else { 
    echo "Invalid Username or Password"; 
} 

so sein Dieser Code SELECT * FROM userstable

tun:

if ($numrows !=0) { 
    while ($row = mysqli_fetch_assoc($query)) { 
     $dbusername = $row['loginUsername']; 
     $dbpassword = $row['loginPassword']; 

     if ($username == $dbusername && $password == $dbpassword) { 
      session_start(); 
      $_SESSION['sess_user']=$user; 
      header('Location: home.php'); 
     } else { 
      echo "Invalid Username or Password"; 
     } 

    } 
} 

Ihr Kopf fehlgeschlagen, weil, wenn der Code Looping, die Variable $dbusername und $dbpassword wurden während der Schleife ersetzt. Also, wenn die Schleife beendet ist, und starten Sie die if-Anweisung zu überprüfen, ob die Anmeldung identisch ist, die if-Anweisung nur die letzten Daten in Ihrer Tabelle, daher die fehlgeschlagene Anmeldung.

Aber natürlich müssen Sie den "Ungültiger Benutzername oder Passwort" Fehler auf andere Weise behandeln, denn wenn jetzt, Ihre Seite weiterhin die Fehlermeldung beim Durchschleifen der Daten anzeigen wird, bis es die gültigen Login-Details erreichen.

Ich schlage vor, Sie speichern die Nachricht in einer Variablen wie folgt aus:

$error = "Invalid Username or Password"; 

Dann können Sie einfach if($error != "") heraus die $ Fehlermeldung setzen überprüfen.

+0

Vielen Dank, aber ich habe es versucht und es funktioniert immer noch nicht –

+0

Oh mein Schlechter, tat ich Ihre Abfrage wird nicht angezeigt, Sie führen bereits eine Abfrage aus, um den Datensatz zu finden, der dem Benutzernamen und dem Kennwort entspricht. '' 'SELECT * FROM users table WHERE username = '$ username' AND userPassword = '$ password'" '' '. Meine Antwort ist, wenn Sie einfach tun '' 'SELECT * FROM users table''' –

-1

Dies ist ein guter Anfang. Hier ist meine Version ist:

<?php 
ob_start(); 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$dbname = "dbadmin"; 

$dbcon = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if (isset($_POST["submit"])) { 
    if (!empty($_POST['loginUsername']) && (!empty($_POST['loginPassword']))) { 
     $username = $_POST['loginUsername']; 
     $password = $_POST['loginPassword']; 

     $query = mysqli_query($dbcon, "SELECT * FROM userstable WHERE username= '$username' AND userPassword = '$password'"); 
     $numrows = mysqli_num_rows($query); 
     if ($numrows != 0) { 
      $results = mysqli_fetch_assoc($query); 
      $dbusername = $results['loginUsername']; 
      $dbpassword = $results['loginPassword']; 

      if ($username == $dbusername && $password == $dbpassword) { 
       session_start(); 
       $_SESSION['sess_user']=$username; 
       header('Location: home.php'); 
      } else { 
       echo "Invalid Username or Password"; 
      } 
     } 
    } 
} 

?> 

Sie brauchen nicht eine while() Schleife zu verwenden, wie Sie Daten sind immer eine Bedingung verwendet wird, sollte es nicht mehr sein, dann 1 Ergebnis mit einem Benutzernamen als $username und ein Passwort als $password.

Sie setzen auch $_SESSION['sess_user'] zu $user (die nicht existiert), also nehme ich an, dass Sie $username oder $dbusername gemeint haben.

Auch ein Tippfehler mit der Datenbankverbindung für Ihre Abfrage. $dbconn anstelle von $dbcon.

BEARBEITEN: Fügen Sie method="POST" in Ihrem HTML-Formular hinzu. Dies liegt daran, dass die Standardmethode eines Formulars eine GET-Anforderung ist.

<form class="login" action="file.php" method="POST"> 
    .... 

das action-Attribut zu Ihrem scrips Namen und Pfad Set

+0

Ich habe es versucht, aber es bleibt immer auf der Login-Seite.Es wird nicht nach home.php weitergeleitet –

+0

Sehen Sie die" Ungültige Benutzername oder Passwort "Nachricht wenn Senden des Formulars? – ScottSmudger

+0

nein, kein Text erscheint Hilft es, wenn ich den HTML-Code poste? –