#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. Пожалуйста, объясните «почему»