Speichern von Daten einer dynamisch generierten Checkbox

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Speichern von Daten einer dynamisch generierten Checkbox

    Hallo meine Lieben!
    Zu allererst möchte ich mich für die vielen tollen Antworten hier danken, die mich in Sachen AJAX schon um einige Schritte weitergebracht haben : )
    Hab nämlich ein Formular in dem Aufgrund der Auswahl in einer Select-Box automatisch Checkboxen generiert werden. Wenn ich diese nun auswähle, können die Daten allerdings nicht übermittelt werden ;(
    d.h. im Klartext: Bei einer Tischreservierung wird ein Tisch ausgewählt, dann wird aus der Datenbank abgerufen welche Plätze an diesem Tisch noch frei sind, diese werden in den Checkboxen ausgegeben.
    Übermittlung von Name, Telefonnr. etc bei Klicken auf den Submit-Button funktioniert perfekt, die Daten die dynamisch generiert worden sind hingegen werden per $_POST leider nicht übermittelt :/
    Wo liegt mein Fehler ? Geht das ganze nicht weil die Checkboxen auf einer anderen Seite definiert werden und nur per getElementById in die Seite mit dem Formular geladen werden ?
    Bin noch ein blutiger Anfänger mit JS und AJAX und hab schon den ganzen Nachmittag hier herumgestöbert und nach Lösungen gesucht, allerdings nichts gefunden : (

    Liebe Grüße und Danke schonmal!
  • Natürlich, hoffe es sind nicht zu viele peinliche Anfängerfehler drin ;)
    JavaScript:

    Quellcode

    1. <script type="text/javascript" language="JavaScript">
    2. <!--
    3. var request = false;
    4. // Request senden
    5. function setRequest() {
    6. // Request erzeugen
    7. if (window.XMLHttpRequest) {
    8. request = new XMLHttpRequest(); // Mozilla, Safari, Opera
    9. } else if (window.ActiveXObject) {
    10. try {
    11. request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
    12. } catch (e) {
    13. try {
    14. request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
    15. } catch (e) {}
    16. }
    17. }
    18. // überprüfen, ob Request erzeugt wurde
    19. if (!request) {
    20. alert("Kann keine XMLHTTP-Instanz erzeugen");
    21. return false;
    22. } else {
    23. var url = "tische2.php";
    24. var tisch = document.getElementById('tisch').value;
    25. // Request öffnen
    26. request.open('post', url, true);
    27. // Request senden
    28. request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    29. request.send('tisch=' + tisch);
    30. // Request auswerten
    31. request.onreadystatechange = interpretRequest;
    32. }
    33. }
    34. // Request auswerten
    35. function interpretRequest() {
    36. switch (request.readyState) {
    37. // wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
    38. case 4:
    39. if (request.status != 200) {
    40. alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
    41. } else {
    42. var content = request.responseText;
    43. // den Inhalt des Requests in das <div> schreiben
    44. document.getElementById('content').innerHTML = content;
    45. }
    46. break;
    47. default:
    48. break;
    49. }
    50. }
    51. //-->
    52. </script>
    Alles anzeigen

    Hier der Body(diverse DIVS die fürs Layout verantwortlich sind hab ich mal ausgelassen):

    Quellcode

    1. <form action="tische.php" method="post" name="formular">
    2. <table border="0" align="left" cellspacing="10px" cols="25%">
    3. <tr>
    4. <td>Vorname: </td>
    5. <td><input type="text" name="vname" title="vname" /></td>
    6. <td>Nachname: </td>
    7. <td><input type="text" name="nname" title="nname" /></td>
    8. </tr>
    9. <tr>
    10. <td>Telefon-Nr: </td>
    11. <td><input type="text" name="tel" title="tel" /></td>
    12. <td>E-Mail-Adresse:</td>
    13. <td><input type="text" name="email" title="email" /></td>
    14. </tr>
    15. <tr>
    16. <td>Tisch:</td>
    17. <td>
    18. <select name="tisch" size="1" onChange="javascript:setRequest()" style="width:100px;" id="tisch">
    19. <?php
    20. for($i=1; $i<=30; $i++) {
    21. echo "<option value=\"$i\">$i</option>";
    22. }
    23. ?>
    24. </select>
    25. </td>
    26. <td>Verfügbare Plätze:</td>
    27. <td> <div id="content">&nbsp;</div>
    28. </td>
    29. </tr>
    30. <tr>
    31. <td colspan="4"><input type="submit" title="submit" name="submit" value="Reservieren" />
    32. </td>
    33. </tr>
    34. </table>
    35. </form>
    Alles anzeigen

    Und dann noch tisch2.php:

    Quellcode

    1. <?php
    2. header('Content-Type: text/html; charset=utf-8'); // sorgt für die korrekte Kodierung
    3. header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0'); // ist mal wieder wichtig wegen IE
    4. $tisch = $_POST['tisch'];
    5. // Verbindung zur DB aufbauen ..
    6. include 'connect.php';
    7. $abfrage = "SELECT platz FROM tischreservierung WHERE tisch = $tisch AND NOT reserviert";
    8. $ergebnis = mysql_query($abfrage);
    9. while($row = mysql_fetch_object($ergebnis)){
    10. echo "$row->platz <input type=\"checkbox\" name=\"platz[]\" value=\"$row->platz\" /> &nbsp;&nbsp;";
    11. }
    12. ?>
    Alles anzeigen


    Sodala ich denk das ist alles relevante.
    Also bei den Tischen sollen in einem Dropdown-Menü 30 Tische zu wählen sein, das funktioniert auch alles bestens, auch werden dann alle verfügbaren Plätze aus der DB geholt usw.
    Nur ist bei Auswahl der Checkboxen dann nach dem Submitten das Array leer

    Quellcode

    1. if(isset($_POST['submit'])) {
    2. $platz = $_POST['platz'];
    3. echo count($platz);
    4. }

    liefert den Wert 0, egal wieviele Checkboxen ich auswähle.
  • Ok, ich hab jetzt mal alle Werte gezählt die per $_POST übermittelt werden und siehe da: Die in der Selektier-Box werden auch übermittelt, aber ich kann einfach nicht auf die Daten zugreifen :/
    Müsste das nicht per

    Quellcode

    1. $platz=$_POST['platz];

    funktionieren ?
    Ich kriegs einfach nicht gebacken und bin am Verzweifeln : (
    Kann mir irgendwer sagen wie ich auf das Array zugreifen kann ?
  • Ich weiß zwar nicht, warum er überhaupt eine Ausgabe macht, denn der sollte niemals in den if-Zweig hineingehen, da $_POST["submit"] in dem Array nicht gesetzt ist. Poste mal bitte die Ausgabe von

    Quellcode

    1. print_r($_POST)

    Ansonsten kann ich leider keinen Fehler entdecken.
    Achja ich denke mal, dass die Null dadurch zu Stande kommt, dass du eine Variable/Arrayfeld zählst, welches nicht definiert ist, denn

    Quellcode

    1. echo count($gibtsnicht)

    zeigt auch 0 an.

    EDIT:
    ICh weiß ja nicht, wie es im Originalen aussieht, aber bei deinem Schnipsel fehlt ein ' beim Feldnamen.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deadman44 ()

  • Ui, ok, das ist interessant .. gewählt wurden wie man eh sieht Platz 1, 2, und 3:
    Array ( [vname] => Max [nname] => Mustermann [tel] => 06641234567 [email] => [email]maxmustermann@gmx.net[/email] [tisch] => 8 [1] => 1 [2] => 2 [3] => 3 [submit] => Reservieren )

    Wie kann das sein wenn in tisch2.php bei den Checkboxen name="platz[]" ist ? O.o

    Edit: Wo genau fehlt denn das ' ? Oooops, gefunden, aber nein, das hat im originalen script schon gestimmt : SS

    Lg und vielen Dank :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von iriss ()

  • Wieso tisch2.php?
    Die Daten deines Formulars gehen nur an die im action Attribut (<form>) angegebene php-Datei, in deinem Fall tische.php. Und nur dort kannst du per $_POST auf die Daten zugreifen.
    Oder habe ich dich falsch verstanden? Denn so wie es aussieht, werden die entsprechenden Daten ja doch übertragen.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.