2017-06-13 91 views
-1

我有一個基本的PHP驗證一個簡單的接觸形式,這裏的代碼的相關部分:JavaScript警告不彈出與PHP變量

$err = ''; 

    if(!preg_match("/^[a-zA-Z ]*$/",$name)) { 
     $err .= "Name : Only letters and white space allowed.\n"; 
    } 
    if(strlen($name)<3){ 
     $err .= "Name : Please enter your full name.\n"; 
    } 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $err .= "Email : Invalid email format.\n"; 
    } 
    if(strlen($email)<8){ 
     $err .= "Email : Okay, how about using a correct email address?\n"; 
    } 
    if(strlen($message)<30){ 
     $err .= "Message : Message too short.\n"; 
    } 

    if($err != ''){ 
     $err = 'There were few errors : \n '.$err; 

     //THE ALERT BELOW DOESN'T WORKS, gets added into body code, but does not popup 
     echo '<script type="text/javascript">alert("'.$err.'");</script>'; 

     // While this one works well 
     //echo '<script type="text/javascript">alert("This alert works. \nThe one above does not.");</script>'; 
    } 
    else{ 
     //whatever 
    } 

的問題是,alert()在過去,如果條件不起作用,它會被添加到主體代碼中,但不會彈出。雖然如果我使用普通文本而不是$err變量(就像一個註釋掉的那樣) - 這一切都很好。

我在過去有過這個問題好幾次,我永遠無法理解爲什麼會發生&有什麼解決辦法,我總是寧願刪除警報,通常在一個div或東西顯示響應消息,但是這一次我需要知道 - 爲什麼??

+0

首先,去檢查瀏覽器控制檯,它會告訴你有關你的JavaScript語法錯誤。之後,閱讀JavaScript允許的文本字符串/字符串的語法。 – CBroe

+0

我認爲問題在於php'\ n'中的換行符。我可以看到這打破了JS輸出。 – evolutionxbox

+0

@evolutionxbox我認爲是這樣,但事實並非如此,因爲下面的警報(一個評論)運作良好。 – Echoes

回答

0
if($err != ''){ 
     $err = 'There were few errors : \n '.$err; 


     echo '<script type="text/javascript">alert('.$err.');</script>'; 
    } 
    else{ 
     //whatever 
    } 
+0

儘管此代碼可能會回答問題,但提供有關如何解決問題和/或解決問題原因的其他上下文會提高答案的長期價值。 – Badacadabra