 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
28.03.2006, 19:40
|
#1
|
|
TP-Senior
Registriert seit: Oct 2005
|
mysql login mit php funktioniert nicht
hi leude,
eigentlich geht mein login. ich habe eine datenbank, in der ich erfolgreich die userdaten speichere und in einem loginformular wieder auslesen und vergleichen kann. einziges problem: es kann sich immer nur der user einloggen, der sich als letztes angemeldet hat...woran kann das liegen?
hier mein code für die anmeldung (eintragung in der db)
PHP-Code:
<?php
error_reporting(E_ALL);
include ('config.php');
$username = $_POST['username'];
$passwort = $_POST['passwort'];
$name = $_POST['name'];
$vorname = $_POST['vorname'];
$email = $_POST['email'];
$managerid = $_POST['htid'];
$account = $_POST['account'];
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
mysql_select_db ("user");
$sql = "SELECT Username FROM TabUser;";
$userquery = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($userquery);
if ($row['Username'] == $username OR $username == "")
{
header("Location:baduser.html");
}
else
{
if ($email != "" && ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $email))
{
if ($managerid != "")
{
if ($account == "")
{
header("Location:badaccount.html");
}
else
{
if ($account == "payaccount")
{
$query = "INSERT INTO TabUser (UserID,Username,Passwort,Name,Vorname,Email,ManagerID,Account) VALUES (NULL,'$username','$passwort','$name','$vorname','$email','$managerid','$account')";
$hinzufuegen=mysql_query($query) or die ("Fehler in Abfrage: $query. " . mysql_error());
header("Location:paydanke.html");
}
else
{
$query = "INSERT INTO TabUser (UserID,Username,Passwort,Name,Vorname,Email,ManagerID,Account) VALUES (NULL,'$username','$passwort','$name','$vorname','$email','$managerid','$account')";
$hinzufuegen=mysql_query($query) or die ("Fehler in Abfrage: $query. " . mysql_error());
header("Location:freedanke.html");
}
}
}
else
{
header("Location:badmanager.html");
}
}
else
{
header("Location:badmail.html");
}
}
?>
und hier der code für das einloggen (vergleich mit der db):
PHP-Code:
<?php
error_reporting(E_ALL);
$username = $_POST['username'];
$passwort = $_POST['passwort'];
include ('config.php');
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
mysql_select_db ("user");
$sql = "SELECT Username, Passwort FROM TabUser;";
$userquery = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($userquery);
if ($row['Username'] == $username AND $row['Passwort'] == $passwort)
{
header("Location:angemeldet.html");
}
else
{
header("Location:badlogin.html");
}
|
|
|
29.03.2006, 07:14
|
#2
|
|
TP-Senior
Registriert seit: Dec 2005
Ort: Saarland
|
Ich gehe mal davon aus, dass Dein Script zum Eintragen funktioniert (hab es jetzt nicht geprüft) ... Beim einloggen hast Du aber einen kleinen Denkfehler:
Du selektierst ALLE User aus der Datenbank ... d.h. Deine Abfrage führt dazu, dass die komplette Tabelle "aufgelistet" wird und nur der letzte Datensatz dann für Deine Abfrage stehen bleibt. So kommt es, dass ein Login immer nur für den letzten Datensatz möglich ist !!!
-> Du musst eine Eingrenzung der Daten schon beim Select machen:
SELECT * FROM TabUser WHERE Username = '$_POST[username]'
Damit hast Du schon mal nur den Datensatz des Users, der sich gerade versucht anzumelden ... Jetzt musst Du nur noch prüfen ob das eingetragenen Passwort mit dem in der Datenbank übereinstimmt:
if($row[Passwort] == $_POST[passwort]) { header(...) } else { header(...) }
Denke das sollte Dir weiterhelfen ;-)
|
|
|
29.03.2006, 09:51
|
#3
|
|
TP-Senior
Registriert seit: Oct 2005
|
danke für den tipp. kann es hier leider nicht ausprobieren...setze mich aber in c.a. 2 stunden nochma ran...was ich noch nicht ganz verstehe ist der * nach SELECT. heisst das hier soll alles rein was ich will (Username, Passwort, etc.) oder heisst das er wählt alles spalten aus, die für den gewählten user zählen?
danke nochmal für die hilfe!
|
|
|
29.03.2006, 10:02
|
#4
|
|
TP-Senior
Registriert seit: Dec 2005
Ort: Saarland
|
das mit dem * ist eine "dumme" Angewohnheit von mir ... damit werden alle Spalten des Datensatzes ausgewählt (und man muss sie nicht einzeln hinschreiben)
Vorteil: der Code wird kleiner
Nachteil: die Abfrage "kann" etwas länger dauern (aber nur relevant wenn über 50 Spalten in der Tabelle sind, man aber nur 2 benötigt :-))
Du kannst auch ruhig das Select von Dir nehmen (mit dem genannten Zusatz)
|
|
|
29.03.2006, 12:59
|
#5
|
|
TP-Senior
Registriert seit: Oct 2005
|
irgendwie gehts nicht...er sagt in zeile 13 (der SELECT Befehl) ist ein t_string error....woran liegts? habe den WHERE vergleich auch in deiner version gemacht: selbes problem...
PHP-Code:
<?php
error_reporting(E_ALL);
$username = $_POST['username']; $passwort = $_POST['passwort'];
include ('config.php');
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS); mysql_select_db ("user");
SELECT * FROM TabUser WHERE Username = $username;
if ($row['Username'] == $username AND $row['Passwort'] == $passwort) { header("Location:angemeldet.html"); }
else { header("Location:badlogin.html"); }
|
|
|
29.03.2006, 13:09
|
#6
|
|
TP-Senior
Registriert seit: Dec 2005
Ort: Saarland
|
sorry, ich hatte nicht den ganzen String hingeschrieben ;-)
$sql = "SELECT Username, Passwort FROM TabUser WHERE Username = '$_POST[username]";
|
|
|
29.03.2006, 13:10
|
#7
|
|
TP-Senior
Registriert seit: Dec 2005
Ort: Saarland
|
Ergänzung: Du musst nur den Select-Befehl in Deiner Abfrage ändern (also alles zwischen dem " und ") ... alles andere bleibt stehen (da fehlt in deinem zweiten Posting noch so einiges ;-)
|
|
|
29.03.2006, 13:15
|
#8
|
|
TP-Senior
Registriert seit: Oct 2005
|
yeah!!! ich bin begeistert! es funzt!!!
weisst du denn auch wie man am besten einen logout gestaltet? bislang habe ich nur einen simplen verweis auf die startseite gemacht, von der aus man nur durch einen erfolgreichen login an die erweiterten funktionen kommt. habe dann auch irgendwas von sessions gelesen, konnte damit aber nich so viel anfangen...??
danke für deine hilfe!
|
|
|
29.03.2006, 15:22
|
#9
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Die Session-Daten löschen:
PHP-Code:
session_destroy();
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
01.04.2006, 14:26
|
#10
|
|
TP-Senior
Registriert seit: Oct 2005
|
werden die session daten automatisch angelegt wenn man sich "einloggt"? oder muss ich da noch ne session beim erfolgreichen überprüfen von pw und username erstellen und die vielleicht auch betiteln, bevor ich sie schliessen kann?
|
|
|
01.04.2006, 18:08
|
#11
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Meistens benötigt man $Session[] bei einem Login.
Wenn Du keine Session hast, musst Du sie auch nicht zerstören (destroy)
Automatisch wird keine Session erzeugt, wie und warum auch?!
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
01.04.2006, 18:37
|
#12
|
|
TP-Senior
Registriert seit: Oct 2005
|
muss ich denn eine session erstellen? es soll ein portal sein, in dem der user auf eine individuelle oberfläche zugreifen kann.
|
|
|
01.04.2006, 21:56
|
#13
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Ja, dann musst nach erfolgreichem Login Du
eine Session starten und den User registrieren!
Jede geschützte seite muss dann mit folgendem beginnen:
PHP-Code:
<?php
session_start();
if (!session_is_registered('user'))
{
die ('Sie müssen sich <a href="deineLogin.php"
title="zum Einloggen hier klicken">einloggen</a>!');
}
?>
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
02.04.2006, 09:51
|
#14
|
|
TP-Senior
Registriert seit: Oct 2005
|
müsste ich das mit dem session_start() nicht bereits beim einlog-vorgang machen und die SID an die nächste seite übertragen? habe mich da mal kundig gemacht...aber irgendwie peil ichs noch nicht so ganz. wenn ich die session in der selben datei starten müsste, müsste doch auch das php-skript in die selbe datei. wenn das aber dort ist, dann muss doch auch der <form action...> tag angepasst werden. dort steht dann sowas wie:
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
aber wo soll nun '.SID.' rein???
wenn ich auf ne andre seite verweisen würde, würds ja so aussehn:
<form action="login.php? ' . SID . ' ">....
aber dann hätte ich an der stelle ja noch gar keine SID, weil ich da auch noch keine session gestartet habe....???!!!
danke für die hilfe!
|
|
|
02.04.2006, 10:00
|
#15
|
|
TP-Senior
Registriert seit: Oct 2005
|
ich habs allein hingekriegt. so langsam komm ich klar ;-)
die login.php bleibt extra und der form-tag in der anmeldeseite sieht so aus:
<form action="login.php" method="post">
also ganz normal.
die login.php sieht dann so aus:
PHP-Code:
<?php
session_start();
error_reporting(E_ALL);
$username = $_POST['username'];
$passwort = $_POST['passwort'];
include ('config.php');
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
mysql_select_db ("user");
$sql = "SELECT Username, Passwort FROM TabUser WHERE Username = '$_POST[username]';";
$userquery = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($userquery);
if ($row['Username'] == $username AND $row['Passwort'] == $passwort)
{
$s_id = session_id();
header("Location:angemeldet2.php?$s_id");
$_SESSION["username"] = $username;
}
else
{
header("Location:badlogin.html");
}
?>
wichtig ist der header-tag. dort wird die session_id() übertragen.
auf der folgenden seite siehts dann erstmal so aus und dort wird dann auch der inhalt (hier $username) wiedergegeben:
PHP-Code:
<?php
session_start();
echo $_SESSION["username"];
?>
vielen dank an meinen kopf!
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 0 | |