Txt-Datei wird nicht richtig ausgelesen!
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
break
code
datei
durchgang
durchlauf
einfacher test
eingabe
ersten post
file
genau desaster
letzte passwort
letzter stelle
login
machen
optimieren
problem
schleife
textdatei
zerlegen
-
Hi
Ich stehe vor einem Großen Problem!!
Ich lese mit folgendem php-script eine Textdatei aus (users.txt):
$username = $_POST["user"]; $passwort = $_POST["passwort"]; if(($username != "" OR $username != "Benutzernamen eingeben") AND ($passwort != "" OR $passwort != "Passwort eingeben")) { $pass = md5($passwort); $saveuser = md5($username); $datei = file("users.txt"); foreach($datei AS $ausgabe) { $zerlegen = explode("|", $ausgabe); if($zerlegen[0] == $username AND $zerlegen[1] == $passwort) { $login = "e"; } else { $login = "ne"; } } }
wenn $login dann "e" ist ,dann ist man eingeloggt.
die Datei users.txt sieht so aus:
username1|passwort1 username2|passwort2 username3|passwort3
Das Problem ist jetzt, dass mein Script immer nur den letzten usernamen und das letzte Passwort ausliest.
Wenn ich also in das Formular als Benutzername
username1 und als passwort passwort1 eingebe dann klappt das nicht. Wenn ich aber username3 und passwort3 eingebe dann klappts.
Ich dachte das könnte daran liegen, dass nach passwort1 und passwort2 noch ein Zeilenumbruch kommt aber was soll ich da machen??
Hoffe ihr könnt mir helfen! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Genau desaster-productions hat recht. (und ich rätsel hier 10 Minuten rum...)
Naja und dieses Rausgehen funktioniert mit break. Außerdem kannst du dein Script noch optimieren, indem du nicht bei jedem Durchgang die Variabel $login erneuerst, das verursacht nur unnötige Serverlast.
$username = $_POST["user"]; $passwort = $_POST["passwort"]; if(($username != "" OR $username != "Benutzernamen eingeben") AND ($passwort != "" OR $passwort != "Passwort eingeben")) { $pass = md5($passwort); $saveuser = md5($username); $datei = file("users.txt"); $login="ne"; foreach($datei AS $ausgabe) { $zerlegen = explode("|", $ausgabe); if($zerlegen[0] == $username AND $zerlegen[1] == $passwort) { $login = "e"; $break; } } }
-
Vielen dank, aber entweder bin ich zu doof oder das klappt immernochnicht.
Nur wenn ich den letzten Eintrag nutze dann bin ich eingeloggt. bei den vorherigen nicht. Also denke ich dass es vielleicht daran liegt, dass das was ausgelesen wird mit den eingaben nicht übereinstimmt obwohl beides gleich ist. Und dass macht doch keinen Sinn oder?? Hoffe es gibt da eine Lösung!! -
ganz einfacher test: mach doch mal in der schleife drinnen ein echo und sieh nach, was eingelesen wird ;)
-
naja an jeden ausgelesenen String werden noch 1-2 Leerzeichen angehängt aber sonst ists genau gleich!
-
also du hast jetzt ein echo da drin gemacht und es wird definitiv alles aus der datei im browser ausgegeben?
-
Jop!
Die gesammte datei wird ausgegeben und ich kann mich nur mit dem Benutzernamen und Passwor einloggen was an letzter Stelle in der Datei steht ansonsten klappts nicht! -
mekwürdig. kannst nochmal den code posten, so wie er jetzt im moment ist?
-
$username = $_POST["user"]; $passwort = $_POST["passwort"]; if(($username != "" OR $username != "Benutzernamen eingeben") AND ($passwort != "" OR $passwort != "Passwort eingeben")) { $pass = md5($passwort); $saveuser = md5($username); $datei = file("users.txt"); $login="ne"; foreach($datei AS $ausgabe) { $zerlegen = explode("|", $ausgabe); echo "$zerlegen[0] -- $zerlegen[1]"; if($zerlegen[0] == $username AND $zerlegen[1] == $passwort) { $login = "e"; $break; } } }
-
probiers mal so:
$username = $_POST["user"]; $passwort = $_POST["passwort"]; if(($username != "" OR $username != "Benutzernamen eingeben") AND ($passwort != "" OR $passwort != "Passwort eingeben")) { $pass = md5($passwort); $saveuser = md5($username); $datei = file("users.txt"); $login="ne"; foreach($datei AS $ausgabe) { $zerlegen = explode("|", $ausgabe); echo "$zerlegen[0] -- $zerlegen[1]"; if(trim($zerlegen[0]) == $username AND trim($zerlegen[1]) == $passwort) { $login = "e"; $break; } } }
edit:
noch was anderes. dein if ganz am anfang ist wirkungslos. die bedingung evaluiert immer zu true, egal was man eingibt.
Beitrag zuletzt geändert: 28.11.2009 17:52:52 von desaster-productions -
WOW Super!!! Jetzt klappts!! Mit trim entfernt man Leerzeichen oder?? Also nochmal vielen Dank jetzt klappt alles wiels klappen soll!!!
-
schön das es klappt :-)
ja, und alle möglichen anderen whitespaces wie z.B. zeilenumbrüche. also hast du eigentlich schon in deinem ersten post recht gehabt ;) -
Super! Ja ich habs mir gedacht weil es nur beim Letzten geklappt hat und das der einzigste war nach dem kein Zeilenumbruch kam. Aber ich wusste nicht wie ich das wegmachen sollte...
Also vielen Dank nochmal!! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage