Vice Dee aka SanY: MySQL + Javascript + PHP

Hi,
ich bins mal wieder.
Ich bin gerade dabei ein "registrieren" Modul zu schreiben. Jetzt möchte ich mittels Javascript prüfen, ob der vom User eingegebene Benutzername schon vorhanden ist. Dazu muss das Script auf die MySQL Datenbank zugreifen. Natürlich weiß ich, dass das so nicht geht, also habe ich versucht Javascript mit PHP zu verknüpfen, was allerdings nur zum Teil funktioniert.
Hier das Skript:

<script type="text/javascript">  
function pruefen (){  
  
<?php  
include("inc/zugang.inc.php");  
$sql = "SELECT * FROM users WHERE name = '<script type='text/javascript'>newuser.Benutzername.value</script>'";  
$result = mysql_query($sql);  
$row = mysql_fetch_assoc($result);  
$username = $row['name'];  
?>  
var username = "<?php echo $username; ?>";  
if (username == newuser.Benutzername.value){  
	alert "Benutzername leider schon vergeben!";  
} else {  
	alert "Dieser Benutzername ist noch frei!";  
}  
  
}  
</script>

Ich habe es auch schon mit Dragonfly überprüft, nur leider bringt mir dieser mir keine sinnvolle Information. Kann auch sein, dass ich mich damit zu dumm anstelle oder so, aba er bringt mir immer was von pruefen --> ungültige variable. Ich kann jedoch sicher sein, dass es hieran liegt:

  
$sql = "SELECT * FROM users WHERE name = '<script type='text/javascript'>newuser.Benutzername.value</script>'";

und daran:

var username = "<?php echo $username; ?>";  
if (username == newuser.Benutzername.value){

Ich hoffe ihr könnt mir da weiter helfen, da ich ja nich so gut bin in Javascript, würd ich mich auch auf Tipps freuen etc..
Vielen dank schonmal im voraus!

LG

SanY

  1. Ist die Frage ernst gemeint?

    Wenn ja:
    JavaScript wird auf dem Client (=Webbrowser), PHP wird auf dem Server ausgeführt. Niemals nicht gleichzeitig.

    --
    for your security, this text has been encrypted by ROT13 twice.
    1. Hi,

      natürlich war die Frage ernst gemeint, sonst würd ich sie hier doch nicht stellen oder?

      JavaScript wird auf dem Client (=Webbrowser), PHP wird auf dem Server ausgeführt. Niemals nicht gleichzeitig.

      Ja ich weiß, aber das ist keine Antwort auf meine Frage.
      Ich habe ja gesagt, wenn es so nicht geht, freue ich mich gerne auf Tipps oder andere Wege, wie ich dies überprüfen kann.
      Leider verstehe ich aber noch rein garnichts von Ajax.
      Trotzdem thx

      LG SanY

      1. Hi,

        JavaScript wird auf dem Client (=Webbrowser), PHP wird auf dem Server ausgeführt. Niemals nicht gleichzeitig.
        Ja ich weiß, aber das ist keine Antwort auf meine Frage.

        Sobald du *verstehst*, was es bedeutet, sollte dir aber offensichtlich sein, warum deine Frage auf derartige Verwunderung stößt.

        Ich habe ja gesagt, wenn es so nicht geht, freue ich mich gerne auf Tipps oder andere Wege, wie ich dies überprüfen kann.

        Du musst einen neuen Request an den Server stellen.

        Leider verstehe ich aber noch rein garnichts von Ajax.

        Erstens kann man das ändern,
        aber zweitens solltest du dir als Anfänger nicht zu viele Baustellen auf einmal aufreissen.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Hi,

          Sobald du *verstehst*, was es bedeutet, sollte dir aber offensichtlich sein, warum deine Frage auf derartige Verwunderung stößt.

          Mich verwundert es viel eher, warum ihr so verwundert seit.
          Ich habe in mehreren Foren etwas zu dem Thema gelesen, was in etwa mit dem zu tun hat, dort ist auch keine Verwunderung aufgetreten. Wie gesagt, ich  bin noch nicht sehr fit in javascript, da ich es nicht oft brauche. Ich dachte, dass diese eine Sache es dem Nutzer komfortabler machen sollte. Wenn es allerdings doch nicht so einfach umzusetzten ist, ist dass auch kein Problem, es gibt auch noch einen anderen Weg nur mit PHP.

          Erstens kann man das ändern,

          Natürlich kann mans ändern, ich bin ja auch lernfreudig. Ich wollte hier jedoch blos wissen ob es möglich ist zu machen, so wie ich es angesetzt habe. Scheinbar geht es nicht so. Das ist völlig ok, dann werde ich versuchen ein paar Grundkenntnisse in Ajax zu erwerben. Wüsstet ihr da eventuell gute Seiten, das es für Anfänger wie mich etwas leichter macht, speziell auf dieses Thema einzugehen? Wäre klasse :-)

          aber zweitens solltest du dir als Anfänger nicht zu viele Baustellen auf einmal aufreissen.

          Das ist mir klar, natürlich.Ich habe mir bei diesem Projekt, das ich zur zeit mache vorgenommen, vieles dazuzulernen. Natürlich ich verstehe es voll und ganz, dass ich mir nicht zu viel auf einmal aufreissen sollte, daher versuche ich es auch nicht 5 verschiedene Programmiersprachen auf einmal verwenden zu müssen.
          Deshalb auch der Grund warum ich dieses Thema hier in die Wege geleitet habe.

          LG

          SanY

          1. Hi,

            Mich verwundert es viel eher, warum ihr so verwundert seit.

            Deine Fragestellung und der Beispielcode weisen einfach deutlich darauf hin, dass du dir über die Vorgänge bei der Kommunikation zwischen Server und Client noch kaum im Klaren bist.

            Du versuchst in deinem Beispielcode mit PHP eine Abfrage mit einem Wert zu machen, den JavaScript erst liefern soll. Da PHP mit seiner Arbeit aber längst fertig ist, bevor JavaScript ausgeführt wird, kann das *so* natürlich nicht mal ansatzweise funktionieren.

            Und eben solche grundlegenden Dinge sollten dir klar sein, bevor du dich weiter mit der Thematik beschäftigst - weil du nur dann überhaupt Überlegungen in die richtige Richtung anstellen kannst.

            Natürlich ich verstehe es voll und ganz, dass ich mir nicht zu viel auf einmal aufreissen sollte, daher versuche ich es auch nicht 5 verschiedene Programmiersprachen auf einmal verwenden zu müssen.

            Mit HTML und CSS hattest du letzte Tage noch grundlegende Probleme, und jetzt sollen schon PHP, JavaScript und MySQL hinzukommen. Das sind zwar nicht alles Programmiersprachen - aber doch zumindest schon fünf sehr umfassende Themenbereiche.
            Und wenn du den Umgang mit denen allen simultan erlernen willst, dann kannst du dich m.E. auf eine Reihe von (Verständnis-)Problemen einstellen, die höchstvermutlich in weitaus geringerem Maße auftreten würden, wenn du „eins nach dem anderen“ machst.

            Das Komfort-Argument ist im vorliegenden Zusammenhang schön und gut - aber von nur halb durchdachten und entsprechend fehlerträchtigen Umsetzungen hat der Nutzer am Ende noch viel weniger, als von einer simpleren Variante, die wenigstens funktioniert.
            Deshalb würde ich dir empfehlen, erst mal die „Basics“ umzusetzen: Das wäre hier ein Registrierungs-Script, welches alle gemachten Eingaben hinreichend plausibilisiert, und eventuelle Fehler nach dem simplen Abschicken des Formulars auf einer neuen Seite dem Benutzer meldet, so dass er Korrekturen vornehmen und danach erneut abschicken kann (Stichwort: Affenformular).

            Wenn das erst mal umgesetzt ist, und dabei auch alle Aspekte bedacht und angemessen in der Umsetzung berücksichtigt worden sind - dann kann anschliessend gerne JavaScript/AJAX oder sonstwas zur Erhöhung des Komforts dazu kommen.

            Einer dieser Aspekte wäre die Sicherheit - wenn das, was du in deinem Code versucht hast, funktioniert hätte, dann wäre diesem noch absolut gar keine Rechnung getragen worden. Das Argument „ja, darum kümmere ich mich später noch“ hören wir in solchem Zusammenhang hier oft - es ist aber die grundfalsche Herangehensweise. Das wird dann nachher vergessen, vor lauter Freude dass es endlich „funktioniert“ - und schon ist das Netz wieder um eine Anwendung reicher, die irgendwann wegen solch fundamentaler Versäumnisse ganz einfach gehackt werden kann, und damit auch die persönlichen Daten der Benutzer gefährdet.
            Wenn du also begierig bist, etwas dazu zu lernen - dann fang' mit diesen elementaren Dingen an.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. Hi,

              danke für deine Antwort!
              Ok, ich denke du hast recht.
              Ich bin mir daher jetzt auch im klaren, dass es nicht funktioniert. Ich mein is ja klar, weiß auch nicht warum ich da jetzt wieder so kompliziert gedacht habe, obwohl es ja von anfang an klar ist, dass es so nicht funktioniert. Aba naja sowas passiert. :-D.
              Ich wollte einfach jetzt mal was neues ausprobieren, da dieses Projekt eigl. eine komplette Aktuallisierung zu einem etwas älternen ist, wo ich bereits so ein einfaches "Registrieren" Modul geschrieben habe. Jetzt habe ich zumindest schon mal wieder einiges dazu gelernt. Auch bei CSS war es auch immer dieser eine Fehler, der euch ja schon bekannt ist, den ich gemacht habe. Jetzt verstehe ich es endlich, warum das nie funktioniert hat, so wie ich das wollte. Ich will jetz hier nichts verschreien, aber im moment klappt noch alles, daher hoffe ich auch, dass es weiterhin so funktioniert.
              Vielleicht finde ich ja hier auf SELFHTML etwas passendes, das mir einen kleinen Vorgeschmack auf Ajax gibt, um zu sehen, was da noch alles auf mich zukommen könnte.

              Vielen dank!

              LG

              SanY

          2. Mahlzeit Vice Dee aka SanY,

            Mich verwundert es viel eher, warum ihr so verwundert seit.

            Das ist relativ einfach: Du vermischt munter Server- und Client-seitigen Code. Offenbar ist Dir nicht wirklich bewusst, welcher Code wo ausgeführt wird und welche Ergebnisse hervorbringt. Dass das prinzipiell nicht funktionieren *kann*, ist Deinen Lesern offenbar klar. Dir hingegen nicht - obwohl Du behauptest, der Unterschied wäre Dir bewusst. Deine bisherigen Überlegungen allerdings lassen das Gegenteil vermuten. *Das* verwirrt ... :-)

            Wie gesagt, ich  bin noch nicht sehr fit in javascript, da ich es nicht oft brauche.

            Dann solltest Du wohl erst einmal dort ansetzen - grundlegende Kenntnisse in Javascript (und dazu gehört auch, *wann*, *wo* und durch *wen* dieser Code ausgeführt wird) sind eigentlich recht einfach erlangen.

            Ich dachte, dass diese eine Sache es dem Nutzer komfortabler machen sollte.

            Das ist es auch - wenn man es richtig macht.

            Wenn es allerdings doch nicht so einfach umzusetzten ist, ist dass auch kein Problem, es gibt auch noch einen anderen Weg nur mit PHP.

            Es wäre schon umzusetzen - nur eben nicht auf dem von Dir vermuteten Weg. Und da sind wir dann schon wieder im Bereich "Grundkenntnisse" ...

            Das ist völlig ok, dann werde ich versuchen ein paar Grundkenntnisse in Ajax zu erwerben. Wüsstet ihr da eventuell gute Seiten, das es für Anfänger wie mich etwas leichter macht, speziell auf dieses Thema einzugehen? Wäre klasse :-)

            Wenn Du einen Bruchteil der bisher verstrichenen Zeit dafür aufgewendet hättest, Dich zumindest über die Bedeutung des Akronyms AJAX zu informieren, wüsstest Du, dass Du eigentlich nur Javascript-Kenntnisse benötigst.

            Zusammenfassend:

            Du willst, dass bei irgendeiner Benutzerinteraktion (also auf dem Client, daher wäre Javascript hier angebracht) irgendeine Information, die nur auf dem Server vorliegt (nämlich dort in der Datenbank), überprüft/angezeigt/verarbeitet wird. Daher musst Du mittels Javascript beim Server Informationen abfragen. Das geht z.B. mittels Ajax, indem Du mit Javascript eine HTTP-Anfrage an ein Server-seitiges PHP-Skript stellst ... dieses sucht Dir dann die Daten zusammen und liefert sie in XML-Form zurück ... und diese Rückanwort kannst Du dann wieder mit Javascript auswerten und gemäß Deinen Anforderungen damit weiterarbeiten.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Hi,

              danke für deine Antwort.

              Erstmal sorry für meine Dummheit :-D.
              Ich bin scheinbar nicht ganz so dafür geeignet.7

              Du willst, dass bei irgendeiner Benutzerinteraktion (also auf dem Client, daher wäre Javascript hier angebracht) irgendeine Information, die nur auf dem Server vorliegt (nämlich dort in der Datenbank), überprüft/angezeigt/verarbeitet wird. Daher musst Du mittels Javascript beim Server Informationen abfragen. Das geht z.B. mittels Ajax, indem Du mit Javascript eine HTTP-Anfrage an ein Server-seitiges PHP-Skript stellst ... dieses sucht Dir dann die Daten zusammen und liefert sie in XML-Form zurück ... und diese Rückanwort kannst Du dann wieder mit Javascript auswerten und gemäß Deinen Anforderungen damit weiterarbeiten.

              Genau das wäre es! Was müsste ich machen um meine Dummheit zu korrigieren und irgendwann soetwas auf die Beine stellen zu können?

              LG

              SanY

              1. Mahlzeit Vice Dee aka SanY,

                Genau das wäre es! Was müsste ich machen um meine Dummheit zu korrigieren und irgendwann soetwas auf die Beine stellen zu können?

                Zuerst vielleicht einmal jetzt wirklich Dich über Javascript-Grundlagen informieren und nach Informationen zum Thema "AJAX" suchen? Was für Stichworte brauchst Du denn noch für eine gezielte Recherche?

                Ich habe Dir den prinzipiellen Ablauf erläutert - Programmcode bekommst Du von mir in diesem Fall aber nicht (nicht falsch verstehen: aber ich gebe einem Fahranfänger auch nicht den Zündschlüssel für einen Formel-1-Wagen), und ein Tutorial ist dieses Forum auch nicht.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Hi,

                  ok, dann hab ich dich da blos falsch verstanden.
                  Danke für deine Hilfe, dann werd ich das alles mal machen.
                  Ich werde dich über meine Fortschritte, falls es dich interessiert auf dem laufenden halten xD.

                  MFG

                  SanY

                  1. Mahlzeit Vice Dee aka SanY,

                    Danke für deine Hilfe, dann werd ich das alles mal machen.
                    Ich werde dich über meine Fortschritte, falls es dich interessiert auf dem laufenden halten xD.

                    Gern - wenn Du konkrete Fragen zur Umsetzung hast, kannst Du gern an diesen Thread anknüpfen oder (falls er bis dahin schon im Archiv verschwunden ist) einen neuen eröffnen und darin am Besten auf diesen Thread verweisen.

                    MfG,
                    EKKi

                    --
                    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hallo,

    Ich bin gerade dabei ein "registrieren" Modul zu schreiben. Jetzt möchte ich mittels Javascript prüfen, ob der vom User eingegebene Benutzername schon vorhanden ist. Dazu muss das Script auf die MySQL Datenbank zugreifen.

    a) mit AJAX abfragen.
    b) hast Du mit dieser Prüfung eine Race-Condition, genauer eines der Art
       Time of check to time of use.
       Um letzteres zu vermeiden müsstest Du den Benutzernamen reservieren, z.B.
       für die Dauer einer Session oder bis der Benutzer einen anderen Namen
       auswählt.

    c) Es ist völlig überflüssig, Spalten abzufragen, die Du nicht benötigst.
       Verwende *nicht* SELECT *, wenn es nicht erforderlich ist:

    $sql =  "SELECT * FROM users WHERE name = '<script type='text/javascript'>newuser.Benutzername.value</script>'";

    SELECT COUNT(name) Anzahl WHERE ... reichte hier aus.

    d) Vergißt Du die kontextgerechte Behandlung von variablen Werten wie hier
       dem vom Benutzer eingegebenen Namen. Es gibt Mütter, die solche Fehler
       ohne Rücksicht auf Verluste ausnutzen :-)

    e) Dies gilt nicht nur für die Verwendung im SQL-Kontext, dies gilt auch für
       den HTML- und Javascript-Kontext.

    Bitte dedlfix' Artikel lesen und beherzigen.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      vielen Dank für deine Antwort!
      Aber leider kann ich überhaupt kein Ajax.
      Es geht mir hier mehr um den Vergleich ob der Benutzername schon vorhanden ist. Ich habe z.B getestet, indem ich soetwas mache:

      alert ("<?php echo $row['name']; ?>");

      Das hat dann sehr gut funktioniert. Nur der Vergleich in der if Abfrage haut nicht ganz hin. Sorry, dass ich das vergessen habe zu erwähnen.

      Diesen Artikel, werde ich natürlich in Zukunft beherzigen!

      LG

      Sany