Variablenübergabe JS -> PHP
am 25.02.2009 - 17:59 Uhr in
Hallo an alle!
Ich habe so ein Programm, mit dem kann man Kreuzworträtsel, Lückentexte etc. generieren und auch als html ausgeben. Die Überprüfung der Richtigkeit passiert dann per JS was als script-Teil dort in die html Datei mit eingebunden wird.
Ich würde das gerne so realisieren, dass mir von der Kontrolle irgendwie die Variable (60% Beispielsweise) für php übergeben wird, um das z.B. dann mit "Userpoints" Modul weiter zu nutzen.
Gibt es da irgendeine Möglichkeit zur Realisierung? Jemand aus dem IRC Chat sagte mit bereits, dass es auf Grund der JS Geschichte einfach zu knacken sei um beispielweise zu betrügen.
Habt ihr da irgendeine Meinung zu?
So sieht z.B. die html dann aus:
Anhang | Größe |
---|---|
drag_drop.html | 32.82 KB |
crossword.html | 55.69 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Variablenübergabe JS -> PHP
am 26.02.2009 - 00:59 Uhr
Hi,
was genau du nun möchtest, habe ich noch nicht vollends verstanden. Allerdings findest du unter:
http://api.drupal.org/api/function/drupal_add_js/6 einige Infos zur Einbindung von JavaScript. Darüber hinaus findest du auf der gleichen Seite unter "> 26 functions call drupal_add_js()" weitere Beispiele für den Einsatz. Wenn du in der Eingabe oben links (Search) _js eingibst, werden einige Funktionen angeboten. Musst du dir ansehen.
Ansonsten bring noch mehr Infos wo und was genau du machen möchtest.
Leider erfahre ich in diesem Forum immer eine gähnende Leere bei Fragen zur Modulentwicklung. Insbesondere dann, wenn es in die Tiefen von Drupal geht.
Also: Ich habe einen content
am 26.02.2009 - 10:42 Uhr
Also:
Ich habe einen content typen erstellt "exercise"... da drin habe ich 2 Textfields. Das erste: "field_javascript" und das zweite: "field_html"
Jetzt erstelle ich eine dieser Übungen mit dem (Ich nenne ihn mal "Generator") Generator, exportiere das ganze als html. Jetzt erstelle ich in Drupal ein "Exercise" und kopiere den "SCRIPT" - Teil der Datei in das "field_javascript" und all das was im "BODY" - Teil steckt in das "field_html".
Dann habe ich eine page-exercise.tpl.php wo ich einfach aus gewohntem Vorgehen das field_javascript im HEAD Teil ausgebe (und den BODY mit der entsprechenden id und diesem "onload..." versehe). Dann habe ich eine node-exercise.tpl.php in der ich einfach das field_html ausgebe in Rohform, also den
$node->field_html[0]['value'];
quasi.Wenn ich mir dann in Drupal einen exercise node anschaue, funktioniert alles soweit.
Jetzt kommen wir zum eigentlichem Punkt: Einfach nur so eine Übung machen, ist zwar toll, bringt aber nicht viel, wenn man die Auswertung nicht weiterverarbeitet. Insofern würde ich gerne das ganze beispielsweise mit dem Modul "Userpoints" verbinden.
D.h.
userpoints_userpointsapi(array('uid' => $user->uid, 'points' => $die_punkte_aus_der_auswertung_der_exercise, 'tid' => 'entsprechende_tid'));
Ich muss also diese Javascript-Auswertung an PHP als eine variable liefern, die ich mit der userpoints_api verbinden kann. Das ist erstmal der Grundgedanke.
(Wahrscheinlich wird es sinnvoller sein, pro user die auswertung der einzelnen exercises zu speichern in der DB und entsprechend dann einen durchschnitt zu errechnen. Falls der User die Übung mehrmals macht, dass quasi immer der Durschnitt dem user als Punkte gewährt wird und auch nicht jedesmal dazu addiert wird.)
Die JS-Variable kannst du
am 26.02.2009 - 20:37 Uhr
Die JS-Variable kannst du lediglich an einen input type="text" oder type="hidden" übergeben welcher das element readonly beinhaltet. Danach per senden also POST in der DB speichern.
Die wohl bessere Lösung ist ohnehin (sofern ich deinen Ansatz verstanden habe), die Punkte jeweils in der DB zu speichern. Damit kannst du auch im späteren wesentlich mehr anfangen. Zudem kannst du Start und Endzeiten mitliefern, wie lange ein User eine Übung vollzogen hat usw.. Sprich du kannst das ganze statistisch besser auswerten.
D.h. ich müsste einen HTML
am 27.02.2009 - 10:41 Uhr
D.h. ich müsste einen HTML Input Form Element erzeugen, welches die variable in die Datenbank schreibt oder wie? Aber wie bekomme ich denn diese Variable von der Auswertung in das HTML Form Element? Ich bin nicht so der Coder und bräuchte da mal irgendwie einen Ansatz zum Lesen oder ein Beispielsyntax oder snippet. Ich hab ja auch schon gegoogelt etc. aber wenn ich nicht, weis wonach ich expliziet suchen muss, ist das Finden nicht so erfolgreich.
Hast du jquery.js in deinem
am 27.02.2009 - 12:24 Uhr
Hast du jquery.js in deinem Drupal oder ein anderes Framework? Die von Drupal mitgelieferten *.js-Dateien habe ich mir hierzu noch nicht angesehen.
Du musst dich auf jeden Fall mit dem ersten Link schon mal auseinander setzen, welchen ich mitgeteilt habe. Dann ist die Frage, wie du den Content aufbauen willst bzw. wie er aufgebaut wird und wie du Ergebnisse speichern willst oder auch nicht. Ein input-tag ist nur erforderlich, wenn du ergebnisse speichern willst. Ansonsten kannst du das Ergebnis auch auf andere Weise darstellen per JavaScript.
Also wie ich mit
am 03.03.2009 - 11:43 Uhr
Also wie ich mit
drupal_add_js
über "setting" quasi ein js_variable aufbau verstehe ich ja bereits... allerdings verstehe ich nich wie ich mitdrupal_add_js
eine js_variable an php übergebe. Oder stecke ich grad im völlig falschen Film?Naja, es ist immer noch die
am 03.03.2009 - 12:04 Uhr
Naja, es ist immer noch die Frage offen, willst du die Variable aus JS in der DB speichern oder lediglich ausgeben?
Oder willst du ein Link-Parameter an einen href-linnk anhängen? Es bleiben dir für die Variablenübergabe die drei möglichkeiten:
- input-tag (readonly) zur Datenspeicherung oder per POST zumindest übermitteln
- URL-Parameter anhängen. Einen vorhandenen Link im Document anpassen/verändern/erweitern
- direkte Ausgabe. Innerhalb des Dom eine Datenausgabe anstoßen.
Nein ich will sie nicht
am 03.03.2009 - 13:25 Uhr
Nein ich will sie nicht direkt in die DB schreiben... ich will einfach dass die variable aus JS am besten per POST an eine andere URL übergeben wird, bei der ich dann sagen kann
$data = $_POST['data'};
oder sowas. Also Jquery ist ja bei D6 mit dabei... insofern kann ich das mit nem jquery ajax request auslösen?Ich habe quasi ein Panel angelegt für meinen nodetypen in denen man diese JS-Übungen machen kann ablaufen. Das panel sieht man erst wenn man "node/%/evaluation" eingibt. Da habe ich dann einen benutzerdefinierten PHP Inhalt in der ich dieses
$data = $_POST['data'};
schreiben würde. Ich dachte ich übergebe dann per jquery.post diese JS Variable an die url "evaluation". Würde das theoretisch so funktionieren?Ok, jetzt kenne ich nicht
am 03.03.2009 - 13:48 Uhr
Ok, jetzt kenne ich nicht den direkten Aufbau deiner JS-Funktionen. Aber wenn du einen Post auslösen willst/kannst, kannst du entweder die Variable aus JS direkt in ein hidden oder input-tag setzen. Per Post kannst du dann prüfen ob das Feld hidden / oder input-tag:name entsprechend gefüllt oder vorhanden ist.
Das kannst du auch per Ajax laufen lassen. Wichtig ist eben das der zu übergende Wert irgendwo in einem input-type text(readonly) oder hidden von JS übergeben wird.
(Hoffe ich habe dich jetzt auch richtig verstanden) ;)
Na den direkten aufbau der
am 03.03.2009 - 17:24 Uhr
Na den direkten aufbau der JS funktionen siehst Du in den html Datein die ich mit gepostet habe... die stecken da direkt drin
Wenn du auf prüfen klickst,
am 03.03.2009 - 17:54 Uhr
Wenn du auf prüfen klickst, wird ja der %-Wert per JS ausgegeben. Du musst praktisch nur noch statt der %-Wert-Ausgabe in HTML dies ändern für form, damit du den Wert dann auch per POSt übermitteln kannst. Oder du setzt ein zusätzliches
<input type="hidden" name="ergebnis" id="ergebnis" value="" />
in den HTML-Quelltext.
Bei letzterer Variante musst du lediglich das Script anpassen, dass der %-Wert auch als Value für ergebnis gesetzt wird.
Wenn du einen form-tag um die %-Wert-Ausgabe setzt, kannst du dir einen Schritt sparen. Du gibst dem
<input type="text" id="ergebnis" name="ergebnis" value="" readonly="readonly" />
das readonly dazu. Somit kann darin keiner eine Veränderung vornehmen.Egal wie - ist nun noch ein Subit-Button da, kannst du das Ergebnis auf der Folgeseite oder in einem Zwischenschritt verarbeiten.
Natürlich muss du die Zeile entsprechend erweitern, damit der input-tag (hidden oder text) korrekt angesprochen wird.
document.form.element["ergebnis"].value = hier_der_%-Wert;
Also hier meine Lösung:
am 04.03.2009 - 14:43 Uhr
Also hier meine Lösung:
a) Panel angelegt mit benutzerdefinierten php Inhalt und das ganze steckt in "/node/%/evaluation" ...
b) ich hab dann einen jQuery Ajax Post ausgelöst, der zu "evaluation" geschickt wird... dort im php inhalt wird per $_POST['usw'] das ganze an php übergeben der das weiter über die userpoints_api in die Datenbank schreibt.
c) Watchdog Einträge habe ich dann mit produziert zum nachvollziehen...
d) ich bin noch am basteln, aber ich will da irgendwie noch n feedback mit einbauen... das ganze geht dann mit diesem Callback denke ich...
Hab gestern bissel was gelernt und hoffe ich werd noch viel besser :D ...
Danke an dieser Stelle nochmal an Dich salla, an stBorchert und Phil_Ewert und alle Supporter im IRC!!!