You are not logged in.

  • Login

1

Sunday, April 18th 2010, 6:04pm

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!

2

Sunday, April 18th 2010, 6:27pm

Bitte Quellcode und ein paar Testdaten mitliefern.

Aber so weit ich weiß, sollten per JS dynamisch eingefügte Checkboxen bei einem Submit genau so behandelt werden, wie normale, schon im HTML-Quellcode vorhandene.

3

Sunday, April 18th 2010, 7:01pm

Natürlich, hoffe es sind nicht zu viele peinliche Anfängerfehler drin ;)
javascript:

JavaScript Code

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

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

HTML Code

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

Und dann noch tisch2.php:

PHP Quellcode

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


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

PHP Quellcode

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

liefert den Wert 0, egal wieviele Checkboxen ich auswähle.

4

Sunday, April 18th 2010, 9:46pm

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

PHP 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 ?

5

Sunday, April 18th 2010, 9:55pm

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

PHP 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

PHP 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.

This post has been edited 1 times, last edit by "Deadman44" (Apr 18th 2010, 10:01pm)


6

Sunday, April 18th 2010, 10:23pm

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 :)

This post has been edited 1 times, last edit by "iriss" (Apr 18th 2010, 10:29pm)


7

Sunday, April 18th 2010, 10:40pm

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.

Similar threads

Social bookmarks