ThorstenF.: Aus DB in Php-Array und dann Javascript

Hi Leute,
also ich lese mir alle Benutzer aus einer DB aus und schreibe die dann in einem php-code in ein array. Und dann lasse ich mir erstmal ausgeben um zu gucken, ob das auch funzt und siehe da: ja, es funzt.

Jetzt möchte ich innerhalb eines Formulars checken, ob die Benutzerkennung, die ein neuer Kunde eingegeben hat um sich zu registrieren bereits vorhanden ist.

Das alles mit PHP zu machen is ja kein Ding, läuft auch schon.
Kann man das auch direkt mit JS machen, so dass sofort ein alert hochkommt, der dem Benutzer sagt, dass er eine andere Kennung wählen muss, da diese schon vorhanden ist?

Das ist mein Code, den ich geschrieben habe um mir die Benutzer zu holen.

$frage = mysql_query("Select Benutzerkennung from user");

$ordner = array();

while($row = mysql_fetch_array($frage))
  $ordner[] = $row["Benutzerkennung"];

$i=0;
 while(isset($ordner[$i]))
 {
     echo $ordner[$i] . " <br>";
     $i++;
 }

jetzt fehlt nur noch der Vergleich...

  1. Habe mir das irgendwie so gedacht:

    innerhlab einer Form, damit ich mit JS darauf zufreifen kann:

    <input type='text' value='<?php echo $ordner[$i] . " <br>"; ?>' disabled>

    aber da passiert erstmal gar nischt!

    am besten wäre es noch, dass die types hidden sind! und dann für jede Kennung einen neuen <input>

    geht das überhaupt?

    1. Hallo,

      es ist wohl keine so gute Idee, alle Benutzernamen aus der Datenbank an den Client zu senden und auch nicht möglich, auf diese Art und Weise die Eindeutigkeit einer Kennung zu gewährleisten. Überprüfe das Formular serverseitig und mach bitte eine Datenbankabfrage, die dir schon im Ergebnis verrät, ob es diesen Benutzernamen gibt oder nicht (count(*)).

      bernd

      1. jaja, das habe ich schon umgesetzt. Nur dachte ich, wäre es eventuell besser alles mit JS zu machen. Das Formular wird bereits komplett mit JS auf richitge Eingaben geprüft und nun wollte ich auch das mit der vorhandenen Benutzerkennung durch JS prüfen lassen, da ich mir dadurch nachher dann (hoffentlich) sehr viele PHP-MySQl Abfragen sparen kann, da ja alles durch JS gemanaget wird.
        Oder das alles ist einfach eine nicht so gute Lösung und ich lass es einfach sein?

        Hallo,

        es ist wohl keine so gute Idee, alle Benutzernamen aus der Datenbank an den Client zu senden und auch nicht möglich, auf diese Art und Weise die Eindeutigkeit einer Kennung zu gewährleisten. Überprüfe das Formular serverseitig und mach bitte eine Datenbankabfrage, die dir schon im Ergebnis verrät, ob es diesen Benutzernamen gibt oder nicht (count(*)).

        bernd

        1. Hallo,

          du überprüfst mittels JavaScript die Benutzereingaben. Der Ansatz ist ja nicht völlig verkehrt aber sinnlos, denn du setzt eine gesicherte Umgebung vorraus. Woher weißt du, dass der Browser oder was auch immer die Seiten verarbeitet JavaScript kann und die Ausführung dann auch noch zuläßt? Warum vertraust du den Daten, die deinen Server erreichen? JavaScript ist ein Hilfsmittel, nicht mehr aber auch nicht weniger. Du kommst nicht drumrum, die Daten serverseitig zu überprüfen!

          Beispiel 1:
          Zwei Benutzer rufen die Seite auf. Du hast sämtliche Benutzernamen an den Client geschickt, um dort zu überprüfen, dass die Eingabe nicht kollidiert. Die zwei Benutzer geben als neuen Namen "Hans" ein und senden das Formular an deinen Server. Was passiert?

          Beispiel 2:
          Ein Benutzer ruft deine Seite auf. Er hat JavaScript deaktiviert und gibt als Benutzernamen "Hans" ein. Diesen Namen gibt es aber schon, kann aber nicht via JavaScript überprüft werden. Er schickt die Daten an deinen Server. Was passiert?

          Beispiel 3:
          Ein Benutzer ruft deine Seite auf. Er schaut in den Quelltext und bekommt feuchte Augen. So viele Benutzernamen. Er holt sich Knabberzeug und fängt an rumzuprobieren. Was passiert?

          Beispiel 4:
          Ein Benutzer ruft deine Seite auf. Er gibt als Benutzernamen <sql-injection-statement-ausgeblendet> ein und schickt die Daten an deinen Server, wo ja keine Überprüfung implementiert ist, nichtmal ansatzweise, da die Eingaben ja schon clientseitig via JavaScript überprüft werden. Was passiert?

          Soll ich weitermachen? Das war nur der Anfang. Du wirst erkennen, dass du um eine serverseitige Überprüfung der Daten nicht drumrum kommst. Dein Argument mit den vielen PHP-MySQL Statements lasse ich nicht gelten.

          Beispiel - Überprüfung, ob der Benutzername schon vorhanden ist
          1. Den erhaltenen Benutzernamen auf SQL-Injections und Gültigkeit prüfen
          2. Ein SQL-Statement absetzen, welches dir schon im Ergebnis verrät, ob der Benutzername schon existiert oder nicht ("SELECT COUNT(*) AS anzahl FROM table_x WHERE username='$username'").

          Ich kenne mich mit PHP nicht aus, daher kann ich dir hier nicht weiterhelfen. Frage dazu das Forum, hier treiben sich mitunter geschickte Leute rum. Jedenfalls möchte ich dir noch einen Rat mit auf den Weg geben. Auch bei einer serverseitigen Überprüfung via PHP musst du aufpassen, _auch_ wenn du die Eigenheiten von PHP kennst, und vor allem wenn du sie nicht kennst.

          bernd