Ich versuche, ein Array in einem versteckten Feld zu veröffentlichen und möchte dieses Array nach dem Absenden eines Formulars in PHP abrufen.
$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
Nach dem Drucken des angegebenen Werts wird jedoch nur eine Array-Zeichenfolge angezeigt. Wie kann ich das lösen?
Antworten:
Verwenden:
$postvalue = array("a", "b", "c"); foreach($postvalue as $value) { echo '<input type="hidden" name="result[]" value="'. $value. '">'; }
Und Sie erhalten
$_POST['result']
als Array.print_r($_POST['result']);
quelle
name="result[][]"
Es gibt hauptsächlich zwei Möglichkeiten, dies zu erreichen:
Serialisieren Sie die Daten auf folgende Weise:
$postvalue = serialize($array); // Client side $array = unserialize($_POST['result']; // Server side
Und dann können Sie die gebuchten Werte mit unserialisieren
unserialize($postvalue)
. Weitere Informationen hierzu finden Sie in den PHP-Handbüchern .Alternativ können Sie die Funktionen
json_encode()
undjson_decode()
verwenden, um eine JSON-formatierte serialisierte Zeichenfolge abzurufen. Sie können die übertragenen Daten sogar mit verkleinerngzcompress()
(beachten Sie, dass dies leistungsintensiv ist) und die übertragenen Daten mit sichernbase64_encode()
(damit Ihre Daten in sauberen Nicht-8-Bit-Transportschichten überleben). Dies könnte folgendermaßen aussehen:$postvalue = base64_encode(json_encode($array)); // Client side $array = json_decode(base64_decode($_POST['result'])); // Server side
Eine nicht empfohlene Methode zum Serialisieren Ihrer Daten (aber sehr kostengünstig) besteht darin, sie einfach
implode()
in Ihrem Array zu verwenden, um eine Zeichenfolge zu erhalten, bei der alle Werte durch ein bestimmtes Zeichen getrennt sind. Auf der Serverseite können Sie dann das Array mit abrufenexplode()
. Beachten Sie jedoch, dass Sie kein Zeichen für die Trennung verwenden sollten, das in den Array-Werten auftritt (oder es dann maskiert), und dass Sie die Array-Schlüssel mit dieser Methode nicht übertragen können.Verwenden Sie die Eigenschaften von speziellen benannten Eingabeelementen:
$postvalue = ""; foreach ($array as $v) { $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />'; }
Auf diese Weise erhalten Sie Ihr gesamtes Array in der
$_POST['result']
Variablen, wenn das Formular gesendet wird. Beachten Sie, dass hierdurch keine Array-Schlüssel übertragen werden. Sie können dies jedoch erreichen, indem Sieresult[$key]
als Namen für jedes Feld verwenden.Jede dieser Methoden hat ihre eigenen Vor- und Nachteile. Was Sie verwenden, hängt hauptsächlich davon ab, wie groß Ihr Array sein wird, da Sie mit all diesen Methoden versuchen sollten, eine minimale Datenmenge zu senden.
Eine andere Möglichkeit, dies zu erreichen, besteht darin, das Array in einer serverseitigen Sitzung zu speichern, anstatt es clientseitig zu übertragen. Auf diese Weise können Sie über die
$_SESSION
Variable auf das Array zugreifen und müssen nichts über das Formular übertragen. Schauen Sie sich dazu ein grundlegendes Anwendungsbeispiel für Sitzungen auf php.net an .quelle
value
Attribut verwenden. Andernfalls wurden die Daten beim ersten doppelten Anführungszeichen in der serialisierten Version gekürzt.Sie können serialize und base64_encode auf der Clientseite verwenden. Verwenden Sie danach unserialize und base64_decode auf der Serverseite.
Mögen:
Verwenden Sie auf der Clientseite:
$postvalue = array("a", "b", "c"); $postvalue = base64_encode(serialize($array)); // Your form hidden input <input type="hidden" name="result" value="<?php echo $postvalue; ?>">
Verwenden Sie auf der Serverseite:
$postvalue = unserialize(base64_decode($_POST['result'])); print_r($postvalue) // Your desired array data will be printed here
quelle
Entweder serialisieren:
$postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo serialize($postvalue); ?>">
bei Empfang:
unserialize($_POST['result'])
Oder implodieren:
$postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo implode(',', $postvalue); ?>">
Bei Erhalt:
explode(',', $_POST['result'])
quelle
Wenn Sie ein Array veröffentlichen möchten, müssen Sie eine andere Notation verwenden:
foreach ($postvalue as $value){ <input type="hidden" name="result[]" value="$value."> }
Auf diese Weise haben Sie drei Eingabefelder mit dem Namen result [] und wenn veröffentlicht,
$_POST['result']
wird ein Arrayquelle
<input type="hidden" name="item[]" value="[anyvalue]">
Lassen Sie es in einem wiederholten Modus sein, es wird dieses Element in der Form als Array veröffentlichen und die verwenden
print_r($_POST['item'])
Um den Artikel abzurufen
quelle
Es ist besser, zuerst in eine JSON-Zeichenfolge zu codieren und dann beispielsweise in umgekehrter Reihenfolge mit Base64 zu codieren: Verwenden Sie zuerst die Funktionen base64_decode und dann json_decode. So stellen Sie Ihr PHP-Array wieder her.
quelle
Sie können es so machen:
<input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">
quelle