5 Stimmen

Warum funktioniert in_array() nicht mit $_POST?

Ich versuche, die vom Benutzer übermittelten Daten zu überprüfen, und zwar von $_POST hat mindestens die gleichen Elemente, die mein übergebenes Array hat. Ich tue das, weil ich diese Elemente später verwenden werde, indem ich $_POST['element'] und ich mag keine Fehlermeldungen, die besagen, dass das Element nicht existiert (nicht gesetzt ist) :)

Ich möchte nicht etwas verwenden wie isset($_POST['x'], $_POST['y'], $_POST['z']) denn jedes Mal, wenn ich neu schreiben muss $_POST und es scheint auch unlesbar zu sein.

Ich habe versucht, die in_array(array('x', 'y', 'z'), $_POST) aber es funktioniert nicht (es wird false wenn es zurückkehren sollte true ). Irgendwelche Ideen, wie das funktionieren könnte? :) Ich bin sicher, dass ich leere Strings als $_POST['x'] , $_POST['y'] y $_POST['z'] . Ich habe sogar versucht, die Werte von Schlauch drei zu ändern $_POST Elemente auf etwas anderes als eine leere Zeichenkette zu ändern - trotzdem funktioniert es nicht wie erwartet :(

Danke für den Ratschlag! :)

Bearbeiten:

Ich habe gerade herausgefunden, dass in_array() prüft Werte, nicht Schlüssel. Dann habe ich versucht, wie folgt zu tun...

in_array(array('title', 'slug', 'content'), array_keys($_POST))

Dennoch kehrt sie zurück false . Wie kommt es dazu? ;/

Bearbeiten #2:

Okay, hier sind die Ergebnisse der Fehlersuche...

Eingehend $_POST :

array(3) {
    ["title"]=>
    string(0) ""
    ["slug"]=>
    string(0) ""
    ["content"]=>
    string(0) ""
}

Ergebnis der array_keys($_POST) :

array(3) {
    [0]=>
    string(5) "title"
    [1]=>
    string(4) "slug"
    [2]=>
    string(7) "content"
}

Ergebnis der in_array(array('title', 'slug', 'content'), array_keys($_POST)) :

bool(false)

Die Frage... warum ist es false ? Ich habe alles richtig gemacht, so viel ich weiß.

Bearbeiten #3:

Am Ende habe ich eine eigene Methode namens Arr::keys_exists($keys, $array) .

10voto

Amber Punkte 473552

in_array() prüft, ob ein Wert existiert in einem Array, nicht in einer Schlüssel . Wenn Sie prüfen wollen, ob ein Schlüssel existiert, dann brauchen Sie etwas wie...

in_array('x', array_keys($_POST));

oder die einfachere...

array_key_exists('x', $_POST);

Wenn Sie nach mehreren Schlüsseln gleichzeitig suchen wollen:

$required_keys = array('x'=>1, 'y'=>1, 'z'=>1);
$missing_keys = array_diff_key($required_keys, $_POST);
$missing_keys_count = count($missing_keys);

1voto

ontrack Punkte 2885

Denn in_array prüft, ob sich die Nadel genau in dem Feld befindet. Siehe Beispiel #3 auf der Manual-Seite. array_key_exists kann nicht mit einem Schlüssel als erstes Argument funktionieren, weil Arrays nicht mit Arrays als Schlüssel gültig sind.

Sie wollen etwas wie all_in_array(array $needles, array $haystack); ou array_all_keys_exists(array $keys, array $search); die zurückgibt, ob alle Elemente in dem Array sind. Sie können so etwas wahrscheinlich selbst implementieren oder hier um weitere Hilfe bitten.

0voto

stivlo Punkte 80006

in_array(array('x', 'y', 'z'), $_POST), aber es funktioniert nicht (es gibt false zurück, obwohl es true zurückgeben sollte)

Nein, das sollte es nicht. Lesen Sie das Handbuch von in_array .

Prüft, ob ein Wert in einem Array existiert

Stattdessen möchten Sie die Array-Schlüssel überprüfen. Holen Sie alle Schlüssel mit array_keys und dann in_array verwenden.

Mit in_array können Sie nur einen Wert auf einmal testen, obwohl, nicht ein ganzes Array von Werten wie Sie versuchen zu tun.

Mit anderen Worten, wenn Sie das tun:

in_array(array('title', 'slug', 'content'), array_keys($_POST))

Es wird zu finden ein Element des Schlüssel-Arrays, das ein Array mit Titel, Slug und Kommentar enthält, was nicht das ist, was Sie wollen.

0voto

KingCrunch Punkte 124545

Zuallererst:

Ich möchte nicht so etwas wie isset($_POST['x'], $_POST['y'], $_POST['z']) verwenden, weil ich jedes Mal $_POST neu schreiben muss und es außerdem unlesbar erscheint.

Sie sollten niemals eine der Super-Globals ändern ;)

Allerdings, in_array() sucht nach Werten und nicht nach Schlüsseln

in_array(array('x', 'y', 'z'), array_key($_POST))

0voto

Eugene Punkte 4233
function getPost( $index, $default = '' )
{
    if ( isset( $_POST[ $index ] ) )
    {
        return $_POST[ $index ];
    }

    return $default;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X