运行我的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>';
}
}
如何解决此错误?
答案 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
}