Frage von Tim116, 38

php code lösung fehler?

Das ist mein code: <?php $benutzer = $_POST["user"]; $passwort = $_POST["pass"]; $loginbutton = $_POST["login"]; if ($loginbutton) { if ($benutzer And $passwort) { //connect to db $connect = mysql_connect("localhost","Name","Passwort"); mysql_select_db("einsatzloeser"); $query = mysql_query("SELECT * FROM Accounts WHERE Username=$benutzer") $num = mysql_num_rows($query); /Fehler/ if ($num!=0) { WHILE ($row = mysql_fetch_assoc($query)) { $dbbenutzer = row["Username"]; $dbpasswort = row["Passwort"]; } if ($dbbenutzer==benutzer AND $dbpasswort==passwort); { echo "Login erfolgreich!!!" } else echo "Ihre Daten wurden nicht gefunden!" } else echo "Der Benutzer exestiert nicht!"; else echo "Bitte füllen sie alle Felder aus" } ?>

Da wo Fehler steht das sol falsch sein die Meldung:

Parse error: syntax error, unexpected '$num' (T_VARIABLE) in /users/einsatzloeser/www/login.php on line 16

Hat einer dah eine idde?

Antwort
von mastema666, 16

Der Code ist so sehr unübersichtlich, besser bei einem "nopaste" Anbieter (z.B. hastebin.com) posten, dann lässt der sich viel besser lesen.

Was mir aber auffällt:

Nach dem ersten "mysql_query()" fehlt ein ";".

Dafür ist hier eins, das da nicht hin gehört:

if ($dbbenutzer==benutzer AND $dbpasswort==passwort);

Später fehlt noch mehrfach wieder ein Semikolon am Ende einer Zeile.

Außerdem fehlen diverse geschwungene Klammern (bei den "else").

while ($row = mysql_fetch_assoc($query)) {...

Du fragst nur einen Datensatz ab, also ist die while Schleife unnötig (wird funktionieren, aber eben unnötiger Code, einfach $num nicht auf !=0 sondern ==1 prüfen, denn das soll ja ein Login darstellen wie es aussieht und da sollte es ja sowieso jede Benutzername / Passwort Kombination nur genau 1 mal geben.


Sonstiges:

- Allgemein sollte man mysql_* nicht mehr benutzen, ist aktuell schon veraltet und wird in PHP ab Version 7 gar nicht mehr unterstützt.

- Die DB Verbindung würde ich außerhalb der "if" Bedingung aufbauen, meist braucht man die ja nicht nur genau da (bzw ggf direkt in einer includeten config oder so, dann muss man das nicht in jeder Datei separat machen).

- "SELECT * " sollte man nicht benutzen, immer genau die Felder abfragen, die man benötigt (http://php-de.github.io/jumpto/code-smells/#select-all).

Antwort
von Harraldino, 20

Es fehlt ein Semikolon!

... FROM Accounts WHERE Username=$benutzer") 
$num = mysql_num_rows($query);

Hinter der Klammer bzw eben vor deinem $num.

Antwort
von SapphireX, 13

mysql_query("SELECT * FROM Accounts WHERE Username=$benutzer");

Symikolon vergessen.... ;)

Antwort
von bormolino, 18

Vor $num fehlt ein Semikolon ;

Antwort
von dannyotti, 17

Her, bitte schreib den code in ein Code-Feld. Diese Eckigen HTML-Tags oben machn dann sowas draus:

ich bin gut zu lesen
Kommentar von dannyotti ,

Was ich noch rauslesen kann:

Überprüfung ob eine postübergabe statt finde:
if(isset($_POST["user"])){
code
}

dann kommt noch, dass du keine Prepared Statements
verwendest. Dadurch ist dein Skript nicht Injetktionssicher.
wenn ich auf der Seite wäre mit ein bissel erfahrung könnte
ich böse Sachen mit deiner DB machen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten