-1

老实说,这是我编写过的最挑剔和最笨拙的语言。当这个项目很好并且结束时,我会很高兴。

无论如何,我必须使用 PHP,所以这是我的问题。

我有一个名为 $form_data 的数组:

$form_data = array 
('trav_emer_med_insur',
'trav_emer_single',
'trav_emer_single_date_go',
'trav_emer_single_date_ba',

'trav_emer_annual',
'trav_emer_annual_date_go',

'trav_emer_extend',
'trav_emer_extend_date_go',
'trav_emer_extend_date_ef',
'trav_emer_extend_date_ba',


'allinc_insur',

'allinc_insur_opt1',
'allinc_single_date_go',
'allinc_single_date_ba',

'allinc_insur_opt2',
'allinc_annual_date_go',
'allinc_annual_date_ba',



'cancel_insur',
'allinc_annual_date_go', 
'allinc_annual_date_ba',



'visitor_insur', 
'country_select',

'visitor_supervisa', 
'visitor_supervisa_date_go',
'visitor_supervisa_date_ba',

'visitor_student',
'visitor_student_date_go',
'visitor_student_date_ba',

'visitor_xpat',
'visitor_xpat_date_go',
'visitor_xpat_date_ba',

'txtApp1Name',
'txtApp2Name',
'txtApp1DOB',
'txtApp2DOB',
'txtApp1Add',
'txtApp1City',
'selprov',
'txtApp1Postal',
'txtApp1Phone',
'txtApp1Ext',
'txtApp1Email',
'conpref', );

这些是 HTML 表单上的 name="" 字段的名称。我已经使用 var_dump($_POST) 验证了所有名称都存在并且默认值为 ''。

我想要做的很简单,使用 $form_data 作为参考这样做:

  • 创建一个名为 $out_data 的新数组,它可以处理要在反流表单上显示的数据。

$out_data 的结构很简单,例如,键是另一个数组 $out_data[txtApp1Name] 中元素的名称,然后该键的值就是值。

  • 现在我想要的是首先检查是否设置了每个 name="" ,以消除错误并验证数据。然后不管是否设置,在 $out_data 数组中创建它的占位符。

  • 因此,如果 $_POST[$form_data[1]] (name is 'trav_emer_single') 未设置,则在 $out_data 中创建一个类似于 $out_data([trav_emer_single] => "NO DATA") 的条目

  • 如果设置了 $_POST[$form_data[1]] (name is 'trav_emer_single'),则在 $out_data 中创建并输入如下所示: $out_data([trav_emer_single] => "whatever the user type in")

我试过这段代码:

$out_data = array();
$count = count($form_data); 
for( $i = 0; $i < $count; $i++ ) 
{
    if(!isset($_POST[$form_data[$i]])) {
        $out_data[$form_data[$i]] = "NO_DATA";
        }
    else {
        $out_data[$form_data[$i]] = $_POST[$form_data[$i]];
        }
}

现在这段代码在技术上是有效的,它正在遍历数组并分配值,但它没有正确执行。

我在没有输入任何内容的情况下点击了提交。因此,每个项目都应该在我的反刍输出上显示“NO_DATA”(供用户查看),但是只有一些项目在说它。我确认的所有项目都有 name="" 并与数组匹配,并且没有输入任何内容。为什么没有将“NO_DATA”分配给数组中的每个项目?

另外值得注意的是,如果我完全填写表格 $out_data 已完全正确填充。!isset 有什么问题?我试过做 $_POST[$form_data[$i]] == '' 它确实把 no_data 放在没有数据的每个实例中,但是无论我写什么,它都会为页面上的每个项目引发“未定义索引”警告在盒子里与否。

真的我只是想知道 WTF 正在进行中,这个项目的最后期限正在快速关闭,PHP 的每一步都让我感到悲伤。

据我通过阅读我的代码可以看出是有效的,但拒绝像宣传的那样执行。

如果您需要更多代码示例,请询问。

真的很困惑,没有错误,没有任何工作,请帮助。

谢谢-肖恩

4

2 回答 2

2

而不是检查!isset(),使用empty(). 如果表单发布了一个空字符串,它仍然会在 中显示$_POST为一个空字符串,并isset()返回TRUE.

我已经用循环替换了你的增量for循环foreach,它几乎总是在 PHP 中用于迭代数组。

$out_data = array();
foreach ($form_data as $key) {
    if(empty($_POST[$key])) {
        $out_data[$key] = "NO_DATA";
    }
    else {
        $out_data[$key] = $_POST[$key];
    }
}
于 2012-09-21T05:08:25.543 回答
1

PHP 的isset返回TRUE,除非变量未定义或它是NULL. 空字符串""不会导致它返回FALSEempty()不过,将完全满足您的需求。

http://php.net/manual/en/function.isset.php

如果测试已设置为 NULL 的变量,isset() 将返回 FALSE。另请注意,NULL 字节(“\0”)不等同于 PHP NULL 常量。

如果 var 存在并且值不是 NULL,则返回 TRUE,否则返回 FALSE。

于 2012-09-21T05:10:08.387 回答