PHP: extract($_POST) dann get_defined_vars() gibt nichts zurück... warum?
Ich habe das folgende PHP-Skript:
<?php
function dump_extracted_post() {
extract($_POST);
var_dump(get_defined_vars());
}
dump_extracted_post();
?>
Zu diesem Skript, ich post ein Formular mit Daten, und es ergibt sich die folgende (unerwartete) Ergebnis:
Array(0) {
}
Warum sehe ich nicht das die geposteten Daten?
Gibt es etwas, was ich vermisst habe, in mein Verständnis von extract() oder get_defined_vars()? Ist es eine Art von Sicherheits-Einstellung, die möglicherweise stören die Extraktion von $_POST ?
Ich bin mir bewusst, verpönt Natur-Extrakt, so vielleicht ist es eine Frage der Sicherheit, sondern Scannen die php-docs scheint es nicht zu erwähnen, wie Problem. Ich möchte dies nutzen, um einige einfache templates.
Wenn ich das Skript ändern zu:
<?php
function dump_extracted_post() {
var_dump($_POST);
}
dump_extracted_post();
?>
Sehe ich die geposteten Daten wie erwartet (also ja, ich bin definitiv Buchungsdaten).
Ebenso wenn ich das Skript ändern zu:
<?php
function dump_extracted_post() {
$a = 'moocows';
var_dump(get_defined_vars());
}
dump_extracted_post();
?>
Sehe ich die erwartete Ausgabe:
array(1) {
["a"]=>
string(7) "moocows"
}
- Ihre Funktion funktioniert gut auf meinem localhost. Haben Sie überprüft, um zu sehen, ob
extract()
ist deaktiviert auf deinem server? - Ja, es ist aktiviert und funktioniert:
extract(array('a'=>'b')); var_dump(get_defined_vars());
funktioniert wie ich erwarte... (nur nicht, wenn ich ersetzen Sie das array mit $_POST). PHP 5.3.2. - Ihre ursprüngliche Funktion funktioniert gut für mich auch. Könnten Sie bitte zeigen Sie Ihre HTML-Formular?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre ursprüngliche Funktion funktioniert gut für mich. Ich habe folgende Skript (namens
extract.php
) für die Prüfung:Funktion
extract
extrahiert nur diejenigenkey=>value
Paare, wo der Schlüssel ist gültig Bezeichner nicht in Konflikt mit vorhandenen Variablen. Also wahrscheinlich Schlüssel in Ihrem$_POST
entweder kein Gültiger Bezeichner oder sind conficting mit den vorhandenen Variablen.Konnte ich nicht replizieren, das problem (es arbeitete normal auf meinem Rechner), so VIELLEICHT es sein kann, ein problem mit den Schlüsseln/Werte, die Sie einfügen.
Es kann mühsam sein, aber Sie sollten testen Sie jede Ihrer POST-Parameter. Dies ist mein Vorschlag:
(1) Versuchen Sie es mit einer test-array (Das sollte arbeiten, wie Sie erklärte)
(2) Legen Sie alle Ihre POSTEN Schlüssel/Werte im array und versuchen Sie es erneut
Wenn (2) nicht, bedeutet es, dass etwas in deinem $_POST ist ein problem verursacht.
Testen Sie Ihre Ergebnisse durch einsetzen der POST-Parameter one-by-one,
und sollten Sie an einem Punkt, wo es scheitert.
Wenn Sie erfolgreich begegnen, einen POST-parameter, die bewirkt, dass der Extrakt zu scheitern,
du kannst es lösen (oder comeback auf stackoverflow, die mit einer neuen Frage).