Login-Skript erweitern

Kaeschdin

Erfahrenes Mitglied
Hallo zusammen,

auf der Suche nach einem einfachen Login-Skript bin ich auf diese Seite gestoßen:

http://www.administrator.de/php_-_einfaches_login_script_mit_sessions.html

Klappt auch alles ganz gut, ABER:

Laut diesem Skript ist eine Fehlermeldung ("Bitte fülle beide Felder aus") nur vorgesehen, wenn eines der beiden Felder nicht ausgefüllt wurde. Wenn nun aber ein Feld (oder beide) FALSCH ausgefüllt wurden, kommt keine Fehlermeldung (der Inhalt der richtigen Zielseite wird aber auch nicht angezeigt - der Inhaltsbereich ist einfach leer).

Wie muss das Skript erweitert werden, um bei falschen Nutzer-/Passwortdaten eine Fehlermeldung auszugeben?

Danke und viele Grüße,

Kerstin
 
PHP:
<?php

$user = '';
$pw = '';

//nun kommen die if abfragen die das ganze relativ sicher machen 
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
	//post variablen einfach speichern 
	$user = trim($_POST['user']); 
	$pw = trim($_POST['pw']); 
	
	if(empty($user) || empty($pw))
	{ 
	    echo "<b>Bitte fülle  ";
	    if (empty($user)) echo 'das Feld User ';
	    if (empty($user) && empty($pw)) echo 'und ';
	    if (empty($pw)) echo 'das Feld Passwort ';
		echo "aus!</b>"; 
	} 
	elseif ($user == $user_name AND $pw == $user_pass) 
	{ 
	    $_SESSION['user'] = $user; 
	    $_SESSION['pw'] = $pw; 
	    header('Location: index2.php'); 
	    exit();
	}
	else
	{
		echo '<b>Falscher User oder falsches Passwort!</b>';
	}
} 


echo '<form name="login" method="post" action="'.$_SERVER['PHP_SELF'].'"> 
User Name: <input type="text" name="user" value="'.$user.'"> User Passwort:  <input type="password" name="pw" value="'.$pw.'"> 
<input type="submit" name="Submit" value="einloggen"> 
</form>'; 

?>


Da header() so nicht mehr funktioniert, solltest du das Script ganz am Anfang vor dem HTM-Code stellen und die Ausgaben in einer Variable speichern...
Habs leider nicht getestet!
 
Zuletzt bearbeitet:
Danke erstmal.

Im alten Skript standen der korrekte Username und das Passwort drin (ist immer gleich). Bei dir finde ich das jetzt nicht.
 
Nutzername und Passwort kannst du einfach durch
PHP:
$user_name = "<hier benutzername einfügen>";
$user_pass  = "<hier passwrot einfügen>";
selbst bestimmen. das ganze fügst du einfach zwischen
PHP:
    $user = trim($_POST['user']); 
    $pw = trim($_POST['pw']);
und
PHP:
    if(empty($user) || empty($pw))
ein.

Gruß
 
@Kaeschdin

Sieht jetzt besser aus

PHP:
<?php
//login script 

//session beginnen, immer ganze oben vor html Ausgabe! 
session_start(); 

//Passwort und Benutzername wird hier Manuell eingestellt 
//diese Daten musst du anpassen 
$user_name = "test"; 
$user_pass = "123456"; 

$login_msg = '';

/*
 Hier kommt mein Script rein
 anstatt 'echo benutze'' '$login_msg .= '
 */

//html ausgabe
// Hier brauchst du kein PHP mehr!
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
...
...
<?php
// $login_msg
if (!empty($login_msg)) echo $login_msg;
?>
<!-- Formular -->
<form name="login" method="post" action="<?=$_SERVER['PHP_SELF']?>"> 
User Name: <input type="text" name="user" value="<?=$user?>"> User Passwort:  <input type="password" name="pw" value="<?=$pw?>"> 
<input type="submit" name="Submit" value="einloggen"> 
</form>
<!-- Formular Ende -->
...

//edit:
Es fehlte eine geschlossene Klammer!
Mein Editor meckert ja sofort, aber in einer Textbox nicht ;)
 
Zuletzt bearbeitet:
Irgendwas passt nicht.

Er meckert darüber:

if (!empty($login_msg) echo $login_msg;

Und zwar: Parse error: syntax error, unexpected T_ECHO ...

Vielleicht liegt es aber auch an mir. PHP ist nicht mein Ding.

Im Prinzip brauche ich die index2.php aus dem von mir geposteten Link nicht. Ich möchte ein Formular, wo ich User und PW eingebe und bei richtiger Eingabe auf der Seite login.html lande.

Ich habe jetzt vor <!DOCTYP... in meiner php-Datei den Teil deines zuletzt geposteten Skripts eingefügt, der auch dort vor <!DOCTYP ... steht. Muss ich an dem Teil was ändern? Weil da ja drin steht: /*
Hier kommt mein Script rein
anstatt 'echo benutze'' '$login_msg .= '
*/

Den Rest habe ich 1:1 im Inhalts-DIV eingefügt.
 
Naja, in der Fehlermeldung steckt doch schon alles drin :)

unexpected T_ECHO bedeuted, dass du irgendwo eine Ausgabe machen willst, die vorherige Anweisung aber nicht abgeschlossen ist. Da fehlt mit hoher Wahrscheinlichkeit nur ein Semikolon.
Nach unexpected T_ECHO steht "in yyy.php on line xx", also tritt der Fehler in der Datei yyy.php in Zeile xx auf.
 
//edit:
Es fehlte eine geschlossene Klammer!
Mein Editor meckert ja sofort, aber in einer Textbox nicht ;)

Geändert von crazy_root (29.08.08 um 17:11 Uhr).

Wenn die Zielseite eine HTML-Datei ist, kann jeder direkt darauf zugreifen!

Der Grund liegt daran, dass du den Fehler ganz oben im Skript per echo ausgibst und nicht speicherst und in unten (so wie ich es geschrieben habe) ausgibst...
 
Zurück