Как вернуть ошибки из метода конструктора в PHP - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь научиться веб-разработке на PHP, используя метод ООП, и у меня есть вопрос о том, как вернуть массив ошибок из метода конструктора PHP. У меня есть форма, в которую пользователь вводит информацию, но когда я проверяю данные, которые они вводят, если у них есть ошибка, я хочу иметь возможность вернуть их на страницу, которая их запросила, чтобы я мог отобразить ее в списке над формой. Как бы я поступил так? Мой код ниже и это просто тестовый код, с которым я играю, чтобы выучить PHP для веб-сайта, который мне нужно создать в ближайшем будущем. Спасибо!

Файл PHP / HTML с формой в нем: (Не волнуйтесь, я буду работать над безопасностью публикации данных формы позже)

<?php if(!isset($_POST['submit'])) { ?>
 **## WANT TO INSERT ERROR LIST HERE IF ANY ERRORS FROM CONSTRUCTOR METHOD ##**
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="form1">
  Please Enter a First Name: <input type="text" name="fname" /><br />
  Please Enter a Last Name: <input type="text" name="lname" /><br />
  Please Enter a Username: <input type="text" name="username" /><br />
  Please Enter a Email: <input type="text" name="email" /><br />
  Please Enter a Password: <input type="password" name="password" /><br />
  <input type="submit" value="Submit" name="submit" /><br />
</form>
<?php
}
if (isset($_POST['submit']))
{
    include_once("classes/User.class.php");
    $u = new User($_POST['fname'],$_POST['lname'],$_POST['username'],$_POST['password'],$_POST['email'],"male");
    echo "First Name: " . $u->get_first_name() . "<br />";
    echo "Last Name: " . $u->get_last_name() . "<br />";
    echo "Username: " . $u->get_username() . "<br />";
    echo "Email: " . $u->get_email() . "<br />";

}
?>

Вот мое определение класса для создания новых пользователей, где я вызываю метод конструктора, на который ссылался:

<?php
class User
{
    private $firstName = "";
    private $lastName = "";
    private $username = "";
    private $password = "";
    private $email = "";
    private $gender;
    private $birthday;
    private $dateJoined;
    private $lastVisit;
    private $errors = array();

    function __construct($fname,$lname,$username,$password,$email,$gender)
    {
        if($this->check_name($fname,$lname))
        {
            $this->firstName = $fname;
            $this->lastName = $lname;
        }
        else 
        {
            array_push($this->errors,"Please correct your first and last name");    
        }

        if($this->check_username($username))
        {
            $this->username = $username;
        }
        else 
        {
            array_push($this->errors,"Please choose a username.");
        }

         if ($this->check_password($password))
        {
            $this->password = sha1($password);
        }
        else 
        {
            array_push($this->errors,"Passwords must be 7 or more characters");
        }

        $this->email = $email;
        if($gender)
        {
            $this->gender = $gender;
        }

        if(!empty($this->errors))
        {
            foreach ($this->errors as $error) {
                echo $error . "<br />";
            }
            unset($error);
            exit();
        }
    }


    //Getter Methods
    public function get_first_name()
    {
        return $this->firstName;
    }

    public function get_last_name()
    {
        return $this->lastName;
    }

    public function get_full_name()
    {
        return $this->firstName . " " . $this->lastName;
    }

    public function get_email()
    {
        return $this->email;
    }

    public function get_username()
    {
        return $this->username;
    }

    public function get_birthday()
    {
        if ($this->birthday)
            return $this->birthday;
    }

    public function get_gender()
    {
        if ($this->gender)
            return $this->gender;
    }

    public function get_last_visit()
    {
        return $this->lastVisit;
    }



    //Setter Methods
    public function set_first_name($fname)
    {
        $this->firstName = $fname;
    }

    public function set_last_name($lname)
    {
        $this->lastName = $lname;
    }

    public function set_full_name($fname,$lname)
    {
        $this->firstName = $fname;
        $this->lastName = $lname;
    }

    public function set_email($email)
    {
        $this->email = $email;
    }

    public function set_password($password)
    {
        $this->password = sha1($password);
    }

    public function set_username($username)
    {
        $this->username = $username;
    }



    //Private methods
    private function check_name($fname,$lname)
    {
        if($fname == "" || $lname == "")
            return false;
        return true;
    }

    private function check_username($username)
    {
        if($username == "")
            return false;
        return true;
    }

    private function check_password($password)
    {
        if(!isset($_POST['password']))
            return false;
        else if (strlen($password) < 7)
            return false;

        return true;
    }
}
?>

1 Ответ

1 голос
/ 29 ноября 2011

В идеале вы должны использовать отдельный класс для проверки данных формы.См. этот пост

Вы также можете добавить метод valid () для класса Пользователь :

function valid(){
  return count($this->errors);
}

Затем вызвать функцию какнеобходимо проверить данные.

$user = new User(...);
if($user->valid()){
    echo 'the information is valid.';
}else{
    echo 'the information is invalid.';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...