MySql Überprüfung der vorhandenen Usernamen in der Datenbank

  • Hallo zsm,


    weiter unten werde ich meinen Code posten. Es geht darum, dass ich auf eine Datenbank zugreife und dort als Admin Namen, Usernamen usw ändern kann. Jedoch möchte ich nicht doppelte Usernamen haben. In der Datenbank habe ich das schon gelöst indem ich das Column auf Unique gesetzt habe. Aber ich würde gerne für den Nutzer dies erkenntlich machen wenn der Username nicht geändert wurde. Dies wollte ich im Code mit der while schleife am ende realisieren aber es klappt nicht. Bitte um Hilfe:


  • Du willst also eine Kontrolle einbauen, nachdem ein Update gelaufen ist?! Jetzt bitte mal nachdenken! Macht das Sinn?


    Außerdem schiebst du Daten in die Datenbank, ohne diese zu escapen, dass macht die Tür für XSS-Attacken auf. Siehe in der PHP-Doku unter mysqli_real_escape_string


    Und: "klappt nicht" ist keine Problembeschreibung.

  • verstehe also die abfrage auf doppelte usernamen vorher

    praktisch eine while schleife wenn doppelt dann zb einen counter hochzählen und wenn dieser höher = 0 gar nicht erst in die if bedingung

    richtig?

  • Außerdem schiebst du Daten in die Datenbank, ohne diese zu escapen

    Falsche Wortwahl und|oder Du hast da evtl. auch was falsch verstanden.

    XSS passiert bei der Ausgabe (Browser).

    Hier ist aber schlimmer, dass er Userdaten direkt in eine SQL Query packt. Das schreit nach SQL-Injections.


    Daten gehören nicht escaped in die db. Aber es sollte auf keinen Fall eine Query "zusammengebastelt" werden.


    ado683 Nutze mysqli_ (oder PDO) mit Prepared Statements https://www.php.net/manual/de/…t.prepared-statements.php .

    Und htmlspecialchars() um die Daten auszugeben https://www.php.net/manual/de/function.htmlspecialchars.php .

    Keine Ausnahmen!


    Nutze === statt == .


    Was zu Hölle ist das: $_SESSION["password"] ?

    Ich hoffe, Du speicherst nicht wirklich pws in der Session. Die landen ungehasht und unverschlüsselt in Dateien auf Deinem Server (default in /tmp/).


    Auch das hier geht gar nicht: $sqlab .= " password = '" . $_POST[ "passwordUser" ] . "',";

    Passwörter gehören gehasht in die db!

    Nutze password_hash() und pasword_verify(). Siehe Loginpasswort richtig hashen - password_hash() & password_verify() .


    ---

    Um doppelte Einträge zu vermeiden, sollte (wie Du schon sagtest) ein unique index genutzt werden.

    Damit man nicht jedes mal in den SQL Fehler rennt (duplicate ...), sollte man vor dem Update ein SELECT ausführen.

    Wird zB der Name gefunden, dann existiert er offensichtlich und man kann einen Fehler ausgeben.

  • das hashen der passwörter usw wollte ich alles später machen. der erste schritt war überhaupt erstmal daten aus der db zu bekommen also per php.

    das ist alles nur grundgerüst das ausbauen der ganzen sache kommt später.

    aber danke für den hinweis

  • das hashen der passwörter usw wollte ich alles später machen. der erste schritt war überhaupt erstmal daten aus der db zu bekommen also per php.

    das ist alles nur grundgerüst das ausbauen der ganzen sache kommt später.

    aber danke für den hinweis

    Am besten alles von Anfang an richtig machen als zu aller Erst es falsch zu machen und dann doch wieder richtig zu machen. Das ist ein hohes Sicherheitsrisiko. Das sollte dir bewusst sein.

  • Wenn die DB-Spalte auf UNIQUE gestellt ist, wirft MySQL doch eine entsprechende Meldung/Exception.

    Ich weiß nicht, wie mysqli das handelt, aber bei PDO kannst Du die letzten DBMS-Fehler abfangen und verarbeiten. Ist im Prinzip das, was Du willst.

    Wie gesagt, Fehlerbehandlung kennt mysqli auch, aber das nutze ich nicht und kann Dir das adhoc nicht exemplarisch darstellen.