2016-08-08 15 views
0

Ich habe so ein Problem mit einem kleinen Projekt, an dem ich gearbeitet habe. Ich versuche so viel wie möglich über HTML, PHP, MySQL usw. zu lernen. Ich habe eine Datenbank mit MySQL erstellt und ich weiß, dass ich das Setup richtig eingerichtet habe, weil die Login-Seite, die ich benutze, wissen kann, was ist die richtigen und falschen Benutzerkonten. Ich kann anscheinend nicht in der Lage sein, die Seite zu erhalten, um bei einer erfolgreichen Anmeldung auf die Begrüßungsseite umzuleiten. Hier ist mein Code.Die Anmeldeseite kann nicht umgeleitet werden, wenn Benutzeranmeldeinformationen eingegeben werden

Login-Seite-Code

<?php 
include("config.php"); 
session_start(); 

if($_SERVER["REQUEST_METHOD"] == "POST") { 
    // username and password sent from form 

    $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

    $sql = "SELECT id FROM admin WHERE username = '$myusername' and passcode = '$mypassword'"; 
    $result = mysqli_query($db,$sql); 
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
    $active = $row['active']; 

    $count = mysqli_num_rows($result); 

    // If result matched $myusername and $mypassword, table row must be 1 row 

    if($count == 1) { 
    session_register("myusername"); 
    $_SESSION['username'] = $myusername; 

    header("location: welcome.php"); 
    }else { 
    $error = "Your Login Name or Password is invalid"; 
    } 
} 
?> 
    <html> 

    <head> 
    <title>Login Page</title> 

    <style type = "text/css"> 
    body { 
     font-family:Arial, Helvetica, sans-serif; 
     font-size:14px; 
    } 

    label { 
     font-weight:bold; 
     width:100px; 
     font-size:14px; 
    } 

    .box { 
     border:#666666 solid 1px; 
    } 
    </style> 

    </head> 

    <body bgcolor = "#FFFFFF"> 

    <div align = "center"> 
    <div style = "width:300px; border: solid 1px #333333; " align = "left"> 
     <div style = "background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div> 

     <div style = "margin:30px"> 

      <form action = "" method = "post"> 
       <label>UserName :</label><input type = "text" name =  "username" class = "box"/><br /><br /> 
       <label>Password :</label><input type = "password" name = "password" class = "box" /><br/><br /> 
       <input type = "submit" value = " Submit "/><br /> 
      </form> 

      <div style = "font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div> 

     </div> 

    </div> 

    </div> 

</body> 
</html> 

Session-Code

<?php 
include('config.php'); 
session_start(); 

$user_check = $_SESSION['myusername']; 

$ses_sql = mysqli_query($db,"select username from admin where username = '$user_check' "); 

$row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC); 

$login_session = $row['username']; 

if(!isset($_SESSION['username'])){ 
    header("location:welcome.php"); 
} 
?> 

Weitergeleitete Seite

<?php 
include('session.php'); 
?> 
<html> 

<head> 
    <title>Welcome </title> 
</head> 

<body> 
    <h1>Welcome <?php echo $login_session; ?></h1> 
    <h2><a href = "logout.php">Sign Out</a></h2> 
</body> 

</html> 
<?php 
session_start(); 

if(session_destroy()) { 
    header("Location: login.php"); 
} 
strong text ?> 
+0

Sie mischen ** $ _ SESSION ['myusername']; $ row ['username'] ** und ** $ _ SESSION ['username'] ** –

+0

Und deine session.php ist falsch. Im Falle eines Fehlers wird es zu welcome.php umgeleitet, so dass Sie in einer Weiterleitungsschleife stecken bleiben werden –

+0

Und wenn die Anmeldeseite keinen Fehler wirft, wird echo $ error Fehler verursachen, was ziemlich lustig ist :). Do $ error = "" irgendwo –

Antwort

0
<?php 
session_start(); 
include("config.php"); 


if($_SERVER["REQUEST_METHOD"] == "POST") { 
// username and password sent from form 

$myusername = mysqli_real_escape_string($db,$_POST['username']); 
$mypassword = mysqli_real_escape_string($db,$_POST['password']); 

$sql = "SELECT id FROM admin WHERE username = '$myusername' and passcode = '$mypassword'"; 
$result = mysqli_query($db,$sql); 
$row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
$active = $row['active']; 

$count = mysqli_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 

if($count == 1) { 
    $_SESSION['username'] = $myusername; 
    header("Location: welcome.php"); 
}else { 
    $error = "Your Login Name or Password is invalid"; 
    header("Location: login.php?error=".$error); 
} 
} 
else { 

if (isset($_GET['error'])) { 
    echo $_GET['error']; 
} 

?> 
<html> 

<head> 
    <title>Login Page</title> 

    <style type="text/css"> 
     body { 
      font-family: Arial, Helvetica, sans-serif; 
      font-size: 14px; 
     } 

     label { 
      font-weight: bold; 
      width: 100px; 
      font-size: 14px; 
     } 

     .box { 
      border: #666666 solid 1px; 
     } 
    </style> 

</head> 

<body bgcolor="#FFFFFF"> 

<div align="center"> 
    <div style="width:300px; border: solid 1px #333333; " align="left"> 
     <div style="background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div> 

     <div style="margin:30px"> 

      <form action="" method="post"> 
       <label>UserName :</label><input type="text" name="username" class="box"/><br/><br/> 
       <label>Password :</label><input type="password" name="password" class="box"/><br/><br/> 
       <input type="submit" value=" Submit "/><br/> 
      </form> 

      <div style="font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div> 

     </div> 

    </div> 

</div> 

</body> 
</html> 
<?php 
} 
?> 

ist das Session-Code

<?php 
session_start(); 
include('config.php'); 


$user_check = $_SESSION['myusername']; 

$ses_sql = mysqli_query($db,"select username from admin where username = '$user_check' "); 

$row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC); 

$login_session = $row['username']; 

?> 

Weitergeleitete Seite

<?php 
include('session.php'); 
?> 
<html> 
<head> 
<title>Welcome </title> 
</head> 

<body> 
<h1>Welcome <?php echo $login_session; ?></h1> 
<h2><a href = "logout.php">Sign Out</a></h2> 
</body> 

</html> 
<?php 
session_start(); 

if(session_destroy()) { 
header("Location: login.php"); 
} 
?> 
+0

Ich habe versucht, Ihre Lösung Coder, aber wenn ich versuche, meine Login-Daten einzugeben, leitet es mich nirgends umleiten. Es gibt mir immer noch den Fehler, wenn ich den Benutzernamen und das Passwort falsch eintippe, aber ich werde überhaupt nicht umgeleitet. –

+0

ändern Sie einfach die Kopfzeile ("location: welcome.php") in die Kopfzeile ("Location: welcome.php") gleich mit login.php. Ich habe meine ans aktualisiert – coder

+0

Ja, das hat den Trick gemacht. Vielen Dank! –

0

Oh ... Sie können nicht Header nach einigen HTML-Elemente. Wenn Sie mit PHP umleiten wollen, müssen Sie es grundsätzlich vor dem Laden einstellen. Sie können nach wie vor einfach umleiten einige Javascript tho mit ...

<script>window.location="index.html";</script> 

, die Sie gerade gehen zurück zum Index macht, wenn Sie laufen lassen.

Ich hoffe, dass ich geholfen habe. Ich bin 19 und auf denselben Spuren wie du! habe Spaß!

+0

Nur um ein bisschen mehr zu helfen ... wenn Sie Header setzen, wird es Server Seite von Apache behandelt (Ihr PHP-Skript läuft). Da es serverseitig ist, wissen Sie nicht einmal, ob youre weitergeleitet oder nicht, da Ihr Client nur auf diese Anfrage wartet ... Aber mit JavaScript, öffnen Sie ein Fenster, so dass die Person diese Seite kurz vor dem Skript visualisieren kann läuft ... also pass auf, was du auf dieser einen Seite druckst. –

0
Try it, I think this is useful for you, 

header('Location: http://www.example.com/welcome.php'); 

und versuchen, den Speicherort von session_start() zu ändern; oben auf der Konfiguration.

+0

Wie hilft es ihm, sein Problem zu lösen? – coder

+0

Er Sitzung für Benutzernamen erstellen, und er will welcome.php Seite nach dem Login, Header() -Funktion gebe es. also empfahl ich ihm das, er fügt keinen ganzen Pfad in Header-Funktion hinzu. Wenn er die komplette Funktion hinzufügt, dann kann es funktionieren. –

0

Es gibt eine Reihe von Gründen sein kann. Am wahrscheinlichsten ist, dass das Skript nach dem Absetzen des Headers nicht beendet wird. Beachten Sie, dass header() lediglich einen Header zur Seite hinzufügt, die weitere Ausführung jedoch nicht stoppt. Die Anmeldeseite erkennt also Ihre Anmeldung, gibt den Redirect-Header aus, aber die Ausführung wird fortgesetzt und das Anmeldeformular wird erneut gerendert, wodurch die Weiterleitung gestoppt wird.

Vorschlag: Put exit; nach dem header() Anruf.

Ein weiterer möglicher Grund ist, dass etwas ausgegeben wird, bevor der Header ausgeht. I.e. Wenn Sie versehentlich einen Text erzeugen und dann header(...) aufrufen - der Header wird nichts tun. Dieses Problem kann von PHP erkannt werden, in diesem Fall sollten Sie eine Warnung erhalten. Stellen Sie sicher, dass Sie Fehler und Warnungen aktiviert haben - stellen Sie sicher, dass error_reporting auf E_ALL gesetzt ist und display_errors in Ihrer Ini-Datei on ist. Dies wird Ihnen helfen, während der Entwicklung viele Probleme zu erkennen.

Sie würden auch von ein paar Debugging-Tools profitieren, um zu verstehen, was in diesem Fall falsch läuft. In der Reihenfolge der Einfachheit, sofort zu verwenden:

  1. Browser-Dev-Tools. Klicken Sie mit der rechten Maustaste auf die Seite in Ihrem Browser und wählen Sie Inspizieren. Es öffnet sich die Browser-Entwicklungstools. Insbesondere sind Sie an der Registerkarte Netzwerkanfragen interessiert. Wechseln Sie dazu und reichen Sie das Anmeldeformular erneut ein. Sie sehen die Anfrage auf der Registerkarte.Untersuche es: War der Header dort? War die Methode wie gewünscht? Was war der Antwortkörper?

  2. Debugging-Proxy. Z.B. Fiddler für Windows, Charles für OSX. Dies ist eine Software, die Ihnen hilft, alle Anfragen Ihres Browsers zu sehen. Wenn Ihr Workflow über mehrere Weiterleitungen verfügt, werden auf der Registerkarte "Netzwerk" des Browsers nur die letzte Anfrage angezeigt. Während der Proxy alle URLs speichert, können Sie untersuchen, wie sich der Fall entwickelt hat.

  3. PHP Debugger - installieren und aktivieren Sie Xdebug, richten Sie Ihre IDE (verwenden Sie eine?), Um das zu verwenden. Es wird Ihnen helfen, durch den PHP-Code zu gehen und zu sehen, ob der Algorithmus tatsächlich richtig funktioniert hat.

Verwandte Themen