2017-06-13 60 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