PHP $ _POST和extract()除了可能是一个casted int之外什么也没显示

时间:2015-12-08 10:20:04

标签: php post extract

我有一个简单的表格使用帖子

<form id="quote_form" name="n_quote_form" method="post" action="quote">

(此处的操作是一个url参数(排序),页面加载脚本使用该参数将用户引导回此页面in_quote.php

switch ($urlParam) {
        case 'quote':
            $incPage = "in_quote.php";
            break;
        case 'contact':
            $incPage = "in_contact.php";
            break;
        case 'links':
            $incPage = "in_links.php";
            break;
        default:
            $incPage = "in_home.php";
            break;
    }

所以当我用这个数据填写表格时

enter image description here

将此数据传递给此脚本:

function submit_quote_form(){

    if (validate_form($_POST)){

反过来调用这个脚本:(我没有实现验证,直到我可以使用$_POSTextract()提取表单数据,因为我不想每次都手动输入密钥表单更改或者如果我想在其他地方重用我的验证脚本(少修改)

这个脚本正确地转储了$ form_data var($_POST本质上我认为我们可以假设它不是传递参数问题)但是然后提取变量$var似乎被转换为int大小11 ???

function validate_form($form_data) {
    var_dump($form_data);
    $var = extract( $form_data, EXTR_OVERWRITE, "form_" );
    var_dump($var);
    echo "THIS IS MY POST VAR ==>";
    var_dump($_POST); // included for comparison
}

var_dump $form_data时结果很奇怪 (将$form_data$_POST进行比较,以确保它不是参数传递问题)

输出:

  

array(11){[“n_name”] =&gt; string(3)“bob”[“n_email”] =&gt; string(12)“bob@bobs.com”[“n_email2”] =&gt; string(12)“bob@bobs.com”[“n_day_from”] =&gt; string(1)“8”[“n_month_from”] =&gt; string(8)“December”[“n_year_from”] =&gt; string(4)“2015”[“n_day_to”] =&gt; string(1)“9”[“n_month_to”] =&gt; string(8)“December”[“n_year_to”] =&gt; string(4)“2015”[“n_bike_reqs”] =&gt; string(14)“5 bikes please”[“submit_but”] =&gt; string(13)“get my quotes”} int(11)这是我的帖子VAR ==&gt; array(11){[“n_name”] =&gt; string(3)“bob”[“n_email”] =&gt; string(12)“bob@bobs.com”[“n_email2”] =&gt; string(12)“bob@bobs.com”[“n_day_from”] =&gt; string(1)“8”[“n_month_from”] =&gt; string(8)“December”[“n_year_from”] =&gt; string(4)“2015”[“n_day_to”] =&gt; string(1)“9”[“n_month_to”] =&gt; string(8)“December”[“n_year_to”] =&gt; string(4)“2015”[“n_bike_reqs”] =&gt; string(14)“5 bikes please”[“submit_but”] =&gt; string(13)“get my quotes”}

我尝试使用以下方法将提取转换为数组:

$var = (array) extract( $_POST, EXTR_OVERWRITE, "form_" );

但这给了我这个:

  

array(1){[0] =&gt; int(11)}

在     var_dump($var);

所以只将int转换为长度为1的整数数组! 我可以使用个别密钥,因为这里的其他帖子已经建议但我不想特别在这里其他帖子使用提取方法接受答案时 - 它只是不适合我!

Q值。为什么extract()不起作用,因为我/我认为它应该???

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

extract会将数组键和值添加到当前符号表中,因此在数组上使用extract后,可以使用数组键作为变量名。它将返回数组值。

$size = "large";
$var_array = array("color" => "blue",
               "size"  => "medium",
               "shape" => "sphere");
$var=extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_size\n";
echo $var;

我得到的结果是:

蓝色,大,球形,中等3