2010-11-24 16 views
4

Ich poste mehrere Checkboxen und setzte sie in ein Array - zum Beispiel: "tags []"Wenn Array isset, etwas tun?

Wenn ich sie poste, implodiere ich sie mit Kommas.

Wenn KEINE Tags auf dem Formular überprüft und dann gebucht werden, erhalte ich Fehler, wenn das Skript versucht, etwas zu implodieren, das nicht da ist.

ich so etwas wie diese verwendet haben versucht:

if (isset($_POST['tags'])){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
} 

Was ist der beste Weg, wenn es implodieren es existiert zu überprüfen, dann?

isset, array_key_exists?

Antwort

6

Sie es in einer Zeile tun konnte, in dieser Situation isset und array_key_exist würden Sie das gleiche Ergebnis geben, aber dann können Sie überprüfen möchten, ob $_POST['tags'] ein Array ...

$tags = isset($_POST['tags']) ? implode(", ", noescape($_POST['tags'])) : null; 

oder

$tags = (isset($_POST['tags']) && is_array($_POST['tags'])) ? implode(", ", noescape($_POST['tags'])) : null; 

Sie können hier testen: http://codepad.org/XoU4AdsJ

1
if (!empty($_POST['tags'])) { 
    $tags = implode(", ", noescape($_POST['tags'])); 
} 
2

, die funktionieren sollte:

if (isset($_POST['tags']) && is_array($_POST['tags'])){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
} 
2
if(array_key_exists('tags',$_POST)) 
{ 
.................. 
} 
1

Ich würde verwenden is_array() und count():

if (is_array($_POST['tags']) && count($_POST['tags'])>0){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
} 
+0

Wenn '$ _POST ['tags']' zufälligerweise eine Zeichenfolge ist, wird dies zum Absturz führen, weil ein 'count (string)' '' 'zurückgibt, wie Sie hier sehen können: http: //codepad.org/AVfZS3qO – Shikiryu

+0

Sie haben Recht. Ich korrigierte gerade meine Antwort, um ein is_array() einzuschließen. –

1

Eigentlich ein einfacher Weg, dies zu tun, so etwas zu tun wäre:

<input type="hidden" name="tags[]" value="none" /> 
<input type="checkbox" name="tags[]" value="Tag 1" /> 
<input type="checkbox" name="tags[]" value="Tag 2" /> 
<input type="checkbox" name="tags[]" value="Tag 3" /> 

Und dann den Standardwert entfernen.

Offensichtlich würde dies immer noch zu Fehlern führen, wenn ein böswilliger Benutzer entschieden hat, einen Beitrag ohne Daten an Ihr Skript zu senden.

Verwandte Themen