Как мне записать данные в свою базу данных с помощью формы регистрации?

#php #mysql #model-view-controller

Вопрос:

Это мой конфигурационный файл в основной папке.

 <?php

define("WEBSITE_TITLE", 'MY SHOP');

//database details
define('DB_NAME', "eshop_db");
define('DB_USER', "root");
define('DB_PASS', "");
define('DB_TYPE', "mysql");
define('DB_HOST', "localhost");


define('THEME','eshop/');
define('DEBUG', true);
if(DEBUG){
    ini_set('display_errors', 1);
}else{
    ini_set('display_errors', 0);
}
?>
 

Здесь я определяю данные своей базы данных и все остальное

Здесь я установил соединение с базой данных, этот файл находится в той же папке, что и указанный выше файл.

 <?php 

Class Database{
    public static $con;
    public function __construct()
    {
        try{
 
            $string = DB_TYPE . ":host=".DB_HOST . ";dbname=" . DB_NAME;
            self::$con = new PDO($string,DB_USER,DB_PASS);

        }catch (PDOException $e){

             die($e->getMessage());
        }
    }

    public static function getInstence(){
        if(self::$con){
            return self::$con;
        }
        return $instance = new self();
        // return self::$con;
    }

        //read function 
    public function read($query,$data = array()){
        $stm = self::$con->prepare($query);
        $result = $stm->execute($data);
        if($result){
            $data = $stm->fetchAll(PDO::FETCH_OBJ);
            if(is_array($data)){

                return $data;

            }
        }
            return false;
    }


    public function write($query,$data = array()){
        $stm = self::$con->prepare($query);
        $result = $stm->execute($data);
        if($result){
            

                return $data;

            
        }
            return false;
    }
   
}
 

Там я написал функцию для записи файлов в мою базу данных. Затем я создаю класс, чтобы открыть страницу регистрации с помощью контроллера. Код приведен ниже.

 <?php 

class Signup extends Controller
{
   public function index()
    {

        $data['page_title'] = "Signup";
        if($_SERVER['REQUEST_METHOD'] == "POST")
        {
            //show($_POST);
             $user = $this->load_model("User");
            $user->signup($_POST);

        }
        $this->view("signup",$data);
    }

    
}

?>
 

Под user.class.php Я создал функцию для передачи данных через форму регистрации. В User.class.php файл находится в папке моделей.

 <?php 

Class User{
    private $error ="";

    public function signup($POST){

        $data = array();

        $data['name'] = trim($POST['name']);
        $data['email'] = trim($POST['email']);
        $data['password'] = trim($POST['password']);
        $password2 = trim($POST['password2']);

       if(empty($data['email']) || !preg_match("/^[a-zA-Z_-] @[a-zA-Z] .[a-zA-Z] $/", $data['email']))
       {
            $this->error .= "Please enter a valid email <br>";
       }
       if(empty($data['name']) || !preg_match("/^[a-zA-Z] $/", $data['name']))
       {
            $this->error .= "Please enter a Name <br>";
       }
       if($data['password'] !== $password2){
        $this->error .= "Passwords Not Match <br>";
       }
       if(strlen($data['password']) < 4 ){
        $this->error .= "Passwords must be 4 characters long <br>";
       }

       if($this->error == ""){
           $data['rank'] ="customer";
           $data['url_address'] = $this->get_random_string_max(60);
           $data['date'] = date("Y-m-d H:I:s");

           $query = "insert into users (url_address,name,email,password,date,rank) values (:url_address,:name,:email,:password,:date,:rank)";
            $db = Database::getInstence();
            $result = $db->write($query,$data);
                if($result){
                    header("Location:" . ROOT . "login");
                    die;
                }
        }
    }


    public function login($POST){

    }

    public function get_user($url){

    }

    private function get_random_string_max($length){
        $array = array(0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u',
        
        'v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
        $text ="";

        $length = rand(4,$length);
        for($i=0;$i<4;$i  ){

            $random = rand(0,61);

            $text .= $array[$random];
        }
        return $text;
    }
}


?>
 

Я не вижу никаких ошибок, но значения не передаются в базу данных. Я написал условие «если для проверки результата», если код работает нормально, страница регистрации должна быть перенаправлена на страницу входа, но она не ведет непосредственно на страницу входа, и значения не передаются в базу данных. Я думаю, что мой запрос не работает. Кто-нибудь может помочь мне с этим кодом, пожалуйста?

Комментарии:

1. Пожалуйста, опубликуйте входные данные, используемые для теста, чтобы мы могли протестировать ваши регулярные выражения.

Ответ №1:

Проблема в регулярном выражении

  preg_match("/^[a-zA-Z] $/", $data['name']))
 

Должно быть, это

 preg_match('/[A-Za-z]/', $data['name'])
 

Комментарии:

1. Пожалуйста, объясните «почему»