Isardor: Senden von Javascript nach Datenbank

Ich hoffe mal, daß ich das richtige Theam gewählt hab.
So mein Problem ist folgendes.
Ich suche eine Möglichkeit Daten mit Javascript in eine Datenbank zu schreiben. Sagt mir jetzt nicht ich soll PHP benutzen, sitze an einem Coldfusionprojekt.

Undzwar möchte ich gerne eine Promptgesteuerte SQL-Eingabe haben, ungefähr so:
Var Wert= prompt("Gib hier einen wert ein:","");

Und hier soll dann eine Eingabe in die Datenbank erfolgen.
Ich dachte erst daran das mit Coldfusion zu verküpfen:

document.write("<cfquery name='schreibe' datasource='sag_ich_nicht'> insert into Tabelle (Spalte) values ('"+Wert+"')</cfquery>");
                                          |
                                          |
                                        Problem: In solchen Tags wird von dem Script nicht erkannt dass diese Variable nicht CF sondern Javascript ist. es Steht dann also "+Wert+" in der Datenbank.
Danach habe ich Probiert die Javascript Variablen so zu schreiben wie Coldfusionvariabeln, ohne erfolg.
Da ich erst seit gestern langsam angefangen habe mich in Javascript reinzutasten (ohne Buch), wollte ich mal fragen ob es eine effetive und einfache lösung gibt, wie ich die werte in den Prompt-Fenstern in die Datenbank schreibe.

  1. Ich suche eine Möglichkeit Daten mit Javascript in eine Datenbank zu schreiben. Sagt mir jetzt nicht ich soll PHP benutzen, sitze an einem Coldfusionprojekt.

    Das spielt keine rolle. Falls du JS im Client meist, ist das logischerweise nicht möglich. Falls du serverseitiges JS meinst, einfach mal in die Doku schauen, ob es dir DB Funktionen zu Verfügung stellt.

    document.write("<cfquery name='schreibe' datasource='sag_ich_nicht'> insert into Tabelle (Spalte) values ('"+Wert+"')</cfquery>");
                                              |
                                              |
                                            Problem: In solchen Tags wird von dem Script nicht erkannt dass diese Variable nicht CF sondern Javascript ist. es Steht dann also "+Wert+" in der Datenbank.

    Ich hab keinen Schimmer was das da oben machen soll, bei mir schreibt es lediglich einen ungültigen HTML Tag ins Browserfenster.

    Falls das da oben irgendwas spezielles ist und tatsächlich funktioniert, solltest du dir einfach mal den String den du ausgibst mit einem alert anzeigen lassen und prüfen ob er überhaupt das enthält was du glaubst.

    Struppi.

    1. hi,

      Ich hab keinen Schimmer was das da oben machen soll, bei mir schreibt es lediglich einen ungültigen HTML Tag ins Browserfenster.

      es ist vermutlich eine cold fusion anweisung, die im vorgesehenen fall schon serverseitig in der datei steht, und dann dementsprechend geparst und ausgeführt wird; beim client also auch gar nicht erst ankommen wird.

      das es natürlich unfug ist, eine solche anweisung erst auf clientseite mit JS ins dokument zu schreiben, dürfte dem OP auch auffalen, wenn er sich mal ein bisschen mit dem unterschied zwischen server- und clientseitigen abläufen auseinandersetzt.

      gruss,
      wahsaga

      1. Hmm. Das ist nun wirklich nicht das problem.
        Coldfusion lässt sich super mit javascript verbinden, Abfragen jedenfalls funktionieren auf diese Art super. Nur die Variablen sind nicht auf diese Art übertragbar.

        1. Coldfusion lässt sich super mit javascript verbinden, Abfragen jedenfalls funktionieren auf diese Art super. Nur die Variablen sind nicht auf diese Art übertragbar.

          Ich kann mir irgendwie nicht vorstellen, dass wenn du mit document.write eine Ausgabe im Browser machst, dieser dann auf dem Server eine Datenbankabfrage startet.

          Struppi.

          1. Ich kann mir irgendwie nicht vorstellen, dass wenn du mit document.write eine Ausgabe im Browser machst, dieser dann auf dem Server eine Datenbankabfrage startet.

            Glaub mir, genau das kann er.
            Der Text wir ja zuerst von Javascript in den Browser übertragen, dann durch den Applicationserver gejagt und wieder im Fenster ausgegeben.
            Habs ausprobiert.

            1. Ich kann mir irgendwie nicht vorstellen, dass wenn du mit document.write eine Ausgabe im Browser machst, dieser dann auf dem Server eine Datenbankabfrage startet.

              Glaub mir, genau das kann er.
              Der Text wir ja zuerst von Javascript in den Browser übertragen, dann durch den Applicationserver gejagt und wieder im Fenster ausgegeben.

              Ok, aber verstehen tu ich das nicht, aber was ist mit meinen anderen Tipp?
              Was gibt den dein JS aus, wenn du ein alert statt document.write verwendest?

              Struppi.

              1. Ok, aber verstehen tu ich das nicht, aber was ist mit meinen anderen Tipp?
                Was gibt den dein JS aus, wenn du ein alert statt document.write verwendest?

                Es öffnet sich keine Message Box.

                Je nachedem was ich in die Abfrage schreibe bekomme ich entwerde die Meldung
                "Invalid CFML-Constuct"
                oder
                "Error Executing Database"

                Es macht also keinen unterschied ob ich hier ein alert oder ein dokument.write verwende, weil ja immernoch der Coldfusioncode ausgewertet werden muss.

                1. Es macht also keinen unterschied ob ich hier ein alert oder ein dokument.write verwende, weil ja immernoch der Coldfusioncode ausgewertet werden muss.

                  Dann kann CF vielleicht kein JS?
                  wohin soll denn document.write schreiben?

                  Irgendwie werd ich einfach das Gefühl nicht los, dass einen Denkfehler in deinem Konstrukt hast. JS wird im Browser ausgeführt, der andere Code (so wie ich es verstehe) auf einem Server, folglich können diese beiden nicht miteinander kommunizieren. Du musst die JS Variabel an den server schicken.

                  Struppi.

                  1. Irgendwie werd ich einfach das Gefühl nicht los, dass einen Denkfehler in deinem Konstrukt hast. JS wird im Browser ausgeführt, der andere Code (so wie ich es verstehe) auf einem Server, folglich können diese beiden nicht miteinander kommunizieren. Du musst die JS Variabel an den server schicken.

                    OK, also ich befinde mich hier in einem CFM dokument, nicht HTML.
                    Aber der Denkanstoß ist richtig. CF wird Serverseitig ausgeführt, da es durcht einen Applictaitonserver interpretiert wird. und Javascript ist rein Clientorientiert.

                    Das heißt das CF nach dem Durchlaufen des Servers als HTML an den Browser geschickt wird, wodurch der eigentliche Quellcode Versteckt wird. (wie bei PHP)

                    Nun ist CF aber ebenso tollerant wie PHP und lässt Javascript zu. Ausserdem kann CF auch HTML-Formulare auswerten, obwohl es eigentlich eigens für diese Sprache entwickelte CF-Formulare gibt.
                    Die Formulare können auch auf Javascriptfunktionen zugreifen oder kleinere javascripte wie alerts selbst erstellen.

                    CF ist auch bereit sich von einem Javascript ausführen zu lassen.
                    DENN Alles was mit document.write geschrieben wird wird ja als string an den browser gegeben und der entscheidet was durch welchen interpreter läuft.

                    OK Ich muss zugeben, dass mir der Datenbankauszug den mir diese JS CF kombi ausgegeben hat nicht im Quelltext der Seite nachlesden konnte, weil dort das JS drin stand und die beinhaltete ja den CF-code.

                    Ich erhalte also eine Datenbankausgabe, obwohl diese nicht in HTML quelltext steht. Das CF ist also in diesem Fall zu einem Teil des JS geworden.

                    Mein Problem bezieht sich immernoch darauf, dass ich keine Möglichkeit finde die Javascriptvariablen in ColdFusion variablen Umzuwandeln, oder in Coldfusionscripte zu importieren.

                    In HTML gehts einfach da wird HTML von "" eingeschlossen und JS steht immer ausserhalb.
                    Aber CF kennt ebenfalls Anführungsstriche und benutzt sie ziehmlich oft z.B. zum Deklarieren von Variablen. das heißt das CF grundsätzlich annimmt, das was sich in "" befindet ist ein String
                    Deshabl wird z.B. bei einer Abfrage wie Select * From Tabelle Where Name = "+Name+" angenommen das da ein String kommt. aber die Pluszeichen erkennt der Interpreter dann nicht undnimmt sie als Teil des Strings, in der datenbank steht dann +Name+. Wenn ich stattdessen scheibe "#name#" verlangt er, dass die Variable #Name# definiert wird (logisch). Ihn auszutricksen indem man schreibt "#+Name+#" gibt einen Fehler aus. und sowas wie "#"+Name+"#" erzeugt einen Datenbankfehler.
                    Damit hatte ich erstmal mein reportoir verschossen. Da ich mich erst seit ein Paar stunden mit JS beschäftige komme ich vielleicht nicht auf eine ganz einfache Lösung und auf eine Komplizierte kann ich logischerweise nicht kommen.

                    1. Das heißt das CF nach dem Durchlaufen des Servers als HTML an den Browser geschickt wird, wodurch der eigentliche Quellcode Versteckt wird. (wie bei PHP)

                      JA, und wo woll jetzt deine JS Variabel wert herkommen?
                      sie existiert zu diesem Zeitpunkt doch gar nicht (wenn du sie per prompt im Browser eingeben willst)

                      Nun ist CF aber ebenso tollerant wie PHP und lässt Javascript zu. Ausserdem kann CF auch HTML-Formulare auswerten, obwohl es eigentlich eigens für diese Sprache entwickelte CF-Formulare gibt.

                      PHP läßt kein JS zu. Du kannst lediglich JS an den Browser schicken.

                      Die Formulare können auch auf Javascriptfunktionen zugreifen oder kleinere javascripte wie alerts selbst erstellen.

                      Die sind ja - nachdem sie zum Browser geschickt werden im Browser - und nur der kann JS ausführen.

                      CF ist auch bereit sich von einem Javascript ausführen zu lassen.
                      DENN Alles was mit document.write geschrieben wird wird ja als string an den browser gegeben und der entscheidet was durch welchen interpreter läuft.

                      Nein, tut er nicht.

                      Mein Problem bezieht sich immernoch darauf, dass ich keine Möglichkeit finde die Javascriptvariablen in ColdFusion variablen Umzuwandeln, oder in Coldfusionscripte zu importieren.

                      Das geht nicht!!!
                      Du musst aus dem Browser eine neue seite aufrufen und dort als Parameter (POST oder GET) die Variabel anhängen.

                      In HTML gehts einfach da wird HTML von "" eingeschlossen und JS steht immer ausserhalb.

                      Was? Das ist unsinn (oder ich versteh dich falsch) JS wird von dem <script></script> eingeschlossen.

                      Aber CF kennt ebenfalls Anführungsstriche und benutzt sie ziehmlich oft z.B. zum Deklarieren von Variablen. das heißt das CF grundsätzlich annimmt, das was sich in "" befindet ist ein String
                      Deshabl wird z.B. bei einer Abfrage wie Select * From Tabelle Where Name = "+Name+" angenommen das da ein String kommt. aber die Pluszeichen erkennt der Interpreter dann nicht undnimmt sie als Teil des Strings, in der datenbank steht dann +Name+. Wenn ich stattdessen scheibe "#name#" verlangt er, dass die Variable #Name# definiert wird (logisch). Ihn auszutricksen indem man schreibt "#+Name+#" gibt einen Fehler aus. und sowas wie "#"+Name+"#" erzeugt einen Datenbankfehler.

                      Kann es sein das Strings mit CFM nicht mit dem pluszeichen verbunden werden?

                      Damit hatte ich erstmal mein reportoir verschossen. Da ich mich erst seit ein Paar stunden mit JS beschäftige komme ich vielleicht nicht auf eine ganz einfache Lösung und auf eine Komplizierte kann ich logischerweise nicht kommen.

                      Ich befürchte dein Problem hat gar nichts mit JS zu tun, sondern nach wievor liegt hier ein Verständnissproblem vor.

                      Struppi.

                      1. OK, stimmt.
                        Sind so diese logischen Denkfehler.

                        Aber ich denke ich hab da einen guten Link zu dem Thema gefunden.

                        http://livedocs.macromedia.com/coldfusion/6/Developing_ColdFusion_MX_Applications_with_CFML/XML.htm

    2. Es ist mir schon klar, das Coldfusiontags nur auf einem Colfusion-Server laufen, war ja auch nur zur Anschauung. Die Idee dahinter ist, wenn ich Javascript variablen in HTML Formularen ausgeben kann, warum kann ich sie dann nicht auch in Coldfusiontags benutzen.
      für PHP denke ich wäre das so:
      @mysql_query(" insert into...(Spalte) values (".Javascriptvariable."); Oder so.

      Leider weiß ich nicht wirklich was du mit Serverseitigem Javascript meinst. Jedenfalls kann ich keine JSP-Seiten erstellen.