2012-12-10 33 views
0

我有一段代碼,它執行幾個查詢,如果從前兩個查詢中找到一行,那麼它將顯示驗證錯誤,如果沒有找到來自2個查詢的行,那麼它執行插入和另一個SELECT查詢:如何一次顯示所有驗證錯誤而不是一個驗證錯誤?

         // don't use $mysqli->prepare here 
     $query = "SELECT StudentUsername FROM Student WHERE StudentUsername = ?"; 
     // prepare query 
     $stmt=$mysqli->prepare($query); 
     // You only need to call bind_param once 
     $stmt->bind_param("s",$getusername); 
     // execute query 
     $stmt->execute(); 
     // get result and assign variables (prefix with db) 
     $stmt->bind_result($dbStudentUsername); 
     //get number of rows 
     $stmt->store_result(); 
     $numrows = $stmt->num_rows(); 

     $aliasquery = "SELECT StudentAlias FROM Student WHERE StudentAlias = ?"; 
     // prepare query 
     $aliasstmt=$mysqli->prepare($aliasquery); 
     // You only need to call bind_param once 
     $aliasstmt->bind_param("s",$getalias); 
     // execute query 
     $aliasstmt->execute(); 
     // get result and assign variables (prefix with db) 
     $aliasstmt->bind_result($dbStudentAlias); 
     //get number of rows 
     $aliasstmt->store_result(); 
     $aliasnumrows = $aliasstmt->num_rows(); 

    if ($aliasnumrows == 0){ 
     if ($numrows == 0){ 

       $formatdate = date("Y-m-d",strtotime($getdob)); 
       $studentpassword = md5(md5("93w".$studentpassword."ed0")); 


       $insertsql = " 
      INSERT INTO Student 
       (StudentForename, StudentSurname, StudentAlias, StudentUsername, StudentPassword, StudentDOB, Year, CourseId) 
       VALUES 
       (?, ?, ?, ?, ?, ?, ?, ?) 
      "; 
      if (!$insert = $mysqli->prepare($insertsql)) { 
       // Handle errors with prepare operation here 
      }           

      $insert->bind_param("ssssssis", $getfirstname, $getsurname, $getalias, $getusername, $studentpassword, $formatdate, $getyear, $getcourse); 

      $insert->execute(); 

      if ($insert->errno) { 
       // Handle query error here 
      } 

      $insert->close(); 

      // don't use $mysqli->prepare here 
     $query = "SELECT StudentUsername FROM Student WHERE StudentUsername = ?"; 
     // prepare query 
     $stmt=$mysqli->prepare($query); 
     // You only need to call bind_param once 
     $stmt->bind_param("s",$getusername); 
     // execute query 
     $stmt->execute(); 
     // get result and assign variables (prefix with db) 
     $stmt->bind_result($dbStudentUsername); 
     //get number of rows 
     $stmt->store_result(); 
     $numrowsstmt = $stmt->num_rows(); 

     }else{ 
     $errors['username'] = "<span style='color: red'>There is already a Student with that Username</span>"; 
     } 

     }else{ 
     $errors['alias'] = "<span style='color: red'>There is already a Student with that Alias</span>"; 
     } 
    } 

我有但問題是,我想如果滿足這兩個驗證錯誤在同一時間同時顯示驗證錯誤。目前它只能一次顯示驗證錯誤。如果兩個驗證錯誤都符合,我怎樣才能同時顯示兩個驗證錯誤?

下面是它存儲的形式驗證錯誤代碼:

$error_alias= (!empty($errors['alias']))?$errors['alias']:""; 
$error_username = (!empty($errors['username']))?$errors['username']:""; 

$form = " 
<form action='" . htmlentities($_SERVER["PHP_SELF"]) . "' method='post'> 
    <table> 
    <tr> 
    <td>Alias:</td> 
    <td><input type='text' name='alias' value='$getalias' /><br/>".$error_alias."</td> 
    </tr> 
    <tr> 
    <td>Username:</td> 
    <td><input type='text' name='studentusername' value='$getusername' /><br/>".$error_username."</td> 
    </tr> 
    <tr> 
    <td></td> 
    <td><input type='submit' value='Register' name='registerbtn' /></td> 
    </tr> 
    </table> 
    </form>"; 

    echo $form; 

回答

1

您可以更改if語句稍有:

if ($aliasnumrows == 0 && $numrows == 0){ 
    //Do stuff 
}else{ 
    if($aliasnumrows){ 
     $errors['alias'] = "<span style='color: red'>There is already a Student with that Alias</span>"; 
    } 
    if($numrows){ 
     $errors['username'] = "<span style='color: red'>There is already a Student with that Username</span>"; 
    } 
}