Hilferuf, Daten existieren, werden aber nicht ausgelesen

Acriss

Gesperrt
Hi,
vor 4 Stunden klappte alles Super.
Doch jetzt leider nicht mehr :(

PHP:
if ( isset($_SESSION['member']) && !empty($_SESSION['member']) && isset($_SESSION['pass']) && !empty($_SESSION['pass']) )

	{

	$mitglied = $_SESSION['member'];


	$selectlogincheck = "SELECT Mitglied, Passwort FROM zeitschlacht WHERE Mitglied = '$mitglied' ";
	$querylogincheck = mysql_query($selectlogincheck) or die(mysql_error());

	while ($rowlogin = mysql_fetch_array($querylogincheck, $connect))
		{
		$members = $rowlogin[0];
		$passw = $rowlogin[1];




		}

	$ok2 = true;

	if ($mitglied == $members && $_SESSION['pass'] == $passw) $ok = true;

	else $ok = false;

	}

else $ok2 = false;
Der Code soll überprüfen, ob es sich um einen korrekten Login handelt.

Aber $members und $passw erhalten keinen Wert.
Wenn ich allerdings mit SELECT * FROM zeitschlacht
die Datenabfrage, ist dort der korrekte Login verzeichnet.
Ich lasse Passwort und Login vorher auch ausgeben. Genau dasselbe.
Meine Where-Clausel scheint nicht mehr zu arbeiten,
denn bei allen anderen Werten, tut dies auch ncht mehr.

Hilfe, was soll ich nur tun?
 
Ich glaube eher so...

PHP:
$selectlogincheck = "SELECT Mitglied, Passwort FROM zeitschlacht WHERE Mitglied = '".$mitglied."' ";

Was soll denn das werden?
PHP:
while ($rowlogin = mysql_fetch_array($querylogincheck, $connect))

--> array mysql_fetch_array ( resource Ergebnis-Kennung [, int Ergebnistyp] )
 
Ich verstehe einige Dinge am Grundaufbau deines Scriptes nicht. Erwartest du, dass mehrere Mitglieder den selben Nicknamen haben und der Query mehrere Resultate zurück gibt? Warum eine while-Schleife? Falls es mehrere gibt, beinhaltet die Variable $passw blos das Passwort des letzten so ausgelesenen Mitgliedes. Hast du vielleicht zwei User mit dem gleichen Nick aber unterschiedlichen Passwörtern und versuchst mit dem User einzuloggen, der zuerst in der Datenbank steht?

Ich würde dir aber empfehlen, den Aufbau deines Scriptes zu überdenken. Prüf doch einfach per mysql_num_rows() ob es in der Datenbank einen User gibt, der diesen Nicknamen und dieses Passwort besitzt. Wenn Ergebnis > 0, dann Erfolg, sonst Fehlgeschlagen.
 
PHP:
$ok2 = false;
if( isset($_SESSION['member']) && isset($_SESSION['pass']) ) {
	$query = 'SELECT `Passwort` FROM `zeitschlacht` WHERE `Mitglied` = "'.mysql_real_escape_string($_SESSION['member']).'" ';
	$result = mysql_query($query, $connect) or die(mysql_error());
	if( ($row = mysql_fetch_assoc($result)) !== false && $_SESSION['pass'] == $row['Passwort'] ) {
		$ok2 = true;
	}
}
Das „or die(…)“ solltest du im Produktivsystem aber rausnehmen und stattdessen eine bessere Fehlerbehandlung implementieren, eine die nicht gleich die Notbremse zieht.
 
Leute, mir reichts jetzt echt -.-
Ich habe jetzt nochmal herum experimentiert, und sogar eine Session blockt, udn wird nicht üebrtragen, ich hab kein Bock mehr auf den Sch....
ich sitze da schon eine Woche dran, und kriege es einfach nicht hin.

Wäre jemand so freundlich und würde mal alle Scripte für den Login (3 Stück, nich sehr groß)

Durchgucken, verbessern, und mit zu schicken?

Im Moment kann ich echt nichts anderes schreiben, ohne in wildes Fluchen auszubrechen
:mad: :mad :mad: :mad: :mad:
Ehrlich, mir stehts bis zum Hals
 
Ich glaube eher so...

PHP:
$selectlogincheck = "SELECT Mitglied, Passwort FROM zeitschlacht WHERE Mitglied = '".$mitglied."' ";
Das macht keinen Unterschied ;)

Was soll denn das werden?
PHP:
while ($rowlogin = mysql_fetch_array($querylogincheck, $connect))

--> array mysql_fetch_array ( resource Ergebnis-Kennung [, int Ergebnistyp] )
Äh?
Also, abgesehen vom Kommafehler, würde ich sagen:
Bitte lesen :D -> http://de2.php.net/manual/de/function.mysql-fetch-array.php
php.net hat gesagt.:
Das optionale zweite Argument Ergebnistyp in mysql_fetch_array() ist eine Konstante und kann die folgenden Werte annehmen: MYSQL_ASSOC, MYSQL_NUM und MYSQL_BOTH. Diese Eigenschaft steht seit PHP 3.0.7 zur Verfügung. MYSQL_BOTH ist der Standard für diesen Paramater.
Also wohl eher nicht :P

----------------------------------------------------------------------------------------------------

Ich verstehe einige Dinge am Grundaufbau deines Scriptes nicht. Erwartest du, dass mehrere Mitglieder den selben Nicknamen haben und der Query mehrere Resultate zurück gibt? Warum eine while-Schleife?
Ich erwarte nur EIN Ergebnis, kenne die allgemeine Ausgabe aber NUR mit while-Schleife,
bzw ich habe es so gelernt^^.
Mitglieder können auch nicht gleiche Namen haben.

Falls es mehrere gibt, beinhaltet die Variable $passw blos das Passwort des letzten so ausgelesenen Mitgliedes. Hast du vielleicht zwei User mit dem gleichen Nick aber unterschiedlichen Passwörtern und versuchst mit dem User einzuloggen, der zuerst in der Datenbank steht?
siehe oben, negativ

Ich würde dir aber empfehlen, den Aufbau deines Scriptes zu überdenken. Prüf doch einfach per mysql_num_rows() ob es in der Datenbank einen User gibt, der diesen Nicknamen und dieses Passwort besitzt. Wenn Ergebnis > 0, dann Erfolg, sonst Fehlgeschlagen.
Hab ich, selbes Ergebnis
-----------------------------------------------------------------------------------
PHP:
$ok2 = false;
if( isset($_SESSION['member']) && isset($_SESSION['pass']) ) {
	$query = 'SELECT `Passwort` FROM `zeitschlacht` WHERE `Mitglied` = "'.mysql_real_escape_string($_SESSION['member']).'" ';
	$result = mysql_query($query, $connect) or die(mysql_error());
	if( ($row = mysql_fetch_assoc($result)) !== false && $_SESSION['pass'] == $row['Passwort'] ) {
		$ok2 = true;
	}
}
Das „or die(…)“ solltest du im Produktivsystem aber rausnehmen und stattdessen eine bessere Fehlerbehandlung implementieren, eine die nicht gleich die Notbremse zieht.

Und welche meinst du, etwa sowas?
PHP:
if ( !$result) echo 'Fehler: '.mysql_error();


Naja, so far -.-
 
Der normale Benutzer wird mit so technischen Fehlermeldungen nicht mehr anfangen können außer dass es zu einem Fehler kam. Daher ist es nicht sinnvoll ihn mit solchen Fehlermeldungen zu konfrontieren. Im Gegenteil: die systemeigenen Fehlermeldungen können sogar sicherheitskritische Informationen (absolute Dateipfade, Datenbankabfragen, etc.) enthalten, die ein bösartig geneigten Benutzer für gezielte Angriffe nutzen kann.
Diese von PHP erzeugten Fehlermeldungen sind alleine für den Entwickler gedacht. Fange die Fehler lieber ab, protokolliere sie und liefere dem Benutzer eine allgemeine Fehlermeldung.
 
In $connect stehen die Zugangsdaten, das Script wird included.

Ich habe nun folgende Probleme:

Eine Session wird nicht übergeben,
und das WHERE funktioniert nicht :(

Deshalb würde ich euch ja gerne bitten, das einer (oder mehrere) sich die 3 Scripts anschauen, und die Fehler suchen, weil ich mit meienm Latein am Ende bin.

@Gumbo:
Danke für die Info :)
Und nur Fehler, war auch eher nur ans Prinzip gedacht, Meldung lässt sich ja jederzeit ändern xD.

edit:
Hiermit finde ich Ergebnise:
PHP:
//Hiermit
"SELECT * FROM zeitschlacht WHERE Antrieb = 0"
//Hiermit nicht:
"SELECT * FROM zeitschlacht WHERE Mitglied = 'Acriss' ";
 
Zuletzt bearbeitet:
Tja, dann ist dies aber falsch, da dieser Parameter nur folgende Werte haben darf:

MYSQL_ASSOC, MYSQL_NUM und MYSQL_BOTH

und nix mit Zugangsdaten ;)

Wird die Session überhaupt in jeder beteiligen Datei gestartet/fortgeführt mittels session_start(); ?
 
Zurück