2014-04-17 2 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>'; 
    } 
} 

가 어떻게이 오류를 수정합니까?

!isset($_POST['company']) || empty($_POST['company']) 
!isset($_POST['budget']) || empty($_POST['budget']) 

||을 추가

답변

1
당신은이 (편집 참조)하지만 말은 시간에, 나는 다음과 같은 생각하고있는 방법을 재고 할 수 있습니다

문제입니다.

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

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

이 (.)을 그 ""를 제거하거나 연결 연산자를 추가는 (무의미) 빈 문자열을 연결하는 .

+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 문서를 보면 다음과 같은 내용을 볼 수 있습니다.

변수가 비어 있다고 판단하십시오. 변수는 존재하지 않는 경우 빈 고려 또는 그 값은

if(
    empty($_POST['name']) || 
    empty($_POST['email']) || 
    empty($_POST['company']) || 
    empty($_POST['budget']) || 
    empty($_POST['message'])) 
{ 
    // Something is empty. 
} 

를 FALSE 동일한 경우이고 혹시 미래에 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

관련 문제