在发布表单后调用函数不起作用

时间:2013-03-18 11:44:54

标签: php html forms function

我有一个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');

一切都很完美,但如果它写在它之后,我填写表格并发布,它就不会执行,我会收到:

  

致命错误:超过30秒的最长执行时间   第113行的C:\ xampp \ htdocs \ Classes \ User.php

更新

表单,对不起长代码,但它正在验证...

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);

                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

您的while ($exists)循环代码似乎有误。如果$exists = false,您应该设置$user == null,而您正在做相反的事情。另外,为什么要生成ID,然后再次查看具有给定电子邮件地址的用户?你不应该找一个具有相同ID的用户吗?