0

帮助!我在将一些条件语句放入表单的 php 脚本时遇到了一些麻烦。

这是 HTML 的要点:

<input type="text" name="address1" id="address1" class="required" />
<input type="text" name="address2" id="address2" />
<input type="text" name="city" id="city" />
<input type="text" name="postcode" id="postcode" class="required" />

php看起来有点像这样:

$address1 = $_REQUEST["address1"] ;
$address2 = $_REQUEST["address2"] ;
$city = $_REQUEST["city"] ;
$postcode = $_REQUEST["postcode"] ;

$message = 
"address: $address1, " .
"$address2, " .
"$city, " .
"$postcode" .

$sent = mail($to, $subject, $message, 'From:' . $email_address) ;

我对'address1'和'postcode'进行了一些jQuery验证,所以它们不是问题,因为它们总是会返回一个值。如果没有填写“address2”和“city”(也许填表人的地址没有第二行,或者没有按照他们的想法填写城市 - 正确 - 邮政编码就足够了在找到他们的地址时)他们仍然在电子邮件上返回一个值(“无”)。

我想要发生的是留空的表单输入根本不发送电子邮件。换句话说,如果 $address2 变量为空,请不要向我发送“空格”。例如,如果一切都完成了,我会得到这个,这很棒:

地址:1 Test Street, West End, Test City, AB1 23C

如果缺少一个字段,我会得到这个,这有点混乱:

地址:1 Test Street, , Test City, AB1 23C

但我想要这个,因为它又好又整洁:

地址:1 Test Street, Test City, AB1 23C

我一直试图了解 isset 函数,但没有任何运气。我也尝试了一个基本的“if”语句,但似乎也无法获得任何结果。我必须承认,php 不是我的强项,我在这方面花了很多时间但没有成功。非常感激您的帮忙!

非常感谢,

马丁。

4

3 回答 3

1

对于这种“参数过滤”问题,我喜欢使用 PHP 数组函数。

例如:

<?php
$aMessage = array();

$aMessage[] = $_REQUEST["address1"] ;
$aMessage[] = $_REQUEST["address2"] ;
$aMessage[] = $_REQUEST["city"]     ;
$aMessage[] = $_REQUEST["postcode"] ;

$aMessage = array_filter($aMessage);

$message = (implode(', ', $aMessage));

echo $message;
?>

它能做什么:

  1. 用不同的参数填充数组。
  2. array_filter使用函数删除空值
  3. 打印用逗号(implode函数)连接的值。

使用这种方法,即使您有很多参数,代码也很容易阅读。

于 2011-04-06T12:15:03.033 回答
0

在导入到 db 之前定义一个新的 php 变量

$address=$_REQUEST["address1"];

if (trim($_REQUEST["address2"]!=''))
$address.=','.$_REQUEST["address2"]
于 2011-04-06T11:12:29.243 回答
0

如果变量已设置,则 isset() 返回 true - 即,已声明且具有非 NULL值。除了关于 NULL 的那一点之外,isset() 没有说明该变量的内容

要测试变量是否真正为空(空字符串、NULL、FALSE、0、空数组等),请使用恰当命名的 empty() :)

例子:

$a = NULL;
$b = '';
// $c we won't declare
echo isset($a); // False - $a has a NULL value
echo isset($b); // True - $b is set to a non-NULL Value. empty() will return True too.
echo isset($c); // False - $c is not set.

做船长上面提到的另一种方法:

$address = "";
foreach( array( "address1", "address2", "address3" ) as $param )
{
    $param = trim($_REQUEST[$param]);
    $address .= !empty( $param ) ? ', '.$param : "";
}

它的工作方式:

  1. 在您想要的 $_REQUEST 数组中定义元素的名称。
  2. 您循环遍历每个元素,将其值从 $_REQUEST 中提取出来,去除任何散乱的空白(使用 trim())。
  3. 如果参数不为空,则将其附加到 $address。
  4. 如果它为空,则附加一个空字符串。

如果您以前没有见过它,那么该condition ? expr_if_true : expr_if_false语法称为三元运算符

有点清洁,IMO。更少的 if/else 语句运行。

于 2011-04-06T12:09:31.277 回答