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

时间:2014-04-17 23:18:15

标签: php html forms parse-error

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

Parse error: syntax error, unexpected '!' in C:\xampp\htdocs\sandbox\get-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>'; 
    }
}

如何解决此错误?

4 个答案:

答案 0 :(得分:3)

您在第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'] "";

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

答案 1 :(得分:2)

您在第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']) ){

答案 2 :(得分:1)

你可能想重新考虑你这样做的方式(参见编辑),但与此同时,我怀疑以下是问题所在:

!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()

答案 3 :(得分:0)

用于检查空和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
}