PHP Login Script aus .csv auslesen ohne session()

Xsp

Lt. Commander
Registriert
Jan. 2010
Beiträge
1.710
Hallo Community,

ich mache grade für ein Projekt eine Website.
Diese ist fast fertig. Sie ist jetzt nicht super sicher und auch nicht Professionel gemacht worden. Diese wird auch nur Offline für ein Projekt verwendet.

Ich bin grade an meinem Login Script zugange und irgenwie will mein Script nicht. Ich bin ein anfänger was PHP/HTML angeht.

Hier sind mal meinen Codes:

PHP:
[...]
<h2>Einloggen</h2>

<p>
<form name="Eingabe" action="logincheck.php" method="post">
Benutzername: <br />
<input type="text" name="benutzer" size="20" /><br /><br />
Passwort: <br />
<input type="password" name="pass" size="20" /><br /><br />
<input type="submit" value="Login" />
<input type="reset" value="Reset" />
</form>
</p>
[...]

PHP:
[...]
<?php
$benutzer=$_POST['benutzer'];
$passwort=$_POST['pass'];

$bol=file_exists("./datenbanken/Accountdaten.csv");
if($bol)
{
			$datei=fopen("./datenbanken/Accountdaten.csv","r");
			$data=fgetcsv($datei, 2);
			for($i=1; $i<=3; $i+=2);
			{
				if($data[$i] == $benutzer)
				{
					$bolbenutzer = true;
					
					if($data[$i] == $passwort)
					{
						$bolpasswort = true;
					}
					else
					{
						print("Das Passwort ist falsch!");
						$bolpasswort = false;
					}
				}
				else
				{
					print("Der Benutzername wurde nicht gefunden oder exsetiert nicht! ");
					$bolbenutzer = false;
				}
			}
			if($bolbenutzer && $bolpasswort)
			{
				print("Sie haben sich erfolgreich eingeloggt.");
			}	
}
else
	{
	print("Die Datenbank exestiert nicht. Bitte wenden Sie sich an den <a href='kontakt.html'> Webmaster</a>");
	}
?>
[...]

In dem PHP Code rumpelt es immer in den Zeilen 12 ; 16 ; 32.

Ich habe auch schon dazu gegoogelt aber die Codes konnten mir nicht weiterhelfen.
 
Bin ich doof oder hast du in den genannten Zeilen die Klammern falsch gesetzt? ;) Sprich: "Auf" statt "Zu"
 
Nein er hat nach der for ein Semilikona gesetzt ;) das dürfte die Probleme bereiten

PHP:
for($i=1; $i<=3; $i+=2);

Das Semilikona muss weg ;)

so müste es aussehen

PHP:
for($i=1; $i<=3; $i+=2) 
{
    .....
}
 
Das hat nichts mehr mit fehlerhaft zu tun, dein Code ist ein einziger Fehler O.o

$datei=fopen("./datenbanken/Accountdaten.csv","r");
$data=fgetcsv($datei, 2);
for($i=1; $i<=3; $i+=2);


Was soll das? Maximal 2 Werte aus der CSV wandern ins Array, du zählst aber von 1 über 3 bis 5? Du solltest dir die Abbruchbedingung nochmal ganz genau durchlesen, und warum zählst du 2 hoch statt 1?

Dann IN DER SCHLEIFE (Sorry dass ich schreie)

if($data[$i] == $benutzer)
{
$bolbenutzer = true;
ann komm
if($data[$i] == $passwort)
{
$bolpasswort = true;
}
else
{
print("Das Passwort ist falsch!");
$bolpasswort = false;
}
}

Auf grob deutsch übersetzt nehmen wir mal an dass data[$i] den Wert '123' enthält: Dann kommst du nur zum Login, wenn dein username 123 ist UND dein Passwort 123 ist O.o

Du bist da komplett konfus unterwegs. Was funktionieren sollte: (nicht getestet)


$fDatei=fopen("./datenbanken/Accountdaten.csv","r");
$bLoggedIn = false;
while($aData=fgetcsv($fDatei, 2)) { //Zeilenweise einlesen der Datei, google mal nach phpmanual und csv
if(data[0] == $benutzer && data[1] == $passwort){
$bLoggedIn = true;
}
}

if($bLoggedIn){
echo 'mal ganz schön eingelogged Junge.'
}


Das ist aber noch lange nicht alles, du speicherst gerade Passwörter als Klartext in der DB, was Bulsh ist. Du solltest beim speichen zumindest md5($passwort) abspeichern und dann auch mit md5(passwort) vergleichen, Passwörter im Klartext speichern ist absolutes Nogo
 
Zuletzt bearbeitet von einem Moderator:
danke @ mambokurt
Ich hoffe du bist kein Lehrer ;)

Ich habe das fgetcsv nicht ganz verstanden mehr auch nicht.

Zu den passwörtern:
Ich weis das ich diese sichtbar in eine CSV Datei schreibe, da es nur ein Schulprojekt ist und ich diese Website + Datenbank und alles was dazugehört nicht "online" stelle ist es relativ. ;)

for($i=1; $i<=3; $i+=2); Wo zählst du den da von 1 über 3 bis 5?
Also <=3 ist das er nur max bis auf 3 zählt, und das $i+=2 ist wegen der Datenbank so. ;)

Das Semikolon hinter der for-schleife wurde entfernt.
 
Xsp schrieb:
danke @ mambokurt
Ich hoffe du bist kein Lehrer ;)
Im Gegensatz zu allen Info-Lehrern, die ich bisher erlebt hab, hat Mambo durchaus Plan von dem, was er da schreibt... Also nein, er ist wohl kein Lehrer.

Und warum tust du das Elend mit CSV an? Kann dein PHP etwa kein SQLite?
 
Xsp schrieb:
danke @ mambokurt
Ich hoffe du bist kein Lehrer ;)

Ich habe das fgetcsv nicht ganz verstanden mehr auch nicht.

Jein, eigentlich hast du da die Kausalität in der Schleife net verstanden, aber das sei mal dahingestellt ;) Ich weiß noch wie ich das erste mal versucht hab mit Arrays rumzufummeln, und gerade unter PHP können die echt verwirren wenn man kei nforeach kennt :D

Xsp schrieb:
Zu den passwörtern:
Ich weis das ich diese sichtbar in eine CSV Datei schreibe, da es nur ein Schulprojekt ist und ich diese Website + Datenbank und alles was dazugehört nicht "online" stelle ist es relativ. ;)
Das sei erstmal dahingestellt (ich finde wenn man was macht dann richtig, gerade wenn es um grundlegendes geht), der Witz ist dass du dir damit Arbeit _erspart_ hättest. Und du hättest dabei noch was für später gelernt. Tu dir einfach mal den Gefallen und google mal nach SQLite und PHP, das geile ist halt dass du die Datei auf der Platte rumliegen hast, du aber mit SQL Befehlen drauf zugreifen kannst. Das ist quasi CSV mit Brusthaar, zumal wenn du bei großen Datenmengen noch Indices drauflegen kannst. Wenn du ein Beispiel willst: falls du gerade mit Firefox surst wird ziemlich sicher alles was du gerade machst per SQLite gelogged ;)

Xsp schrieb:
for($i=1; $i<=3; $i+=2); Wo zählst du den da von 1 über 3 bis 5?
Also <=3 ist das er nur max bis auf 3 zählt, und das $i+=2 ist wegen der Datenbank so. ;)
Das Semikolon hinter der for-schleife wurde entfernt.

Ich kann mich jetzt durchaus irren, jedesmal wenn ich einen größeren AUsflug nach Javascript gemacht habe brauche ich wieder nen Schlag ins Gesicht und 2 Kannen Kaffee um mit PHP klar zu kommen, aber:
i=1; i<=3? => J => i = i+2
i=3; i<=3? => J => i = i+2
i=5; i<=3? => N => Abbruch???

Da wo die 3 Fragezeichen stehen bin ich mir nicht ganz sicher, ich glaub unter PHP wird da noch eiskalt der Body ausgewertet, unter JS nicht. Oder andersrum ;) Ich habs mir zur Gewohnheit gemacht eben so einen Scheiß nichtmehr in meine Programme einzubauen.

Nochwas: dir scheint das Konzept von foreach zu fehlen, damit sparst du dir viel Arbeit und Fehler. Nehmen wir an du hast ein blablub = array(1=>'hui', 2 =>'bui', 3=>'cowabonga'); Du könntest das jetzt mit einer for Schleife durchackern, du kannst aber auch dem Objekt selbst die Arbeit überlassen:

foreach($blablub as $key => $value) {
echo '$value';
$blablub[$key] = $value.'hui';
}

Was du hier siehst: wir rödeln alle Elemente von blablub durch, dabei ist $key der Index im Array, $value der jeweilig zugewiesene Wert. Dann lassen wir den Wer ausgeben und dann ändern wir den Wert des Arrays an der aktuellen Stelle. Du kannst da nicht $value = 'huibui' bauen, weil an der Stelle $value nur eine Speicherreferenz ist.

Das macht jetzt so nicht viel Sinn, aber man kann sich damit einen Haufen Arbeit sparen. Nehmen wir an du holst dir eine Datenbankabfrage ab, du machst ein fetchassoc weils cool ist und du kriegst die Werte mandant_id, hilfe_id, Summe, Beschreibung wieder. Die Werte sind relativ selbstbeschreibend. Jetzt willst du aber nicht stumpf Leistungen raushauen sondern du willst nur Leistungen pro mandant haben, sortiert kriegst dues aber nicht. Also:

$aResult = array();
while($aRow = $Abfrageobjekt->fetch()){
$aResult[$aRow['mandant_id'][$aRow['hilfe_id']] = $aRow['summe'];
}

Würde dir zum Beispiel pro einzigartiger Hilfeart die Leistung je Mandnat abrechnen.
Dementsprechend kannst du auch ganz simpel die Summe über einen Monat pro Person bilden usw ^^

Sorry wenn sich das anhört wie Grundschule, aber IMHO gehört das zum Grundstock
 
Hi,
da ich nur eine Woche zeit habe muss ich leider mit meinen Boardmitteln Arbeiten.

Werde mir nach der Projektwoche mir md5 und foreach beschäftigen.
Hier ist mal mein neuer PHP Code. Egal was ich eingebe es kommt immer "Fehler!"...

PHP:
<?php
$benutzer=$_POST['benutzer'];
$passwort=$_POST['pass'];

$bol=file_exists("./datenbanken/Accountdaten.csv");
if($bol)
{
	$fDatei=fopen("./datenbanken/Accountdaten.csv","r");
	$LoggedIn = false;
	while($aData=fgetcsv($fDatei, 1)) 
	{
		if($aData[0] == $benutzer && $aData[1] == $passwort)
		{
			$LoggedIn = true;
		}
	}
	if($LoggedIn)
	{
	print ("Sie haben sich erfolgreich eingeoggt!");
	}
	else
	{
		print("Fehler!");
	}
}
else
{
	print("Die Datenbank exsistiert nicht. Bitte wenden Sie sich an den <a href='kontakt.html'> Webmaster</a>");
}
?>
 
fgetcsv will laut Manual als 2. Parameter die Maximale Länge einer Zeile der CSV, kann mir nicht vorstellen dass eine Passwort/Username Kombi nur 1 zeichen lang ist? Kann mich auch verlesen haben, aber ich würde da mal fgetcsv($fDatei) draus machen oder fgetcsv($fDatei, 1000), ansonsten wird er gar nicht in den Schleifenkörper kommen......

Falls das nix hilft bau mal ein print_r($aData); echo '<br />'; an den Anfang der while (vor if($aData[0] == $benutzer && $aData[1] == $passwort))
Kann mir vorstellen dass da noch irgendwas schiefgeht beim Einlesen, das hängt davon ab wie deine csv genau aussieht.
Falls das keinen offensichtlichen Fehler bringt mach mal ein var_dump, jeweils auf Benutzernamen und Passwort aus dem Post und den Daten aus der Datei. Bei solchen Geschichten kann ein trim() manchmal Wunder wirken, das schneidet Leerzeichen vor und hinter dem String weg:

if(trim($aData[0]) == trim($benutzer) && trim($aData[1]) == trim($passwort))


Und nein, ich bin kein Lehrer :D
 
Hi,
du hattest einen indirekten Fehler in deinem Code, aber das konntest du nicht wissen da du meine CSV Datei nicht hast.

PHP:
if($aData[0] == $benutzer && $aData[2] == $passwort)
		{
			$LoggedIn = true;
		}
$aData[1] muss zu $aData[2] umgeändert werden.

danke dir Herr Lehrer. :D
 
Zuletzt bearbeitet:
Aha ^^ Nur so interessehalber, das fgetcsv($file, 1) funktioniert aber, oder hast du die 1 jetzt weggenommen?
 
Sieht jetzt so aus.

PHP:
while($aData=fgetcsv($fDatei, 1000, ";"))
{
...
}

Ich habe noch ein Problem wo du mir eventuell weiterhelfen könntest.
Und zwar ich habe meine Index Datei von index.html in index.php geändert.
Ich habe Links und oben jeweils eine Navi Leiste.
Die Linke Navi Leiste hat es so übernommen aber die Obere nicht.

Oben in der Navi Leiste steht zum Beispiel Impressum, Download, Login usw. und wenn ich auf einer der Seite bin und dort mir den Seitenquelltext anzeigen lasse, steht dort immer noch
PHP:
<li class="select"><a href="index.html">Home</a></li>
anstatt
PHP:
<li class="select"><a href="index.php">Home</a></li>
. Ich habe Xampp schon Refresht. Nichts hat geholfen = /
 
Das musst du auch auf jeder Seite manuell im Quellcode umändern ;-)
Habe ich gemacht.
Ich habe grade das Notebook nochmal neugestartet und es besteht immernoch das gleiche Problem. = /

Also die obere Navi-Leiste besteht aus Spiel | Download | Link_us | Kontakt | Impressum | Login
Ich habe diese jetzt nochmal manuel geändert und jetzt funktioniert es bei Spiel, Download und Link_us. Bei Kontakt_Impressum und Login weiterhin nicht.
Irgenwie finde ich das nicht logisch was bei mir in dem Script passiert. Ich habe bei jeder html/php Datei das gleich gemacht. Bei manchen Dateien funktioniert es bei manchen nicht.
 
Zuletzt bearbeitet:
Lagere solche Sachen wie die Navigation, den <head>, den Kopf, den Fuß,... doch aus. Schreib Zeug, das sich in mehreren Seiten wiederholt, jeweils in eine eigenständige .php - Datei, die du dann per include() an der richtigen Stelle einbindest. Dadurch vergisst du nie, irgendwo irgendwas umzuschreiben. Wenn du n neuen Menüpunkt bräuchtest müsstest du so nur die navigation.php ändern, statt die Navi in 6-7 Seiten zu ändern.
 
Hey Daaron,
gute Idee bin ich garnicht drauf gekommen.

Mache ich mal und melde mich dann nochmal ob es funktioniert hat.
Muss ich den die html seiten auch zu PHP Seiten umwandeln?
Ich kann doch nicht in einem html Dokument den PHP Befehl <?php include () ?> benutzen.
 
Jap, du musst alles zu .php machen, damit die Seiten vom PHP-Parser verarbeitet werden. Aber es lohnt sich, du sparst enorm viel Arbeit, indem du deine Projekte in kleine modulare Bauteile zerlegst.
 
Dein Problem hört sich eher so an, als ob du die Bezeichnung irgendwo nicht geändert hast. Hast du einen halbwegs anständigen Editor? Mit Bluefish kannst du zB in allen Dateien in einem Verzeichnis suchen, da würd ich auf verdacht mal nach Index.html suchen ;)

Bei größeren Sachen solltest du vielleicht überlegen, dir eine Templateengine zu besorgen oder dir selbst eine zu schreiben, früher oder später wird mit HTML gemischter PHP Code IMHO unübersichtlich, und dann passieren solche Sachen ^^
Eine einfache Templateengine ohne Geschnetz hat vielleicht 30 Zeilen, nimmt dir aber sehr viel Arbeit ab und macht den Code besser lesbar. Kann sein dass ich noch was zu Hause im Projektordner habe, kann ich nachher posten...
 
Hey,
Hast du einen halbwegs anständigen Editor?
ich benutze Dreamweaver CS6.

Jap, du musst alles zu .php machen, damit die Seiten vom PHP-Parser verarbeitet werden. Aber es lohnt sich, du sparst enorm viel Arbeit, indem du deine Projekte in kleine modulare Bauteile zerlegst.
Alles klar lässt sich so machen.


Noch was:
Wisst Ihr welche Entwicklungsumgebung er benutzt?
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben