0

我正在创建一个很长的表单,并且并非所有字段都会得到答复,如何在他们点击发送按钮并收到电子邮件后隐藏未答复的字段?

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

 /* 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>
4

3 回答 3

3

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

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

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

利用:

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

这将创建$_POST['field']一个数组,$_POST['field']['email']其中包含您的值。从技术上讲,您可以在不重命名字段并循环$_POST自身的情况下执行此操作,但这会假设您没有发布任何与字段无关的数据,并且您永远不会......这不是一个安全的假设。

重命名 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";
                }
            }
        }
    }
}
于 2013-07-30T08:21:56.773 回答
0

如果没有填写就不要要求吗?

if(!isset($_POST['access'])){
// Do whatever
} else {
// do something else
}
于 2013-07-30T02:24:36.593 回答
0

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

于 2013-07-30T02:25:36.053 回答