Как реализовать класс регистрации (с концепциями OOPS) в PHP? - PullRequest
0 голосов
/ 16 февраля 2011

Я создаю страницу регистрации / регистрации в PHP, поэтому я создаю класс class.register.php
так как я впервые реализую полный путь к классам в PHP, а также использую PDO. Подскажите пожалуйста, как сделать достойный класс с оптимизированным способом. Ниже мой класс:

class.register.php

class registration 
{
    private $_confirm = 0;
    public $post_data = array();
    private $db;
    protected $db_name ='db_movies';
    protected $db_user = 'root';
    protected $db_pass ='keshav';


    function __construct($post_data)
    {
            $this->post_data = array_map('trim',$post_data);
            $this->db_connect();
            return $this->post_data;

    }

    protected function db_connect()
    {
        try {
                $this->db =  new PDO("mysql:host=localhost;dbname=$this->db_name", $this->db_user, $this->db_pass);     
                return $this->db;
            } 
        catch (PDOException $e) {
                print "Error!: " . $e->getMessage() . "<br/>";
                die();
            }
    }

    public function setPostIntoSession()
    {
        return $_SESSION['post_data']=$this->post_data;             
    }

    public function checkEmailInDB()
    {
      $stmt = $this->db->prepare("SELECT COUNT(*) FROM tbl_user WHERE email_address = :email");
      $stmt->bindParam(':email',$this->post_data['email_address'],PDO::PARAM_STR);
      $stmt->execute();
      $result = $stmt->fetchColumn();
      return $result;
    }

    public function insertIntoDB()
    {
      $qry = "INSERT INTO tbl_user SET 
                                            email_address = :email,
                                            first_name = :first_name,
                                            middle_initial = :middle_name,
                                            last_name = :last_name,
                                            title =:title,
                                            organization = : organization,
                                            primary_phone =:primary_phone,
                                            secondary_phone =:secondary_phone,
                                            website =:website,
                                            how_found =:found ";
      $stmt = $this->db->prepare($qry);
      $stmt->bindParam(':email',$this->post_data['email_address'],PDO::PARAM_STR);
      $stmt->bindParam(':first_name',$this->post_data['first_name'],PDO::PARAM_STR);
      $stmt->bindParam(':middle_name',$this->post_data['middle_initial'],PDO::PARAM_STR);
      $stmt->bindParam(':last_name',$this->post_data['last_name'],PDO::PARAM_STR);
      $stmt->bindParam(':title',$this->post_data['title'],PDO::PARAM_STR);
      $stmt->bindParam(':organization',$this->post_data['organization'],PDO::PARAM_STR);
      $stmt->bindParam(':primary_phone',$this->post_data['primary_phone'],PDO::PARAM_STR);
      $stmt->bindParam(':secondary_phone',$this->post_data['secondary_phone'],PDO::PARAM_STR);
      $stmt->bindParam(':website',$this->post_data['website'],PDO::PARAM_STR);
      $stmt->bindParam(':found',$this->post_data['how_found'],PDO::PARAM_STR);
      return $stmt->execute();
    }
}

здесь я использую вышеупомянутый класс

signup.php

<?php ob_start(); session_start();
include_once ('includes/class.register.php');
$register = new registration($_POST);
$fine = true;

$register->setPostIntoSession();
//echo "<pre>";
//print_r($register);

if(count($_POST)>0){    

        if($register->checkEmailInDB())
        {
            echo $_SESSION['error'] ='Sorry,given e-mail address already exists.';
            $fine = false;
        }
        if ($register->post_data['pswd'] !== $register->post_data['confirm_pswd'])
        { 
            echo $_SESSION['error'] ='Sorry,both password are not matching';
            $fine = false;          
        }
        else 
        {
            $register->insertIntoDB();
        }
}
if($fine == false ) 
{
    //header("location:signup.php");
    //exit();
}
else
{
    echo "All izz Well";
}

//$register->watch($register);
?>

Я думаю, что делаю это очень долго, пожалуйста, предложите мне, какую функцию я должен реализовать в классе.

1 Ответ

1 голос
/ 16 февраля 2011

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ЭТО МОЕ МНЕНИЕ.Ну, я, например, хотел бы написать код, следуя шаблону MVC, и с этим также правильное наследование классов.Почему я так говорю, потому что вы, кажется, перепутали много вещей (хотя код правильный).Для меня регистрация - это больше процесс, чем объект модели, поэтому иметь класс модели для него не идеально.

Вот как я бы оптимизировал это: во-первых, создайте общий класс БД, который обрабатывает вход / соединениеи выполнение запроса.затем при создании модели расширяйте этот класс, чтобы вы могли использовать эти методы.например, для регистрации это будет регистрация пользователя, поэтому, предположим, у вас есть пользовательская таблица, вы создаете пользовательский класс, который расширяет db.В этом пользовательском классе вы можете обрабатывать проверку ввода и вставку в БД.пример:

<?php
class ent_db
{
    private $DBUserName;
    private $DBPassword;
    private $DBHost;
    private $DBConnection = null;
    function __construct() 
    {
        $this->DBUserName = config::$dbuser;
        $this->DBPassword = config::$dbpass;
        $this->DBHost = config::$dbhost;
    }
    function executeQuery($sql)
    {
        return mysql_query($sql,$this->getConnection());

    }
     function getConnection()
    {
        if ($this->DBConnection===null)
            return mysql_connect($this->DBHost, $this->DBUserName,$this->DBPassword);
        else
            return $this->DBConnection;
    }
    function close()
    {
        if ($this->DBConnection!== null)
        {
            mysql_close($this->DBConnection);
            $this->DBConnection = null;
        }
    }
    function getAffectedRows()
{
    return mysql_affected_rows($this->getConnection());
}
function getAll($sql){

    $ret = $this->executeQuery($sql);
    if (mysql_num_rows($ret) !== 0)
    {
        while($row = mysql_fetch_assoc($ret))
        {
            $return[]=$row;
        }

        $this->close();
        return $return;

        }else
        {   
            $this->close();
            return false;
    }

        }
}
?>    

тогда у вас может быть свой класс пользователя (здесь его структура)

    <?php
class ent_structures extends ent_db
{
function getStructures($sort=null)
{
    $sql = "SELECT * FROM crm.structure WHERE disabled = 0";
    $sql.=($sort!==null)?" ORDER BY $sort":"";
    $ret = $this->executeQuery($sql);
    //or return $this->getAll();
.
.
.    
.    

это немного прояснит ситуацию и позволит вам не переписывать код для подключения кБД и т. д. на каждый раз.Затем я бы использовал контроллеры для обработки потока, например, registerController для обработки регистрации и т. Д. Использование вспомогательных классов для обработки повторяющихся задач, которые не попадают ни в одну из категорий..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...