Guten Morgen!
ich hab eine seite, bei der der user eine auswahl treffen kann, die ich in realtime in der mysql datenbank abspeichern muss/möchte.
Du könntest bei Änderung eines Formularelements (Attribut onChange) mit Javascript ein (unsichtbares) Bild in der Webseite ändern. Die URL dieses Bildes, eigentlich auf ein verarbeitendes Skript zeigend, nicht auf ein Bild, enthält die an den Server zu übermittelnden Daten, in etwa "sql.php?text1=bla;text2=blabla". Mit $_GET["text1"] etc lassen sich die Daten leicht übernehmen, ausgeben braucht das Skript pro forma nur ein vorbereitetes, durchsichtiges 1x1-Minibild (mit readfile() und header("Content-Type: image/png") oder ähnlichem).
Weil das eventuell nicht so leicht zu durchschauen ist, ein Fertigbausatz, hübsch bunt:
Javascript:
function änderung() {
var p = "";
var v, e, i, j;
for (i = 0; i < document.formular.elements.length; i++) {
e = document.formular.elements[i];
v = "";
switch (e.type) {
case "radio":
if (e.checked) {
v = e.value;
}
break;
case "select-multiple":
case "select-one":
for (var j = 0; j < e.options.length; j++) {
if (e.options[j].selected) {
v = v + ((v.length > 0) ? "," : "") + e.options[j].value;
}
}
break;
default:
v = e.value;
}
if (v != "") {
p = p + ((p.length > 0) ? "&" : "?") + escape(e.name) + "=" + escape(v);
}
}
document.formular.ausgabe.value = p;
}
HTML, als Beispiel angereichert:
<form name="formular" method="post">
<p>
<input type="text" name="text1" onChange="änderung();">
</p>
<p>
<select name="top5" size="3" onChange="änderung();" multiple>
<option value="heino">Heino</option>
<option value="michael">Michael Jackson</option>
<option value="tom">Tom Waits</option>
<option value="nina">Nina Hagen</option>
<option value="bruce">Bruce Springsteen</option>
</select>
</p>
<p>
<input type="radio" name="Zahlmethode" value="Mastercard" onChange="änderung();" > Mastercard<br>
<input type="radio" name="Zahlmethode" value="Visa" onChange="änderung();" > Visa<br>
<input type="radio" name="Zahlmethode" value="AmericanExpress" onChange="änderung();" > American Express
</p>
<hr>
<p>
<textarea name="ausgabe" cols="80" rows="5"></textarea>
</p>
</form>
Wenn Du das ganze zusammengebastelt hast, gibt die Seite nach jeder Änderung in unteren Textfeld das fertige Anhängsel für die URL aus. Es erscheinen nur Elemente, die auch Daten haben, die Einträge des Mehrfachfeldes top5 werden durch ein Komma getrennt.
Um Dein Skript aufzurufen, musst Du die Zeile 'document.formular.ausgabe.value = p;' am Ende durch folgendes ersetzen:
var bild = new Image();
bild.src = "sql.php" + p;
delete bild;
Einziger Wermutstropfen: Der IE ist anscheinend nicht in der Lage, Änderungen an Radioknöpfen korrekt zu melden. Dass er grundsätzlich das letzte angewählte Element statt des gerade neu angewählten meldet, ließe sich noch trickreich umgehen, dass er überhaupt nicht reagiert, wenn zuvor ein anderes Formularfeld geändert wurde, leider nicht.
Du kannst auf <select>-Listen ausweichen oder eines der beliebten Bapperl drunterkleben: "Optimiert für alles außer dem IE" ;-)
als ausweichmöglichkeit hatte ich mir gedacht, das man auch beim schliessen des fensters (onClose?) eine php seite aufrufen könnte, in der ich meine ganz normalen standart sql befehle benutzen kann.
Eigentlich äquivalent wie oben, nur dass änderung() beim Schließen aufgerufen werden müsste. Das geht nur leider nicht, es gibt nur ein onUnload, das beim Wechseln auf eine andere Seite aufgerufen wird.
Baust Du ein ein Formularfeld "Fenster schließen" (<input type="submit" value="Fenster schließen">) ein, kannst Du auf die Javascript-Übermittlung auch verzichten und, anstatt das Fenster zu schließen, das Formular einfach abschicken und erst in der Antwortseite das Fenster schließen.
Grüße.