Wo ist mein PHP Fehler ich möchte Ein Guthaben System einführen?

... komplette Frage anzeigen

2 Antworten

2 Probleme bei deiner Abfrage, zum einen musst du die Spalten, die du Abfragen möchtest, durch ein Komma trennen, zum anderen hast du am Ende vergessen hinzuzufügen auf was du "wavecoins" prüfen willst, z.B. so:#

$sql = "SELECT `username`, `wavecoins` FROM `user` WHERE username = '". $sses ."' AND wavecoins > 0";

So würden eben diese beiden Werte abgefragt, wenn bei "wavecoins" ein Wert größer 0 eingetragen ist.  Die Spalte "username" könntest du übrigens bei der Abfrage auch weg lassen, denn den hast du ja sowieso schon. Das mit der direkten Nutzung der Variablen ($sses) ohne sie zu escapen funktioniert btw zwar, sollte man aber besser nicht machen, das sorgt nur dafür, dass PHP "mehr Arbeit" hat (und geht bei größeren Projekten ggf entsprechend auf die Performance).

Desweiteren solltest du übrigens die veralteten mysql_* Funktionen besser nicht mehr verwenden, die gibt es in aktuellen PHP Versionen schon gar nicht mehr (wodurch das bei vielen Hostern also sowieso nicht funktionieren würde), stattdessen würde ich PDO empfehlen.

https://www.php-einfach.de/mysql-tutorial/crashkurs-pdo/

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von LeonardM
20.06.2017, 19:21

Die Implementation ist so miserabel, dass noch eine weitere Lücke offen steht. What if $result returns NULL or false? $count wird ebenfalls mit false oder NULL beendet und die if wird nichtmehr true sein und zum else Block stehen, der dann die Freigabe gibt (genug Guthaben vorhanden). Oder jemand registriert sich einfach 2 mal mit dem selben Namen. en voila $count ist 2, else Block spricht an.

0

Ohje.. wo soll ich anfangen?

Die Initialisierung fehlt komplett.. Woher soll PHP denn wissen wo die Mysql Querys denn nun hin sollen? Verwende mysql_connect und mysql_select_db (beides sind Funktionen) bevor du mit mysql_query loslegst. 

Generell wird mysql_* nichtmehr supported ab PHP7.0, weil veraltet.

Du solltest wenn du schon noch auf das alte mysql_* zurückgreifst mysql_real_escape_string (ne Funktion) verwenden um $sses Eingabe zu sichern.

Dein mysql query hat auch wenig Sinn.. 

Warum fragst du mysql überhaupt nach dem username wenn du ihn dann garnichtmehr in PHP brauchst? Du hast übrigens ne unvollständige Bedingung formuliert ("AND  wavecoins" wavecoins what..? ich gehe mal davon aus das du zb einen stand von 5 vorraussetzt.)

Richtig wäre es vermutlich so (der query):

$sql = "SELECT `wavecoins` FROM `user` WHERE username = '" . mysql_real_escape_string($sses) . "' AND wavecoins < 5";  

Ich bin allerdings der Meinung vom Konzept (abgesehen das du veraltete Methoden verwendest) kannst du das alles in die Tonne treten. Es ist eine miserable Umsetzung, die sogar eine weitere Sicherheitslücke birgt die du garnicht behandelst. Angenommen den User gibts nichtmehr. Du bekommst als Objekt NULL. Es wird immer zum else Block springen wenns blöd läuft. Dein Datenbankdesign gefällt mir auch nicht. Was hat das Guthaben in der user Tabelle verloren? Es gibt Sonderfälle bei denen das Sinn hat aber bei größeren Projekten oder generell, wenn mehr Userdaten gesammelt werden wird es mit hoher Warscheinlichkeit mit der Zeit ziemlich unproduktiv alles in die Usertabelle zu klatschen, weil du dann doch oft den Großteil davon garnicht brauchst.

Fazit: ich würde dir empfehlen auf z.B. PDO um zu steigen und mit prepared Statements zu arbeiten UND erstmal die Grundlagen zu lernen.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?