2013-10-29 272 views
1

我有一個項目,我需要創建註冊表單並將其插入數據庫。註冊表單(驗證電子郵件)

我每次嘗試註冊時都會卡住,它會彈出一條消息,提示「請輸入有效的電子郵件格式」。與電子郵件的正則表達式有關嗎?

下面是代碼

<?php 
    require_once('sqlconnect.inc.php'); 

    session_start(); 
    if (isset($_POST["Register"])) 
     { 
      $email = $_POST['email']; 
      $memberName = $_POST['membername']; 
      $passw = $_POST['password']; 
      $conPassw = $_POST['conpassword']; 

      if($email=='') 
      { 
      echo "<p>Please enter the Email address</p>"; 
      echo "<a href=\"signup.php\">Back to Registration Page!</a>"; 
      exit(); 
      } 

      if($memberName=='') 
      { 
      echo "<p>Please enter the Member Name</p>"; 
      echo "<a href=\"signup.php\">Back to Registration Page!</a>"; 
      exit(); 
      } 

      if($passw=='') 
      { 
      echo "<p>Please enter Password</p>"; 
      echo "<a href=\"signup.php\">Back to Registration Page!</a>"; 
      exit(); 
      } 

      if($conPassw=='') 
      { 
      echo "<p>Please enter Confirm Password</p>"; 
      echo "<a href=\"signup.php\">Back to Registration Page!</a>"; 
      exit(); 
      } 
      else { 

      $email = $_POST['email']; 
      $pattern = '/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/'; 
      if (preg_match($pattern, $email)) 
      { 
       echo "<p>Please enter a valid email format<p>"; 
       } 
       else{ 
       $memberName = strtolower(trim($_POST['membername'])); 
       $_SESSION['name'] = $_POST['membername']; 
       $pattern1 = '/^[a-z][a-z ]*$/i'; 
       if (preg_match($pattern1, $memberName)) 
        { 
        echo "<p>Member name must contain only letters, space and hypen</p>"; 
        } 
        else{ 

        $pattern2 = '^[a-zA-Z0-9]+$'; 
        if (preg_match($pattern2, $passw)) 
         { 
         echo "<p>Password must only contain numbers and letters!</p>"; 
         } 
         else{ 

           if($passw<>$conPassw) 
           { 
            echo "<p>Passwords does not match!</p>"; 
            $passw=""; 
            $conPassw=""; 
           } 
           else{ 

           $conn = @mysqli_connect($host, $user, $pswd, $dbnm); 
           if (!$conn) 
           die ("<p>Couldn't connect to the server!<p>"); 
           $SelectDatabase = @mysqli_select_db($conn,"s7259476_db") 
           or die("<p>The database is not available.</p>"); 

            $insertDatabase = "INSERT INTO team VALUES('NULL','$email','$password','$memberName',CURDATE(),0)"; 
            $queryResult = @mysqli_query($conn, $insertDatabase) 
            or die ("<p>Email already exists.Please enter another email id</p>"); 
            echo"<p>Data entered into friends table successfully</p>"; 
            echo "<p>Welcome"." ".$_SESSION['name']."</p>"; 
           } 
          } 
         } 
        } 
       } 
      } 


?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/chtml-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" > 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <meta name="description" content="Web Programming :: Assignment 2" /> 
    <meta name="Keywords" content="Web, programming" /> 
    <title>Register Page</title> 
</head> 

<body> 

<form id='register' action='signup.php' method='POST'> 
     <fieldset > 
      <legend><h1>My Team System Registration Page</h1></legend> 
      <?php $email = isset($_POST['email']) ? filter_var($_POST['email'], FILTER_SANITIZE_STRING) : ''; ?> 
      <?php $memberName = isset($_POST['membername']) ? filter_var($_POST['membername'], FILTER_SANITIZE_STRING) : ''; ?> 
      <div class="elements"> 
      <label for='email' >Email:</label> 
       <input type='text' name='email' id='email' maxlength="50" value="<?php echo $email; ?>" /> 
      </div> 
        <br /> 
      <div class="elements"> 
      <label for='membername' >Member Name:</label> 
       <input type='text' name='membername' id='membername' maxlength="50" value="<?php echo $memberName; ?>" /> 
      </div> 
        <br /> 
      <div class="elements"> 
      <label for='password' >Password:</label> 
       <input type='password' name='password' id='password' maxlength="50" /> 
      </div> 
        <br /> 
      <div class="elements"> 
      <label for='conpassword' >Confirm Password:</label> 
       <input type='password' name='conpassword' id='conpassword' maxlength="50" /> 
      </div> 
        <br /> 
      <div class="submit"> 
       <input type='submit' name='Register' value='Register' /> 
       <input type='reset' name='Submit' value='Clear' /> 
        <br /> 
      <div class="elements"> 
      <a href="Index.php">Home</a> 
     </fieldset> 
</form> 

</body> 
</html> 

回答

3

不要使用正則表達式驗證電子郵件地址。 PHP有filter_var,這是快速和易於使用。電子郵件地址使用正則表達式進行正確驗證非常痛苦(有一個正則表達式可以在某個地方正確地驗證它們,而且它是巨大的!)。

filter_var驗證的電子郵件地址可能是這樣的一些典型代碼:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) 
{ 
    echo "Invalid email address"; 
} 
+0

感謝馬修!過濾var的電子郵件是更容易,會有類似的代碼,我可以使用成員名稱/用戶名?發生了一個問題,並問我它的成員名稱,它必須包含字母,空格,這再次與正則表達式的問題,我假設 –

+0

@TylerMatema我會使用正則表達式來驗證用戶名。然而,filter_var支持許多不同的過濾器,其中之一是FILTER_VALIDATE_REGEXP,所以你仍然可以使用filter_var或preg_match如你所願 –

+0

@TylerMatema我的正則表達式有點生疏,但看着你的用戶名正則表達式,如果你想只是允許字母和連字符,我認爲/^[az - ] + $ /就是你在 –