(MySQL, PHP) Login funktioniert nicht

Thiemo K.

Cadet 2nd Year
Registriert
Dez. 2014
Beiträge
20
Hi,

ich habe versucht einen login für eine Website zu schreiben, was mir aber nicht so ganz gelingt.
Könnt ihr mir helfen?

DER NEUE CODE STEHT UNTEN


Gruß Tiemo
 
Zuletzt bearbeitet:
Was bedeutet "funktioniert nicht"?
Einfach hier den Code reinknallen und dazu schreiben geht net, ist ne ganze schlechte Art des um Hilfe bittens.
 
Mojo1987 schrieb:
Was bedeutet "funktioniert nicht"?
Einfach hier den Code reinknallen und dazu schreiben geht net, ist ne ganze schlechte Art des um Hilfe bittens.
Du hast Recht. Allerdings ist ja "funktioniert nicht" schon fast höflich Umschreibung gegenüber den üblichen "funzt net" und der allseits beliebten Antwort auf Nachfrage: "Fehlermeldung? Keine Ahnung. Die hab ich weggeklickt." :-)
 
Okay,

danke für die Hinweise.
Diese Fehler werde ich nicht nochmal machen.
Ich habe es ebend nochmal getestet und abgeschrieben und dieser Teil funktioniert nicht:

PHP:
if ($stmt = $mysqli->prepare("SELECT * FROM accounts WHERE Passwort = ? AND Email = ?")){
	$stmt->bind_param("ss", $Pdb_passwort, $db_Email);
	$stmt->execute();
	$stmt->bind_result($Passwort, $Email);
	$stmt->fetch();
	$stmt->close();
}
else{
	echo "hat nicht funktioniert";
}

Es sollen Passwort und Email von der datenbank abgerufen werden und in Variablen angespeichert werden.
Ich bekomme diese Fehlermeldung: Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\Webapp\mehr.php on line 56.

Gibt es jetzt genug Infos?

Gruß Thiemo
 
PHP:
if ($stmt = $mysqli->prepare("SELECT * FROM accounts WHERE Passwort = ? AND Email = ?"))

die abfrage ist immer Wahr wenn das Statement erzeugt werden konnte (was nur nicht der Fall ist wenn es die felder z.B. nicht gibt)! Da ist noch keine passwort abfrage o.ä. drinne.
Du musst schauen wie viele zeilen dir das ergebniss liefert!

Und ja bind_result kann ja nicht klappen wenn du im Query mit "*" nach allen feldern fragst die in der table drinne sind, zumal du die email und das passwort ohnehin schon kennst, wieso es nochmal aus dem ergebnis fetchen?

es ist ja lobenswert das du mit prepared statements arbeiten willst, aber ehe du nicht wirklich verstanden hast was du da machst (und das hast du eindeutig nicht) solltest du vlt. mal mit dem klassischem mysql_query arbeiten. Und vlt. nicht gleich OOP.
 
PHP:
$sel = "SELECT * FROM accounts WHERE Passwort = :pw AND Email = :email";

$stmt->prepare($sel);
$stmt->bind_param(':email', $email);
$stmt->bind_param(':pw', $pw);

$stmt->execute();

if ($stmt->fetch()) {
    echo "E-Mail ".$email." logged in...";
} else {
    echo "Select failed, no login...";
}

Untested, may not work properly....

PDO Bind and prepare, da gibt es tausende Tutorials zu....

Number of bind variables doesn't match number of fields in prepared statement
Das bedeutet soviel wie: Du hast im Select-Statement 2x das ? benutzt und musst dann auch 2x diesen Platzhalter (mit bind_param()..) füllen, damit das $stmt->execute() keinen Fehler produziert.... Und abschreiben in der Copy+Paste Zeit ist verschwendete Zeit :)
 
Zuletzt bearbeitet:
@smallwall:
Das mit dem Fehler stimmt nicht so ganz. Wie oben schon von mir, aber auch von Mercsen geschrieben wurde, kommt dieser Fehler (wie man aus der Fehlermeldung noch rauslesen kann) durch den Aufruf von bind_result() eben wegen einer ungleichen Anzahl an Spalten.
 
Hallo,

danke für die Hilfe.
Hab es jetzt geschafft und verstanden.

Ich hoffe es geht jetzt weiter voran.
Gruß Thiemo
 
Zurück
Oben