2013-03-18 48 views
0

我有一個PHP文件User.php,其中包含User類,一些私有全局變量,getter和setter,構造函數以及連接到數據庫的方法。在發佈表單後調用函數不起作用

<?php 
class User { 

    //Some Private Global Variables ($firstName,$lastName,etc..) 
    //Getters and Setters 

    public function getUserByID($userID) { 
     //Create Instance 
     $user = new User(); 
     //Get User Info 
     $con=mysqli_connect("localhost","root","","mydatabase"); 
     if ($con->connect_error) { 
      die('Connect Error: ' . $con->connect_error); 
     } 
     $query ='SELECT user_id,first_name,last_name,email,password,birth_date,gender,join_date '. 
       'FROM users '. 
       'WHERE user_id = ?'; 
     $stmt = $con->stmt_init(); 
     if($stmt->prepare($query)) { 
      $stmt->bind_param('s',$userID); 
      $stmt->execute(); 
      $stmt->bind_result($user->userID,$user->firstName,$user->lastName,$user->email,$user->password,$user->birthDate,$user->gender,$user->joinDate); 
      if($stmt->fetch()==null) { 
       //User doesn't exist 
       return null; 
      } 
      $stmt->close(); 
      $con->close(); 
      return $user; 
     } 
    } 
?> 

在包含形式另一個文件,如果我做了以下之前if(isset($_POST['submit']))

$user = new User(); 
$user1 = $user->getUserByID('222'); 

一切完美,但如果它的後寫的,我填寫表格,並張貼,它不會執行,我收到這樣的:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\Classes\User.php on line 113

UPDATE

形式,遺憾的長碼,但它是在驗證...

if (isset($_POST['submit'])){ 
       //Get submitted values 
       $firstname = $_POST["firstname"]; 
       $lastname = $_POST["lastname"]; 
       $email = $_POST["email"]; 
       $password = $_POST["password"]; 
       $month = $_POST["month"]; 
       $day = $_POST["day"]; 
       $year = $_POST["year"]; 
       $gender = $_POST["gender"]; 
       //Validation 
       //First Name 
       $firstname_regex = '/^[a-zA-Z -]+$/'; 
       if($firstname=="" || ctype_space($firstname)) 
       { 
        $firstnameValid = false; 
        $firstnameError = "First Name is Required"; 
       } 
       else if(!preg_match($firstname_regex, $firstname)) 
       { 
        //First Name must contain letters, spaces, dashes, and capital letter 
        $firstnameValid = false; 
        $firstnameError = "First Name contains Invalid Characters"; 
       } 
       else 
       { 
        //Valid 
        $firstnameValid = true; 
        $firstnameError = ""; 
       } 
       //Last Name 
       $lastname_regex = '/^[a-zA-Z -]+$/'; 
       if($lastname=="" || ctype_space($lastname)) 
       { 
        $lastnameValid = false; 
        $lastnameError = "Last Name is Required"; 
       } 
       else if(!preg_match($lastname_regex, $lastname)) 
       { 
        //Last Name must contain letters, spaces, dashes, and capital letter 
        $lastnameValid = false; 
        $lastnameError = "Last Name contains Invalid Characters"; 
       } 
       else 
       { 
        $lastnameValid = true; 
        $lastnameError = ""; 
       } 
       //Email 
       $email_regex = '/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/'; 
       if($email=="" || ctype_space($email)) 
       { 
        $emailValid = false; 
        $emailError = "Email is Required"; 
       } 
       else if(!preg_match($email_regex, $email)) 
       { 
        $emailValid = false; 
        $emailError = "Email is not Valid"; 
       } 
       else 
       { 
        //Email is Valid, Check Database 
        $user1 = new User(); 
        $user = $user1->getUserByEmail($email); 
        if($user!=null) { 
         //Email already Exists 
         $emailValid = false; 
         $emailError = "Email is already in Use"; 
        } 
        else 
        { 
         $emailValid = true; 
         $emailError = ""; 
        } 


       } 
       if($password=="" || ctype_space($password)) 
       { 
        $passwordValid = false; 
        $passwordError = "Password is Required"; 
       } 
       else if(!preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $password)) 
       { 
        //Must be 8, contain 1 UPPER, 1 LOWER, 1 DIGIT 
        $passwordValid = false; 
        $passwordError = "Password must contain at least:<br/>1 Upper Case Letter<br/>1 Lower Case Letter<br/>1 Digit<br/>and minimum 8 Characters"; 
       } 
       else 
       { 
        //Valid 
        $passwordValid = true; 
        $passwordError = ""; 
       } 
       if($month=="" || ctype_space($month) || $month=="Month") 
       { 
        $monthValid = false; 
        $monthError = "Month is Required"; 
       } 
       else if($month !="January" && $month !="February" && $month !="March" && $month !="April" && $month !="May" && $month !="June" && $month !="July" && $month !="August" && $month !="September" && $month !="October" && $month !="November" && $month !="December") 
       { 
        //Invalid Month 
        $monthValid = false; 
        $monthError = "Month is not Valid"; 
       } 
       else 
       { 
        $monthValid = true; 
        $monthError = ""; 
       } 
       if($day=="" || ctype_space($day) || $day=="Day") 
       { 
        $dayValid = false; 
        $dayError = "Day is Required"; 
       } 
       else if($day<1 || $day>31) 
       { 
        $dayValid = false; 
        $dayError = "Day is not Valid"; 
       } 
       else 
       { 
        $dayValid = true; 
        $dayError = ""; 
       } 
       if($year=="" || ctype_space($year) || $year=="Year") 
       { 
        $yearValid = false; 
        $yearError = "Year is Required"; 
       } 
       else if($year<1905 || $year>2013) 
       { 
        $yearValid = false; 
        $yearError = "Year is not Valid"; 
       } 
       else 
       { 
        $yearValid = true; 
        $yearError = ""; 
       } 
       if($gender=="" || ctype_space($gender) || $gender=="Are you Male or Female?") 
       { 
        $genderValid = false; 
        $genderError = "Gender is Required"; 
       } 
       else if($gender != "Male" && $gender !="Female") 
       { 
        $genderValid = false; 
        $genderError = "Gender is not Valid"; 
       } 
       else 
       { 
        $genderValid = true; 
        $monthError = ""; 
       } 
       //Check Date (leap year) 
       if($monthValid==true && $dayValid==true && $yearValid==true) 
       { 
        //All inputs are Valid 
        //Check 31 
        if($month == "April" && $day>30) 
        { 
         $dateValid = false; 
        } 
        else if($month == "June" && $day>30) 
        { 
         $dateValid = false; 
        } 
        else if($month == "September" && $day>30) 
        { 
         $dateValid = false; 
        } 
        else if($month == "November" && $day>30) 
        { 
         $dateValid = false; 
        } 
        else if($month == "February") 
        { 
         if($day>29) 
         { 
          $dateValid=false; 
         } 
         else 
         { 
          //Check if Year is Leap year 
          $leap = false; 
          if ($year % 4 == 0) 
          { 
           if ($year % 100 == 0) 
           { 
            if ($year % 400 == 0) 
            { 
             //Leap, 29 
             $leap = true; 
            } 
            else 
            { 
             //not leap, 28 
             $leap = false; 
            } 
           } 
           else 
           { 
            //Leap, 29 
            $leap = true; 
           } 
          } 
          else 
          { 
           //Not Leap, 28 
           $leap = false; 
          } 
          if($leap==false && $day==29) 
          { 
           $dateValid = false; 
          } 
          else 
          { 
           $dateValid = true; 
          } 
         } 
        } 
        else 
        { 
         $dateValid = true; 
        } 
       } 
       if($firstnameValid==true && $lastnameValid==true && $emailValid==true && $passwordValid==true && $dateValid==true && $genderValid==true) 
       { 
        //Everything is Valid -> Register 
        //Fix Dates 
        if($month=="January") 
         $month=1; 
        else if($month=="February") 
         $month=2; 
        else if($month=="March") 
         $month=3; 
        else if($month=="April") 
         $month=4; 
        else if($month=="May") 
         $month=5; 
        else if($month=="June") 
         $month=6; 
        else if($month=="July") 
         $month=7; 
        else if($month=="August") 
         $month=8; 
        else if($month=="September") 
         $month=9; 
        else if($month=="October") 
         $month=10; 
        else if($month=="November") 
         $month=11; 
        else if($month=="December") 
         $month==12; 
        $birthdate = $year."-".$month."-".$day; 
        //Generate Unique ID 
        $exists = true; 
        while($exists) 
        { 
         $userID = Functions::generateID(32); 
         $user1 = new User(); 
         $user = $user1->getUserByEmail($email); 
         if($user!=null) { 
          //ID is taken, Generate a new one 
          $exists = false; 
         } 
        } 
        //INSERT 
        $con=mysqli_connect("localhost","root","","mydatabase"); 
        if ($con->connect_error) { 
         die('Connect Error: ' . $con->connect_error); 
        } 
        $stmt = $con->stmt_init(); 
        if($stmt->prepare("INSERT INTO users (user_id,first_name,last_name,email,password,birth_date,gender,join_date) VALUES (?,?,?,?,?,?,?,NOW())")) 
        { 
         //Capital First Letter 
         $firstname = ucfirst($firstname); 
         $lastname = ucfirst($lastname); 
         $stmt->bind_param('sssssss', $userID,$firstname,$lastname,$email,$password,$birthdate,$gender); 
         $stmt->execute(); 
         $stmt->close(); 
         //header("Location: http://localhost/activate.php"); 
         //GENERATE activation code 
         $activationCode = Functions::generateID(8); 
         //ACTIVATION CODE ready 
         $stmt1 = $con->stmt_init(); 
         if($stmt1->prepare("INSERT INTO activation (user_id,activation_code) VALUES (?,?)")) 
         { 
          $stmt1->bind_param('ss', $userID,$activationCode); 
          $stmt1->execute(); 
          $stmt1->close(); 
          $con->close(); 
          //Activation Code has been stored in Database 
          //Send Email + Redirect 
          header("Location: http://localhost/activate.php?email=".$email); 

         } 
        } 
       } 
      } 
+0

我希望你醃製/散列密碼。 – 2013-03-18 11:45:58

+0

你也可以提供有問題的代碼部分(即那些'if(isset($ _ POST ['submit'])''代碼)?另外,你的'getUserByID'看起來像一個靜態函數。 – Passerby 2013-03-18 11:57:13

+0

如果準備失敗會怎樣?沒有回報價值! – Waygood 2013-03-18 11:58:16

回答

0

while ($exists)循環代碼似乎是錯誤的。你應該設置$exists = false如果$user == null,你做的相反。另外,爲什麼你生成一個ID,然後再次查找具有給定電子郵件地址的用戶?你不應該找一個具有相同ID的用戶嗎?

+0

AAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHH它是在這個水壩環路中的犧牲!我是GONNA BLOW MYSELF!因爲這個,我頭上有10根新的白毛!謝謝! (不能給你賞金,直到23小時過去) – 2013-03-23 23:20:01

+0

很高興幫助:) – Uby 2013-03-23 23:39:43