【问题标题】:Why am I getting this parse error? [closed]为什么我会收到此解析错误? [关闭]
【发布时间】:2014-04-17 23:18:15
【问题描述】:

运行 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>'; 
    }
}

如何解决这个错误?

【问题讨论】:

    标签: php html forms parse-error


    【解决方案1】:

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

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

    【讨论】:

    • 我添加了 ||但我现在收到 T_CONSTANT_ENCAPSED_STRING 错误。我会记住这个提示,谢谢。
    • 答案已编辑。
    • 我删除了 "" 并且它起作用了。感谢您的帮助。
    【解决方案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']) ){

    【讨论】:

      【解决方案3】:

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

      !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() 检查值是否设置为 anything,包括 0 和 ''。 empty() 将检查它是否已设置,如果已设置,将查看它是否是大多数人认为的“空”值,例如 null、''、0 等。

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

      【讨论】:

      • 它解决了这个问题,但现在我得到了;; T_CONSTANT_ENCAPSED_STRING
      • @user3232801 检查我更新的答案,应该可以解决该错误。
      • 太棒了,它成功了!谢谢!我看到你说要重新考虑我这样做的方式,你介意告诉我正确的方式吗?
      • 感谢您的帮助!
      • 当然,检查我的更新答案
      【解决方案4】:

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

      【讨论】:

      • 所以您是说我应该从 if ( ) 中删除 !isset($_POST['name']) || 等,以使我的代码高效?如果不是,您认为您可以将您的意思放在 jsfiddle 中吗?
      • 好吧,我怀疑它在性能上有什么真正的不同,但是由于您已经在使用empty(),因此对相同的变量使用isset() 是没有意义的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2012-03-23
      • 2018-06-22
      • 2016-01-01
      相关资源
      最近更新 更多