2010-11-25 20 views
1

Ich habe vorher ein Skript erstellt, das in PHP 5.2 einwandfrei funktionierte. Aber als ich kürzlich zu meinem Freundesserver (Version PHP 4.4.9) ging, bemerkte ich, dass einige Aktionen nicht so funktionierten, wie sie sollten. Das Ergebnis von dem, was die Kontrollkästchen zurück kam verrückt heraus ...Foreach on checkboxes gibt keine Werte zurück

Dies ist der Code Ich verwende: Für die Form:

<input type="checkbox" value="Box1" name="BoxGroup[]" />Box1 
<input type="checkbox" value="Box2" name="BoxGroup[]" />Box2 
<input type="checkbox" value="Box3" name="BoxGroup[]" />Box3 

Für die Aktion Skript:

if($_POST['BoxGroup'] == true){ // If one of the checkboxes were checked... 
    foreach($_POST['BoxGroup'] as $value){ 
    $BoxGroup .= ", ".$value; // Make the array into a string 
    } 
    $BoxGroup = substr($BoxGroup,2); // To skip ", " from the beginning of the $BoxGroup variable 
} 

Nun, was dieses Skript macht, ist; Wenn ein Benutzer das Formular sendet, prüft es, ob eines der Kontrollkästchen aktiviert ist, und wenn dies der Fall ist, wird eine Zeichenfolge wie "Wert, Wert" usw. erstellt. Ich füge diese Werte in meine Datenbank ein. Wenn ich eine Vorschau der Daten an die Datenbank auf einer Seite zeige, bekomme ich "ray/value/value", also wurde nur "ray" (wie in "Array") für die erste Box übergeben, wie es scheint.

Leider kann ich die Server-Version von PHP nicht aktualisieren, da sowohl der Systembetreiber als auch ich das Root-Passwort nicht haben (ich weiß, dass es verrückt ist).

Also was mache ich?

+2

Wenn Ihr Sysop nicht wissen kann, wie Sie das root-Passwort zurücksetzen, erhalten Sie einen neuen Sysop. – cdhowie

+0

stillstanding: Sorry, ich war mit der Version einer anderen Anwendung verwechselt. Ich meinte PHP 5.2. cdhowie: Ich denke, das kann er nicht einmal, denn es ist ein Server von einem Web-Hotel. – Nisto

+0

Ein "Webhotel"? Will ich das wissen? –

Antwort

1
implode(', ', array_keys($_POST['BoxGroup'])) 
+0

Ich habe nicht versucht, die Schlüssel zur Datenbank hinzuzufügen, aber das brachte mich dahin, wo ich wollte (array_values). Also akzeptiere ich diese Antwort. Vielen Dank!=) – Nisto

0

Die anderen Kommentare in Bezug auf implode sind gute Ratschläge, aber ich sehe nicht, wie es Ihr Problem behebt. (Nun, es könnte tatsächlich, wenn Sie die Variable auf den Rückgabewert von implode initialisieren, aber das das Kernproblem hier nicht behoben.)

Initialize $BoxGroup richtig. Ich wette $BoxGroup = 'Array';, bevor die Schleife sogar läuft ... wahrscheinlich, weil register_globals eingeschaltet ist. Eeeek, deaktiviere das.

In .htaccess:

php_flag register_globals off 

Zu erarbeiten, Ich gehe davon aus, dass, wenn Sie ein var_dump($BoxGroup) tun, würden Sie sehen, dass es bereits diese Werte dank register_globals enthält. Das Array wird als String 'Array' behandelt, wenn Sie es mit einem anderen String verbinden.

+0

Leider scheint es, register_globals auszuschalten, funktioniert nicht. – Nisto

+0

Stellen Sie sicher, dass "AllowOverride Options" für dieses Verzeichnis aktiviert ist. – Matthew

+0

Uh-huh. Ich habe versucht "AllowOverride Options All", aber der Host gab mir nur Fehler 500. – Nisto

Verwandte Themen