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