2014-10-28 112 views
0

按下reg按鈕後,我的登錄腳本顯示錯誤消息,我只能收到一條回顯消息。PHP登錄腳本不能處理頁面可用錯誤

編輯一個

它是有意義的使用elseif或者我應該使用if ... else ...

編輯兩個

程序結束後,我怎麼能顯示所有可用的錯誤下的輸入框遇到的計劃?


PHP

<?php 
if($_POST['reg'] == "Registrieren"){ 
    $email = $_POST['email']; 
    $username = $_POST['user']; 
    $password = $_POST['pw']; 
    $passwordrep = $_POST['pwrep']; 

    $email = stripslashes($email); 
    $username = stripslashes($username); 
    $password = stripslashes($password); 
    $passwordrep = stripslashes($passwordrep); 

    /*if(isset($_SESSION['log']) OR $_SESSION['log'] == 1){ 
     $error['already_online'] = 1; 
     $error['main'] = 1; 
    }else*/if(empty($username)){ 
     $error['username_empty'] = 1; 
     $error['main'] = 1; 
    }else{ 
     if(empty($email)){ 
      $error['email_empty'] = 1; 
      $error['main'] = 1; 
     }else{ 
      if(empty($password) OR empty($passwordrep)){ 
       $error['passwords_empty'] = 1; 
       $error['main'] = 1; 
      }else{ 
       if($password == $passwordrep){ 
        $error['password_confirm'] = 1; 
        $error['main'] = 1; 
       }else{ 
        if(strlen($username) < 6 OR strlen($username) > 64){ 
         $error['username_too_short'] = 1; 
         $error['main'] = 1; 
        }else{ 
         if(strlen($password) < 8 OR strlen($passwordrep) < 8){ 
          $error['password_too_short'] = 1; 
          $error['main'] = 1; 
         }else{ 
          if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
           $error['email_invalid'] = 1; 
           $error['main'] = 1; 
          }else{ 
           if(!preg_match('/^[a-z\d]{2,64}$/i', $username)){ 
            $error['username_invalid'] = 1; 
            $error['main'] = 1; 
           }else{ 
            if($error['main'] = 0){ 
            include_once("config/db_config.php"); 

            $email = mysqli_real_escape_string($con, $email); 
            $username = mysqli_real_escape_string($con, $username); 
            $password = mysqli_real_escape_string($con, $password); 
            $passwordrep = mysqli_real_escape_string($con, $passwordrep); 

            $sql = "SELECT * FROM hp_user WHERE username = '$username'"; 
            $query = mysqli_query($con, $sql) or die($msg_signup["signup_no_connection_aviable"]); 
            $row = mysqli_num_rows($query); 
            if($row == 1){ 
             $error['username_exists'] = 1; 
             $error['main'] = 1; 
            }else{ 
             $sql = "SELECT * FROM hp_user WHERE email = '$email'"; 
             $query = mysqli_query($con, $sql) or die($msg_signup["signup_no_connection_aviable"]); 
             $row = mysqli_num_rows($query); 
             if($row == 1){ 
              $error['email_exists'] = 1; 
              $error['main'] = 1; 
             }else{ 
              $_SESSION['log'] = 1; 
              $_SESSION['user'] = $query->username; 
              $_SESSION['email'] = $query->email; 
              $add = mysqli_query($con,"INSERT INTO `agptest`.`hp_user` (`ID`, `username`, `email`, `password`, `date`, `locked`, `permission`) VALUES (NULL, '$username', '$email', '$passwordrep', CURRENT_TIMESTAMP, '0', '1');"); 
              $error['main'] = 0; 
              mysqli_close(); 
              } 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 
?> 

<?php 
if ($error['main'] == "0") { 
    header("Location: http://www.allgameplay.de/?site=default"); 
}else{ 
    echo "<h1>Registrierung</h1>"; 
    echo "<form method=\"post\" action=\"index.php\">\n"; 
    echo "Benutzername:<br><input name=\"user\" type=\"text\" size=\"30\"><br>"; 
    if($error['username_empty'] == 1){ 
     echo $msg_signup['signup_user_empty']; 
    } 
    if($error['username_too_short'] == 1){ 
     echo $msg_signup['signup_user_too_short']; 
    } 
    if($error['username_invalid'] == 1){ 
     echo "Dein Benutzername ist ungültig!"; 
    } 
    echo "<br>E-Mail Adresse:<br><input name=\"email\" type=\"text\" size=\"30\"><br>"; 
    if($error['email_empty'] == 1){ 
     echo "Du hast keine E-Mail Adresse angegeben!"; 
    } 
    if($error['email_invalid'] == 1){ 
     echo "Dies ist keine richtige E-Mail Adresse!"; 
    } 
    echo "<br>Passwort:<br><input name=\"pw\" type=\"password\" size=\"30\"><br>"; 
    if($error['passwords_empty'] == 1){ 
     echo "Du hast kein Passwort angegeben!"; 
    } 
    echo "<br>Passwort wiederholen:<br><input name=\"pwrep\" type=\"password\" size=\"30\"><br>"; 
    if($error['passwords_empty'] == 1){ 
     echo "Du hast kein Passwort angegeben!"; 
    } 
    if($error['password_confirm'] == 1){ 
     echo "Die Passw&ouml;rter stimmen nicht überein!"; 
    } 
    echo "<br><input type=\"submit\" name=\"reg\" value=\"Registrieren\"><br>"; 
} 
?> 
+0

你能告訴我們錯誤信息是什麼嗎? – eggy 2014-10-29 00:02:19

+0

這個「錯誤消息」是自己聲明的消息。他們不會在表格下顯示... – 2014-10-29 00:15:01

回答

0

編輯一個

是的,你應該使用ELSEIF,它使你的代碼看起來更乾淨。

編輯兩個

您可以使用GET方法與switch語句和foreach循環回你的錯誤。

無論是你還是你可以使用jQuery檢查錯誤,並配置它沒有PHP。

​​

編輯:

$error = array('abc','def', 'ghi'); 
foreach ($error as $i) { 
    switch ($i) { 
     case "abc": 
      echo $i; 
     case "def": 
      echo $i; 
     case "ghi": 
      echo $i; 
     default: 
      echo "No case found!"; 
    } 
} 

我希望這將清除foreach循環您的疑問。

+0

我怎樣才能完全用'foreach'循環來做到這一點?你可以請張貼一個非常簡短的例子嗎? – 2014-10-29 18:05:04

0

更換

if($password == $passwordrep) 

if($password != $passwordrep) 

,你需要聲明的錯誤陣列之前,如果($ _ POST [ 'REG'] ==「Registri二連「)