2014-04-17 26 views
-1

我收到以下錯誤,當我運行我的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>'; 
    } 
} 

如何解決這個問題?

回答

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()這些都是足夠的。

+0

它解決了這個問題,但現在我得到;; T_CONSTANT_ENCAPSED_STRING – user3232801

+0

@ user3232801檢查我更新的答案,應該解決該錯誤。 – jboneca

+0

真棒,它的工作!謝謝!我看到你說過要重新考慮我這樣做的方式,你會介意給我看正確的方法嗎? – user3232801

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']) 
) 

普羅蒂普:當編譯器/分析器指出行號,不假定問題保證在那條線上。它可能在之前(比如在這種情況下),或者可能在幾十行之前。或者它可能在之後。關鍵是這樣的:編譯器/解析器不喜歡或期望它在給定行看到的內容。爲什麼不?


在這行的末尾:

$body = "From: " . $_POST['name'] . "\n E-Mail: " . $_POST['email'] . "\n Company: " . $_POST['company'] . "\n Monthly Budget: " . $_POST['budget'] . "\n Message: " . $_POST['message'] ""; 

你有

$_POST['message'] ""; 

刪除那些"",或添加一個連接符(.)來連接一個(無意義)空字符串。

+0

我添加了||但我現在正在收到T_CONSTANT_ENCAPSED_STRING錯誤。我會記住這個提示,謝謝。 – user3232801

+0

答案已被編輯。 –

+0

我刪除了「」,它工作。謝謝你的幫助。 – user3232801

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

0

的方法使用的是檢查空isset非常inneffecitent。查看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 
} 
+0

所以你說我應該刪除!isset($ _ POST ['name'])||,從我的代碼if()的效率更高效?如果沒有,你認爲你可以把你的意思放在jsfiddle中嗎? – user3232801

+0

嗯,我懷疑它在性能上有什麼不同,但是因爲你已經使用'empty()',所以沒有必要使用'isset()'作爲相同的變量。 – David