| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

11-04-2010, 01:24
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Probleme bei Login-Script
Hi Leute!
Habe da ein Problem mit meinem Login-Script.
Also der Login, sowie der Logout funktionieren. Selbst der Seitenschutz, also das man auf die gesicherten Seiten ohne Login nicht zugreifen kann funktioniert, aber irgendwie bekomme ich es nicht hin, das wenn ein User nicht registriert ist oder falsche Angaben gemacht hat eine Fehlermeldung per 'echo' auszugeben.
Zur Information, das Login-Formular leitet direkt auf die sichere Seite. Im Quelltext der sicheren Seite wird zu allererst die DB-Connection inkludiert und anschließend die login.php.
Innerhalb der login.php wird das Formular ausgewertet.
Hier mal der Quelltext der meiner Index.php
Code:
<?php
if (!isset($_SESSION)) {
session_start();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Sass-Content</title>
<link href="sc/dateien/sc_standard.css" rel="stylesheet" type="text/css">
<link href="sc/dateien/sc_login.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
?>
<div id="Layer1">
<div id="Layer2">
<div id="Layer3">
<form name="login" method="post" action="sass-content.php" >
<input name="benutzer" type="text" tabindex="0" value="Benutzer" onFocus= (value="")>
<input name="pass" type="password" value="Passwort" onFocus=(value="")>
<input name="login_btn" type="submit" class="btn" value="Login">
</form>
</div>
<div id="Layer4">
<?php
if (isset($log)) {
echo 'Login inkorrekt!';
}
if (isset($meldung) ) {
echo 'Bitte anmelden';
}
if (isset($logout)) {
echo 'Sie haben sich erfolgreich abgemeldet!';
session_destroy();
}
?>
</div>
</div>
</div>
</body>
</html>
Und hier der Quelltext der login.php:
Code:
<?php
//Session starten. (ACHTUNG! Muss vor allem anderen stehen, sonst gibt's eine Fehlermeldung!)
if (!isset($_SESSION)) {
session_start();
}
//Übergebener POST-Inhalt wird in Variablen geschrieben.
$benutzer = $_POST['benutzer'];
$pass = $_POST['pass'];
//Wenn $benutzer existiert, wird geprüft ob ein Ergebnis vorliegt.
if(isset ($benutzer)) {
$login = "select benutzer from login where benutzer='".$benutzer."' and
passwort='".$pass."'";
$result = mysql_query($login) or die(mysql_error());
//Sollte kein Ergebnis vorliegen, wird zum Login-Formular weitergeleitet und eine
Fehlermeldung ausgegeben.
if(!($row = mysql_fetch_row($result))) {
header("Location: index.php?log=1");
}else{
//Liegt ein Ergebnis vor, werden die Daten in die Session geschrieben.
$_SESSION['angemeldet'] = "ja";
$sclogin = "select vorname, nachname from benutzer where benutzername ='".$benutzer."'
and passwort ='".$pass."'";
$scresult = mysql_query($sclogin) or die(mysql_error());
$user = mysql_fetch_assoc($scresult);
$_SESSION['vorname'] = $user['vorname'];
$_SESSION['nachname'] = $user['nachname'];
}
}else {
//Weiterleitung zum Anmeldeformular
header("Location: index.php?meldung=1");
}
?>
Geändert von deisi (12-04-2010 um 22:28 Uhr)
|

11-04-2010, 02:20
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
dein Login ist nicht gegen SQL-Injections abgesichert und ist auf register_globals angewiesen. Du solltest es so umschreiben ($_GET- und $_POST-Variablen mit isset benutzen), dass es auch in Umgebungen ohne register_globals funktionieren kann.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

11-04-2010, 03:32
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Login Script Problem
Ok, habe mich mit dem Thema SQL Injections noch nicht wirklich auseinander gesetzt.
Am Beispiel index.php
Original Code
Code:
if (isset($log)) {
echo 'Login inkorrekt!';}
ändern in (?)
Code:
if(isset($_POST['log'])) {
echo 'Login inkorrekt!';}
Am Beispiel login.php
Original Code
Code:
$benutzer = $_POST['benutzer'];
$pass = $_POST['pass'];
ändern in (?)
Code:
if(isset($_POST['benutzer'])) {
$benutzer = $_POST['benutzer'];
$pass = $_POST['pass'];
}
Bin ich da richtig oder verstehe ich da jetzt gerade was falsch?
Bezüglich des Code-Breaks, kann ich diesen hier im Forum einstellen oder muss ich ihn extern vornehmen bevor ich poste?
|

11-04-2010, 04:35
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Du hast es richtig verstanden. Auch die Prüfungen mit isset sehen nach sauberem Code aus.
Was du mit Code-Breaks meinst, ist mir nicht ganz klar, aber es gibt hier allgemeine Code-Tags und spezielle für PHP, die du bitte für PHP-Code benutzt.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

11-04-2010, 13:24
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Post || get
Also ich hatte meinen Code jetzt vollständig umgeschrieben, doch die $_POST Variablen wollten einfach nicht von der login.php auf die index.php gesendet werden.
Ich habe es dann so umgeschrieben das die login.php $_GET Variablen zurückgibt, jetzt funktioniert es.
Ich hänge das Listing noch einmal dran, falls noch irgendwelche Fehler seitens SQL Injections sein sollten, oder falls ihr noch einen Tipp für mich habt, wieso meine $_POST Variablen nicht funktioniert haben, einfach drauf los posten!
Greetz
dEiSi
index.php
PHP-Code:
<?php if (!isset($_SESSION)) { session_start(); } ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Sass-Content</title> <link href="sc/dateien/sc_standard.css" rel="stylesheet" type="text/css"> <link href="sc/dateien/sc_login.css" rel="stylesheet" type="text/css">
</head>
<body> <?php ?> <div id="Layer1"> <div id="Layer2"> <div id="Layer3"> <form name="login" method="post" action="sass-content.php" > <input name="benutzer" type="text" tabindex="0" value="Benutzer" onFocus= (value="")> <input name="pass" type="password" value="Passwort" onFocus=(value="")> <input name="login_btn" type="submit" class="btn" value="Login"> </form> </div> <div id="Layer4"> <?php if (isset($_GET['log']) & $_GET['log'] = "1") { echo 'Login inkorrekt'; die; } if (isset($_GET['meldung']) & $_GET['meldung'] = "1" ) { echo 'Bitte anmelden'; die; } if (isset($_GET['meldung']) & $_GET['meldung'] = "2" ) { echo 'Bitte geben Sie Ihre Login-Daten ein!'; die; } if (isset($_GET['logout']) & $_GET['logout'] = "1") { echo 'Sie haben sich erfolgreich abgemeldet!'; session_destroy(); } ?> </div> </div> </div>
</body> </html>
login.php
PHP-Code:
<?php //Session starten. (ACHTUNG! Muss vor allem anderen stehen, sonst gibt's eine Fehlermeldung!) if (!isset($_SESSION)) { session_start(); } if (isset($_POST['benutzer']) & isset($_POST['pass'])) { if (!($_POST['benutzer'] == "" || $_POST['benutzer'] == "Benutzer") & !($_POST['pass'] == "" || $_POST['pass'] == "Passwort")) { //Übergebener POST-Inhalt wird in Variablen geschrieben. $benutzer = $_POST['benutzer']; $pass = $_POST['pass']; } else { header("Location: index.php?meldung=2"); } } //Wenn $benutzer existiert, wird geprüft ob ein Ergebnis vorliegt. if(isset ($benutzer)) { $login = "select benutzer from login where benutzer='".$benutzer."' and passwort='".$pass."'"; $result = mysql_query($login) or die(mysql_error()); //Sollte kein Ergebnis vorliegen, wird zum Login-Formular weitergeleitet und eine Fehlermeldung ausgegeben. if(!($row = mysql_fetch_row($result))) { $_POST['log'] = 1; header("Location: index.php?log=".$_POST['log'].""); }else{ //Liegt ein Ergebnis vor, werden die Daten in die Session geschrieben. $_SESSION['angemeldet'] = "ja"; $sclogin = "select vorname, nachname from benutzer where benutzername ='".$benutzer."' and passwort ='".$pass."'"; $scresult = mysql_query($sclogin) or die(mysql_error()); $user = mysql_fetch_assoc($scresult); $_SESSION['vorname'] = $user['vorname']; $_SESSION['nachname'] = $user['nachname']; } }else { //Weiterleitung zum Anmeldeformular header("Location: index.php?meldung=1"); } ?>
Geändert von deisi (12-04-2010 um 22:24 Uhr)
|

11-04-2010, 13:27
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Das wundert mich nicht (ist mir aber auch nicht eher aufgefallen).
Du leitest ja nur mit header um, also sind alle Parameter GET-Parameter. POST-Daten bekommst du nur, wenn du ein Formular mit method="POST" abschickst.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

11-04-2010, 14:02
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Ja jetzt wo du es sagst leuchtet es mir auch ein.
Danke nochmal für deine Hilfe!
Greetz
dEiSi
|

11-04-2010, 23:43
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Du verwechselst in deinem Code oft == und =. Das erste ist ein Vergleich, das letztere eine Zuweisung, mit der du deine Daten manipulierst, was fatale Auswirkungen haben kann.
Außerdem verwendest du oft & statt &&, was in deinem Fall zwar keinen großen Unterschied macht, aber in anderen Fällen ebenfalls fatale Auswirkungen haben kann.
Bitte mach dich also nochmal über alle Operatoren schlau.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-04-2010, 22:19
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Problem mit Link in einer SESSION
Ja da hast du recht.
Hab mir gerade die ganzen Operatoren noch mal angeschaut, muss mir das nochmal einbleuen!
Habe jetzt allerdings schon wieder ein Problem.
Habe den Login durchgeführt, komme also auf meine gesicherte Seite.
Wenn ich nun allerdings einen Link auf dieser Seite anklicke, der intern weiterführen soll, werde ich direkt wieder auf die Login-Seite geleitet.
Die Links sehen ungefähr so aus:
sass-content.php?Benutzerverwaltung
Habe dazu dann auch eine If-Anweisung geschrieben, das wenn die $_GET z.b. Benutzerverwaltung lautet, gewisse Daten aus der Datenbank geholt, in ein assoziatives Array geladen und ausgegeben werden sollen.
Naja, hier mal das Listing, falls mir jemand weiterhelfen kann!
PHP-Code:
if (isset($_GET)) { if ($_GET = "Start") { $backend = "select * from backend_nav"; $menu = mysql_query($backend) or die (mysql_error()); $backendmenu = mysql_fetch_assoc($menu); } else { if ($_GET = "Einstellungen") { $backend = "select * from options_nav"; $menu = mysql_query($backend) or die (mysql_error()); $backendmenu = mysql_fetch_assoc($menu); } else { if ($_GET = "Benutzerverwaltung") { $backend = "select * from user_nav"; $menu = mysql_query($backend) or die (mysql_error()); $backendmenu = mysql_fetch_assoc($menu); } else { if ($_GET = "Seitenverwaltung") { $backend = "select * from site_nav"; $menu = mysql_query($backend) or die (mysqlerror()); $backendmenu = mysql_fetch_assoc($menu); } else { if ($_GET = "Contentverwaltung") { $backend = "select * from content_nav"; $menu = mysql_query($backend) or die (mysql_error()); $backendmenu = mysql_fetch_assoc($menu); } } } } } }
|

12-04-2010, 23:03
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Solche if-Ketten postest du bitte mit den üblichen Einrückungskonventionen, damit man sieht, was wohin gehört.
Das Session-Handling ist jetzt nur nicht gepostet oder fehlt das in der Datei wirklich?
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-04-2010, 23:12
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
???
Ähm, nee ich glaube das fehlt wirklich.
Habe jetzt aber ehrlich gesagt auch noch keinen Plan wie das von statten geht.
Hast du mir da einen kleinen Tipp bzw. eine Site auf der ich nachschauen kann und es mehr oder weniger gut erklärt wird?
Danke schonmal!
Grüße
|

12-04-2010, 23:15
|
|
2Bad4You
Registrierter Benutzer
|
|
Registriert seit: Jun 2007
Beiträge: 101
|
|
Also ich glaube überall wo sowas wie
PHP-Code:
if ($_GET = "Einstellungen") {
steht, da müsstest du das einfache Gleichhaltszeichen mit einen doppelten Ersetzen. Ein einfaches ist ja nur eine zuweisung bzw definition und dürfte in deinem fall ja dann immer wahr sein.
Und was ich jetzt nicht weiß ob das php was ausmacht wenn du prüfst ob " $_GET " = irgendwas ist, ich kenne das bisher nur so in der Art:
PHP-Code:
if($_GET['site'] == "Einstellungen")
{
// do something
}
Aber wie gesagt da bin ich mir nich ganz sicher ob das egal ist.
|

12-04-2010, 23:25
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Es ist ganz und gar nicht egal und eigentlich ist es auch nicht das erste Mal, dass Deisi darauf hingewiesen wird.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-04-2010, 23:27
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Zitat:
Zitat von 2Bad4You
Also ich glaube überall wo sowas wie
PHP-Code:
if ($_GET = "Einstellungen") {
steht, da müsstest du das einfache Gleichhaltszeichen mit einen doppelten Ersetzen. Ein einfaches ist ja nur eine zuweisung bzw definition und dürfte in deinem fall ja dann immer wahr sein.
Und was ich jetzt nicht weiß ob das php was ausmacht wenn du prüfst ob " $_GET " = irgendwas ist, ich kenne das bisher nur so in der Art:
PHP-Code:
if($_GET['site'] == "Einstellungen")
{
// do something
}
Aber wie gesagt da bin ich mir nich ganz sicher ob das egal ist.
|
Jo danke!
Das Problem habe ich nach dem erneuten anschauen der Operatoren auch eingesehen.
Habe gerade ein Problem mit der Session.
|

12-04-2010, 23:31
|
|
deisi
Registrierter Benutzer
|
|
Registriert seit: Apr 2010
Beiträge: 16
|
|
Zitat:
Zitat von AmicaNoctis
Es ist ganz und gar nicht egal und eigentlich ist es auch nicht das erste Mal, dass Deisi darauf hingewiesen wird.
|
Genau, hast mich ja auch schon darauf hingewiesen.
Bezüglich des Session Handlings, dürfte reichen wenn ich einfach session_start(); an erste Stelle setze oder?
wenn ja, habe noch zwei dateien inkludiert, gibt das dann ein problem?
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|