首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中,如何隐藏未回答的字段?

在PHP中,如何隐藏未回答的字段?
EN

Stack Overflow用户
提问于 2013-07-30 02:21:30
回答 3查看 97关注 0票数 0

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

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

代码语言:javascript
复制
 /* 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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-30 08:21:56

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

您可以使用一个循环来测试值和填充电子邮件正文,但是它需要稍微重新设计HTML表单,例如给出不同的名称,而不是:

代码语言:javascript
复制
<input type="text" name="email">

使用:

代码语言:javascript
复制
<input type="text" name="field[Email]">

这将将$_POST['field']创建为一个数组,其值包括您的值,如$_POST['field']['email']。从技术上讲,您可以在不重命名字段和遍历$_POST本身的情况下做到这一点,但这将假设您没有发布任何与字段无关的数据,而且永远也不会。这可不是个安全的假设。

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

代码语言:javascript
复制
$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表单字段的动态性质,如下所示:

代码语言:javascript
复制
<input type="text" name="field[Contact][Email]">

然后对于PHP:

代码语言:javascript
复制
$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";
                }
            }
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-07-30 02:24:36

如果没有填好的话就不请求了?

代码语言:javascript
复制
if(!isset($_POST['access'])){
// Do whatever
} else {
// do something else
}
票数 0
EN

Stack Overflow用户

发布于 2013-07-30 02:25:36

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17937300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档