在PHP中如何隐藏未答复的字段?

时间:2013-07-30 02:21:31

标签: php

我正在创建一个非常长的表单,并不是所有字段都会被回答,如何在点击发送按钮后隐藏未找到的字段并收到电子邮件?

所以我想知道的是,在发送提交按钮后,我可以添加到我的脚本中以隐藏空白字段。

 /* Data Variables */

$email = $_POST['email'];
$name = $_POST['name'];
$phone = $_POST['phone'];
$uplift = $_POST['uplift'];
$upliftc = $_POST['upliftc'];
$city = $_POST['city'];
$post = $_POST['post'];
$delivery = $_POST['delivery'];
$deliveryc = $_POST['deliveryc'];
$city2 = $_POST['city2'];
$post2 = $_POST['post2'];
$ground = $_POST['ground'];
$second = $_POST['second'];
$second2 = $_POST['second2'];
$ground2 = $_POST['ground2'];
$internal =$_POST['internal'];
$internal2 =$_POST['internal2'];
$external =$_POST['external'];
$external2 =$_POST['external2'];
$access =$_POST['access'];
$queen = $_POST['queen'] * 1.7;





$body = <<<EOD
<br><hr><br>
Name: $name <br>
Email: $email <br>
Phone; $phone <br>
<br>
Uplift; $uplift <br>
Continued; $upliftc <br>
City; $city <br>
Post Code; $post <br>
<br>
Delivery Address; $delivery <br>
Continued; $deliveryc <br>
City; $city2 <br>
Post; $post2 <br>
<br>
Uplift; <br>
Ground Floor; $ground <br>
Second Floor; $second <br>
Internal Stairs; $internal <br>
External Stairs; $external <br>
<br>
Delivery; <br>
Ground Floor; $ground2 <br>
Second Floor; $second2 <br>
Internal Stairs; $internal2 <br>
External Stairs; $external2 <br>
Truck Access; $access <br>
Queen Bed; $queen <br>

3 个答案:

答案 0 :(得分:3)

其他人提到isset()函数,但这不起作用。即使用户在提交表单时没有填写值,该变量仍然设置,因此所有变量在TRUE运行时都会返回isset()empty()是您最好的选择。

您可以使用循环来测试值并填充电子邮件正文,但是需要通过赋予值不同的名称来重新设计HTML表单,例如,而不是:

<input type="text" name="email">

使用:

<input type="text" name="field[Email]">

这将创建$_POST['field']作为数组,其中包含$_POST['field']['email']等值,其中包含您的值。从技术上讲,您可以在不重命名字段并循环遍历$_POST本身的情况下执行此操作,但这会假设您没有发布任何非字段相关数据,并且您永远不会......不安全。< / p>

重命名HTML表单字段后,处理请求的PHP代码如下所示:

$email_body = "";
if( is_array( $_POST['field'] )) {
    foreach( $_POST['field'] as $name => $value ) {
        if( !empty( $value )) {
            $email_body .= "$name: $value<br>\n";
        }
    }
}

这比你写的代码少得多。它还将省略空白值,并且仅支持通过修改HTML表单来添加新字段,而无需修改处理它的PHP代码。

我注意到您生成的电子邮件正文似乎将值分解为多个部分。您可以使用与我上面所写的相同的想法,通过向数组添加另一个索引来实现这一点,并且它将保持创建HTML表单字段的动态特性,如下所示:

<input type="text" name="field[Contact][Email]">

然后是PHP:

$email_body = "";
if( is_array( $_POST['field'] )) {
    foreach( $_POST['field'] as $category => $fields ) {
        $email_body .= "<br>\n";

        if( is_array( $fields )) {
            foreach( $fields as $name => $value ) {
                if( !empty( $value )) {
                    $email_body .= "$name: $value<br>\n";
                }
            }
        }
    }
}

答案 1 :(得分:0)

如果没有填写,请不要求?

if(!isset($_POST['access'])){
// Do whatever
} else {
// do something else
}

答案 2 :(得分:0)

如果给定的变量有值,则有isset($variable_name)函数返回true,否则返回false。