2011-01-11 7 views
0

Ich habe ein Formular, das einen Bereich von Kontrollkästchen und einen anderen Bereich von Optionsfeldern enthält. Ich habe ein ähnliches Problem mit beiden.Problem beim Abrufen von Werten aus Kontrollkästchen oder Optionsfeldern in PHP

Der HTML-Code für den Abschnitt von Kontrollkästchen wie folgt aussieht:

<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label> 
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label> 
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label> 

Wenn ich das Formular abgesendet haben, die Aktivität Array scheint nicht richtig definiert werden.

Wenn ich die Form verarbeiten, sind markiert, die ersten beiden Kontrollkästchen unter der Annahme, wenn die PHP

$activity = $_POST['activity']; 
var_dump($activity); 

führt er druckt:

array(2) [0]=> string(0) "" [1]=> string(0) "" 

Offensichtlich ist es erfasst wird, dass zwei der drei Boxen sind angekreuzt, aber es passiert nicht die Werte. Wenn der HTML-Code mit dem checked-Attribut für alle Checkboxen beginnt, wird der Checkbox-Wert korrekt gesendet.

In ähnlicher Weise kann ich mit Radiobuttons keinen anderen Wert als den Standardwert erhalten. Wenn der Benutzer den Wert vom Standardwert ändert, ist der Parameter vorhanden, der Wert ist jedoch eine leere Zeichenfolge.

Es ist mein Verständnis, dass das Array die Werte enthalten sollte, die für jedes der Kästchen definiert sind, die angekreuzt wurden, unabhängig davon, ob das Kästchen beim Laden des Formulars angekreuzt wurde. Was mache ich falsch?

+1

Können Sie den HTML-Code Ihres Formulars anzeigen? – lonesomeday

+0

Ja, tut mir leid, nur das behoben. –

+0

Haben Sie etwas wie Firebug/HTTPFox verwendet, um zu sehen, was der Browser aussendet? Es könnte ein clientseitiges Javascript geben, das das Formular ausblendet, oder einige Bibliotheken/Plugins, die dieselbe Server-Seite ausführen. –

Antwort

1

ich Ihr Verhalten mit diesem einfachen Test nicht duplizieren

<?php 

if (isset($_POST['activity'])) 
{ 
    $activity = $_POST['activity']; 
    var_dump($activity); 
} 

?> 

<form method="post"> 
    <input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label> 
    <input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label> 
    <input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label> 
    <input type="submit" value="go" /> 
</form> 

Ich klickte „schwimmen“ und „bike“ und meine Ausgabe sah aus wie dieses

array(2) { [0]=> string(4) "swim" [1]=> string(4) "bike" } 

Also vielleicht etwas anderes nicht stimmt das hast du nicht in deine Frage aufgenommen.

Selbst wenn ich die Anfrage mit Firebug inspizieren sehe ich die erwartete Ausgabe

Content-Type: application/x-www-form-urlencoded 
Content-Length: 39 

activity%5B%5D=swim&activity%5B%5D=bike 
0

Es ist für mich wie erwartet funktioniert, einfach so aufgeklebten kopieren.
Ist es für Sie wirklich nicht funktioniert, wenn Sie dieses Bit wie so isolieren:

<form action="test.php" method="post"> 
<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label> 
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label> 
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label> 
<input type="submit"> 
</form> 
<?php 
$activity = $_POST['activity']; 
var_dump($activity); 
?> 

Ich vermute, dass Sie dieses Problem nicht isolieren hat (wie ich in diesem Snippet tat), und es woanders liegt. Könnte das richtig sein?

+0

Danke für Ihre schnelle Rückmeldung. Es hat mich in die richtige Richtung geführt. Ich hatte nicht versucht, es zu isolieren, und es dauerte nicht lange, bis ich feststellte, dass ich etwas Javascript hatte, das fälschlicherweise den Wert ausblendete, sobald ich versuchte, es zu isolieren. –

+0

Ich war nicht so schnell wie Peter, ich habe Angst ^^ – Ruben

0

Leider hatte das Problem nichts damit zu tun, was ich dachte! Dank der Vorschläge von Peter und Rubin konnte ich feststellen, dass einige Javascript, die ich vor Ewigkeiten geschrieben hatte, um das Formular zu validieren, bevor es an den Server gesendet wurde, fälschlicherweise die Werte der Kontrollkästchen und Optionsfelder ausblendeten Fokus. Ein einfacher Test um das Eingabefeld zu bestätigen war ein Textbereich der gestoppt wurde!