Status von Checkboxen mit $_REQUEST auslesen?
Yadgar
- php
High!
Nochmal die Lotto-Simulation:
Damit ich die im Start-Formular getippten Zahlen auch mit denen der Ziehung vergleichen kann, suche ich nach einer Möglichkeit, den Status der 49 Checkboxen zum Tippen auszulesen.
Der Einfachheit halber heißen diese Checkboxen Kaestchen[0]... ...Kaestchen[48], so dass ich sie bequem in einer Schleife abfragen kann.
Nun meine Frage: Ist es möglich, den Status dieser Checkboxen (müsste ja ein boolescher Wert sein) mittels $_REQUEST auszulesen? Die if-Abfrage
if ($_REQUEST['Kaestchen[40].checked'])
echo "Die Zahl 40 wurde getippt!";
else echo "Die Zahl 40 wurde nicht getippt!";
verzweigt immer nach "false", auch wenn 40 angekreuzt wurde! Wieso?
Bis bald im Khyberspace!
Yadgar
hi,
Nun meine Frage: Ist es möglich, den Status dieser Checkboxen (müsste ja ein boolescher Wert sein) mittels $_REQUEST auszulesen?
Nur im Fall, dass sie angekreuzt sind - denn nur dann wird ihr Wert übertragen.
Die if-Abfrage
if ($_REQUEST['Kaestchen[40].checked'])
verzweigt immer nach "false", auch wenn 40 angekreuzt wurde! Wieso?
Weil du lustig PHP und Javascript vermischst.
Dein Checkbox hat nicht den Namen 'Kaestchen[40].checked', sondern 'Kaestchen[40]'.
Und durch diese Schreibweise kommen die Werte in PHP als Array an.
Wenn dir die Struktur der übergebenen Daten nicht klar ist, nutze print_r() für Erleuchtung.
http://tut.php-q.net/formulare.html
http://php-faq.de/ch/ch-webvariablen.html
gruß,
wahsaga
High!
Weil du lustig PHP und Javascript vermischst.
Dein Checkbox hat nicht den Namen 'Kaestchen[40].checked', sondern 'Kaestchen[40]'.
Und durch diese Schreibweise kommen die Werte in PHP als Array an.
Wenn dir die Struktur der übergebenen Daten nicht klar ist, nutze print_r() für Erleuchtung.
Mit Kaestchen[40] habe ich das gleiche Problem!
Was soll ich print_r() übergeben?
Bis bald im Khyberspace!
Yadgar
hi,
Mit Kaestchen[40] habe ich das gleiche Problem!
Natürlich.
Was soll ich print_r() übergeben?
Das, dessen Struktur dir unklar ist - also $_REQUEST (oder $_GET/$_POST, je nachdem).
gruß,
wahsaga
echo $begrüßung;
Was soll ich print_r() übergeben?
Das, dessen Struktur dir unklar ist - also $_REQUEST (oder $_GET/$_POST, je nachdem).
Und vor dem print_r() ein <pre> ausgeben kann der Übersicht noch dienlicher sein. (Ein Blick in den Quelltext der ausgelieferten Seite tut's auch.)
echo "$verabschiedung $name";
High!
Und vor dem print_r() ein <pre> ausgeben kann der Übersicht noch dienlicher sein. (Ein Blick in den Quelltext der ausgelieferten Seite tut's auch.)
Das habe ich gemacht... das Array-Element "Kaestchen" enthält den Wert "on" - na klasse! Das bedeutet doch nur, dass überhaupt *irgendein* Kästchen angekreuzt wurden... wie soll ich damit feststellen, welche Kästchen konkret gewählt wurden? Bin ich vielleicht (noch) nicht Nerd genug, damit es mir wie Schuppen von den Augen fällt?!?
Bis bald im Khyberspace!
Yadgar
echo $begrüßung;
das Array-Element "Kaestchen" enthält den Wert "on" - na klasse! Das bedeutet doch nur, dass überhaupt *irgendein* Kästchen angekreuzt wurden...
Schau bitte noch einmal genauer hin. Siehst du "[Kaestchen] => on" oder siehst du etwas anderes? Hast du auch mal mehrere Kästchen angekreuzt?
echo "$verabschiedung $name";
High!
Schau bitte noch einmal genauer hin. Siehst du "[Kaestchen] => on" oder siehst du etwas anderes? Hast du auch mal mehrere Kästchen angekreuzt?
Ich habe die Javascript-Prüfroutine (es soll nur dann zu "ziehung.php" weitergeleitet werden, wenn genau sechs Kästchen angekreuzt wurden) mal auskommentiert... wenn ich jetzt bei 0 angekreuzten Kästchen auf "Ziehung!" (also submit) klicke, bleibt das Array leer, andernfalls wird *immer* "[Kaestchen] => on" angezeigt, egal, welche oder wieviele Kästchen ich angekreuzt habe!
Es muss wohl daran liegen, dass in "lottoschein.php" (hier angefügt) sämtliche Kästchen-Checkboxen "Kaestchen" heißen - und der Parser folglich gar nicht entscheiden kann, welches konkrete einzelne Kästchen angekreuzt ist... oder irre ich mich da?
<html>
<head>
<script language="javascript" type="text/javascript">
function checkTip()
{
ch = 0; // Zähler für angekreuzte Kästchen
for (i=0; i<49; i++)
{
if (document.getElementsByName('Kaestchen')[i].checked) ch++;
}
if (ch == 6) return true;
if (ch < 6)
{
alert("Sie müssen 6 Kästchen markieren!");
return false;
}
if (ch > 6)
{
alert("Sie dürfen nur 6 Kästchen markieren!");
return false;
}
}
function cancelTip()
{
for (i=0; i<49; i++) document.getElementsByName('Kaestchen')[i].checked = false;
}
</script>
<title>LOTTO - 6 aus 49</title>
</head>
<body>
<!--onSubmit="return checkTip()"-->
<form name="Lottoschein" action="Ziehung.php" method="post">
<table width="250">
<?php
for($i=1; $i<=49; $i++)
{
if($i % 7 == 1) echo "<tr>";
echo "<td style='text-align:center'>$i<br><input type='checkbox' name='Kaestchen'></input></td>";
if(!($i % 7)) echo "</tr>";
}
?>
</table>
<input type="submit" value="Ziehen!"></input>
<input type="button" value="Tipp löschen!" onClick="cancelTip()"></input>
</form>
</body>
</html>
Bis bald im Khyberspace!
Yadgar
echo $begrüßung;
Schau bitte noch einmal genauer hin. Siehst du "[Kaestchen] => on" oder siehst du etwas anderes? Hast du auch mal mehrere Kästchen angekreuzt?
[...] wird *immer* "[Kaestchen] => on" angezeigt, egal, welche oder wieviele Kästchen ich angekreuzt habe!
Es muss wohl daran liegen, dass in "lottoschein.php" (hier angefügt) sämtliche Kästchen-Checkboxen "Kaestchen" heißen - und der Parser folglich gar nicht entscheiden kann, welches konkrete einzelne Kästchen angekreuzt ist... oder irre ich mich da?
Nein, da irrst du dich nicht. Aber warum heißen sie nun nur noch Kaestchen und nicht mehr, wie am Anfang des Thread Kaestchen[0] bis Kaestchen[48]? Wenn du ihnen keine eindeutigen Namen gibst, kannst du sie nicht mehr unterscheiden. Es sei denn, sie haben eindeutige Werte (Attribut value).
Probier doch mal beide Varianten (name="Kaestchen[42]" und value="42") und schau dir an, was du dann jeweils in $_POST stehen hast.
echo "$verabschiedung $name";