Php 为什么我会遇到这个解析错误?

Php 为什么我会遇到这个解析错误?,php,html,forms,parse-error,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'])| |空($_POST['name']))|| !isset($_POST['emai

我在运行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'])| |空($_POST['name']))||
!isset($_POST['email'])| |空($_POST['email']))||
!isset($_POST['company'])| |空($_POST['company']))
!isset($_POST['budget'])| |空($_POST['budget']))
!isset($_POST['message'])| |空($_POST['message']))
){
}否则{
$body=“From:”.$\u POST['name'].\n电子邮件:“.$\u POST['email'.]”.\n公司:“.$\u POST['Company'.]”.\n每月预算:“.$\u POST['Budget'.\n邮件:“.$\u POST['Message']”;
如果(邮件($to,$subject,$body,$from)){
回声“

太棒了,您的消息已经发送了!

”; }否则{ echo'

哦,出了问题,请再试一次。

; } }

如何修复此错误?

您可能希望重新考虑执行此操作的方式(请参见编辑),但同时,我怀疑问题出在以下方面:

!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.
编辑: 在许多情况下(注意我说的很多,不是大多数,不是全部),
isset()
empty()
不需要结合使用
isset()
检查该值是否设置为任何值,包括0和“”<代码> EMPTY()/代码>将检查它是否被设置,如果是,将查看它是否是大多数人认为的“空”值,例如NULL、“0”和其他。p>
所以,我倾向于使用
!empty()
isset()
本身就足够了

第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'])
)
你有

$_POST['message'] "";

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

第42行和第43行的末尾缺少一些逻辑or(
|

决心:

if(
!isset($_POST['name'])| |空($_POST['name']))||
!isset($_POST['email'])| |空($_POST['email']))||

!isset($_POST['company'])| | empty($_POST['company'])|/用于检查空和isset的方法非常无效。查看PHP文档中的函数,您可以看到以下内容

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

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

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

它解决了那个问题,但现在我却陷入了困境_STRING@user3232801检查我的最新答案,应该可以解决这个错误。太棒了,它成功了!谢谢!我看到你说要重新考虑我的做法,你介意告诉我正确的方法吗?谢谢你的帮助!哦,当然,检查我的最新答案我添加了| |但我现在明白了正在生成T_常量_ENCAPSED_字符串错误。我会记住这个提示,谢谢。答案已编辑。我删除了“”,它成功了。感谢您的帮助。所以您是说我应该从if()中删除!isset($_POST['name'])| |等为了让我的代码更高效?如果不是的话,你认为你可以把你的意思放在JSFIDLE中吗?好吧,我怀疑它在性能上有什么真正的不同,但是因为你已经在使用
empty()
了,所以对相同的变量使用
isset()
$body = "From: " . $_POST['name'] . "\n E-Mail: " . $_POST['email'] . "\n Company: " . $_POST['company'] . "\n Monthly Budget: " . $_POST['budget'] . "\n Message: " . $_POST['message'] "";
$_POST['message'] "";
if(
   empty($_POST['name'])    ||
   empty($_POST['email'])   ||
   empty($_POST['company']) ||
   empty($_POST['budget'])  ||
   empty($_POST['message'])) 
{
   // Something is empty.
}
if(isset($_POST['name'],$_POST['email'],$_POST['company'])) }
   // name, email and company are all set
}