为什么我得到这个解析错误



运行php脚本时出现以下错误:

Parse error: syntax error, unexpected '!' in C:xampphtdocssandboxget-started.php on line 43.

这是第43行:

!isset($_POST['budget']) || empty($_POST['budget'])

代码:

if(
    !isset($_POST['name']) || empty($_POST['name']) ||
    !isset($_POST['email']) || empty($_POST['email']) ||
    !isset($_POST['company']) || empty($_POST['company'])
    !isset($_POST['budget']) || empty($_POST['budget'])
    !isset($_POST['message']) || empty($_POST['message'])
){
}else{
    $body = "From: " . $_POST['name'] . "n E-Mail: " . $_POST['email'] . "n Company: " . $_POST['company'] . "n Monthly Budget: " . $_POST['budget'] . "n Message: " . $_POST['message'] "";
    if (mail ($to, $subject, $body, $from)) { 
        echo '<p class="success">Awesome, your message was sent!</p>';
    } else { 
        echo '<p class="error">Uh oh, something went wrong, try again.</p>'; 
    }
}

如何修复此错误?

在第42行和第43行的末尾缺少||

应该是:

if(
    !isset($_POST['name']) || empty($_POST['name']) ||
    !isset($_POST['email']) || empty($_POST['email']) ||
    !isset($_POST['company']) || empty($_POST['company']) ||  // <-- here
    !isset($_POST['budget']) || empty($_POST['budget']) ||    // <-- here
    !isset($_POST['message']) || empty($_POST['message'])
)

Protip:当编译器/解析器指出一个行号时,不要认为问题一定在那一行。它可能在之前的线路上(就像本例中一样),也可能在之前有几十条线路。或者它可能在之后的线路上。关键是:编译器/解析器不喜欢或不期望在给定的行中看到什么。为什么不呢?


在这行的末尾:

$body = "From: " . $_POST['name'] . "n E-Mail: " . $_POST['email'] . "n Company: " . $_POST['company'] . "n Monthly Budget: " . $_POST['budget'] . "n Message: " . $_POST['message'] "";

你有

$_POST['message'] "";

删除那些"",或者添加一个连接运算符(.)来连接一个(毫无意义的)空字符串。

在第42行和第43行的末尾缺少一些逻辑或(||)。

将其解析为:

if( !isset($_POST['name']) || empty($_POST['name']) || !isset($_POST['email']) || empty($_POST['email']) || !isset($_POST['company']) || empty($_POST['company']) || //<---- !isset($_POST['budget']) || empty($_POST['budget']) || //<---- !isset($_POST['message']) || empty($_POST['message']) ){

您可能需要重新考虑这样做的方式(请参阅编辑),但与此同时,我怀疑问题出在以下方面:

!isset($_POST['company']) || empty($_POST['company'])
!isset($_POST['budget']) || empty($_POST['budget'])

在之后添加||

!isset($_POST['company']) || empty($_POST['company']) ||
!isset($_POST['budget']) || empty($_POST['budget']) ||

您的另一个错误来自:

 $body = "From: " . $_POST['name'] . "n E-Mail: " . $_POST['email'] . "n Company: " . $_POST['company'] . "n Monthly Budget: " . $_POST['budget'] . "n Message: " . $_POST['message'] "" //<-- These are no good.

结尾的那些引号不好,去掉它们。

$body = "From: " . $_POST['name'] . "n E-Mail: " . $_POST['email'] . "n Company: " . $_POST['company'] . "n Monthly Budget: " . $_POST['budget'] . "n Message: " . $_POST['message'];

编辑:在许多情况下(注意,我说过很多,不是大多数,不是全部),isset()empty()不需要结合使用。isset()检查该值是否设置为任何,包括0和''。empty()将检查它是否已设置,如果已设置,将查看它是否是大多数人认为的"空"值,例如null、''、0和其他值。

所以,我倾向于只使用!empty()isset(),它们本身就足够了。

用于检查空和isset的方法非常无效。查看empty()函数的PHP文档,可以看到以下内容。

确定变量是否为空。如果变量不存在或其值等于FALSE ,则视为空

if(
   empty($_POST['name'])    ||
   empty($_POST['email'])   ||
   empty($_POST['company']) ||
   empty($_POST['budget'])  ||
   empty($_POST['message'])) 
{
   // Something is empty.
}

如果将来确实需要使用isset(),可以在一个函数调用中用逗号分隔所有变量,以检查所有变量。如果没有设置以下任何一个参数,它将返回false,但这对empty()不起作用。

if(isset($_POST['name'],$_POST['email'],$_POST['company'])) }
   // name, email and company are all set
}

相关内容

  • 没有找到相关文章

最新更新