2012-06-14 111 views
0

我看不出为什么变量$errorMessage不会设置数组错误。PHP不会显示我的表单验证错误消息

我正在尝试进行表单验证。此PHP全部位于页面顶部register.php

这是我正在尝试工作的页面。我希望我能解决这个问题!

<?php 
    session_start(); 
    // include("includes/connect.php"); 
    include ("includes/html.php"); 


    if (isset($_POST['submit'])){ 
     $error = array(); 

     //username 
     if (empty($_POST['username'])){ 
     $error[] = 'Please Enter a Username'; 
     } 
     else if (ctype_alnum ($_POST['username'])){ 
     $userName = $_POST['username']; 
     } 
     else { 
     $error[] = 'Username Must Consist Letters and Numbers Only'; 
     } 

     //email 
     if (empty($_POST['email'])){ 
     $error[] = 'Please Enter an Email'; 
     } 
     else if (!preg_mach ("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+) 
↪*(\.[a-z]{2,3})$",$_POST['email'])) { 
     $email = mysql_real_escape_string ($_POST['username']); 
     } 
     else { 
     $error[] = 'Your Email Address is Invalid'; 
     } 

     //password 
     if (empty($_POST['password'])){ 
     $error[] = 'Please Enter a password'; 
     } 
     else if ($_POST['password']!==$_POST['password2']){ 
     $error[] = 'Your Password Did Not Match'; 
     } 
     else { 
     $password = mysql_real_escape_string($_post['password']); 
     } 
    } 

    if (empty ($error)){ 
     //good info 
    } 
    else { 
     $errorMessage = '<span class="error">'; 
     foreach ($error as $key => $e){ 
     $errorMessage.= "$e"; 
     } 
     $errorMessage.= '</span> <br /><br />'; 
    } 

?> 
+0

不是一个答案,但是这是一个相当[弱电子邮件验证(http://php.net/manual/en/ function.filter-var.php)。 – PeeHaa

+0

你在哪里打印'$ errorMessage'变量? – shadyyx

+0

无论如何,你可以用一个更漂亮的方式做到这一点:'$ errorMessage =''。 implode('
',$ error)。 '


'; echo $ errorMessage;'。 – shadyyx

回答

2

$error数组被索引,所以你应该使用:

foreach ($error as $e){ 

} 
+0

是的,你是对的。我猜我做了太多的OOP;)。我检查了你的答案,这是正确的+1。 – Zbigniew

0

因为你检查是否错误数组为空。如果有任何错误消息,它将不会为空,您将跳过整个消息构建块。

if (!empty ($error)){ 
    ^---- if NOT EMPTY 
+0

在他的代码中有if-else:如果错误为空 - 不显示错误,则以其他方式显示所有错误。我没有看到错误 – DaneSoul

+0

Shees,完全错过了。我讨厌那样的空块... –