ykpon
Постоялец
- Регистрация
- 8 Дек 2012
- Сообщения
- 250
- Реакции
- 150
- Автор темы
- #1
На сайте есть формы, откуда запросы Ajax'ом уходят, скажем, на ajax.php.
Пусть это будет, например, регистрация.
В ajax.php:
А вот, собственно, Auth.class.php с функцией create(
В ajax.php вызываются функции класса из Auth.class.php. Но не буду же я для каждого запроса в базу данных плодить функции в Auth.class.php. Вот и решил в ajax.php юзать просто:
Правильно ли так делать? Эстетично? Не будет способствовать низкой производительности?
Хотелось бы в auth.class.php оставить функции, касающиеся только, разве что, авторизации, регистрации и подобные. Все остальное либо вывести в другой файл с функциями или вовсе выполнять по факту, где это требуется.
Каюсь, использовал чужие наработки с классами и функциями, лишь перепилил под себя, ввиду своей ленивости.
Пусть это будет, например, регистрация.
В ajax.php:
PHP:
<?php
require_once 'Auth.class.php';
require_once 'AjaxRequest.class.php';
class AuthorizationAjaxRequest extends AjaxRequest
{
public $actions = array(
"register" => "register"
);
public function register()
{
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
// Method Not Allowed
http_response_code(405);
header("Allow: POST");
$this->setFieldError("main", "Method Not Allowed");
return;
}
// разного рода проверки
$user = new Auth\User();
try {
// здесь создаем юзверя
$new_user_id = $user->create($username, $password1, $email1);
} catch (\Exception $e) {
$this->setFieldError("username", $e->getMessage());
return;
}
}
А вот, собственно, Auth.class.php с функцией create(
PHP:
<?php
namespace Auth;
class User
{
private $id;
private $username;
public $db;
private $user_id;
private $email;
private $db_host = "localhost";
private $db_name = "db";
private $db_user = "dbuser";
private $db_pass = "password";
public $is_authorized = false;
public function __construct($username = null, $password = null)
{
$this->username = $username;
$this->connectDb($this->db_name, $this->db_user, $this->db_pass, $this->db_host);
}
public function __destruct()
{
$this->db = null;
}
public function create($username, $password, $
$query = "insert into users (username, password, email)
values (:username, :password, :email)";
$password = md5($password);
$sth = $this->db->prepare($query);
try {
$this->db->beginTransaction();
$result = $sth->execute(
array(
':username' => $username,
':password' => $password,
':email' => $email,
)
);
$this->db->commit();
} catch (\PDOException $e) {
$this->db->rollback();
echo "Database error: " . $e->getMessage();
die();
}
if (!$result) {
$info = $sth->errorInfo();
printf("Database error %d %s", $info[1], $info[2]);
die();
}
return $result;
}
public function connectdb($db_name, $db_user, $db_pass, $db_host = "localhost")
{
try {
$this->db = new \pdo("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
} catch (\pdoexception $e) {
echo "database error: " . $e->getmessage();
die();
}
$this->db->query('set names utf8');
return $this;
}
В ajax.php вызываются функции класса из Auth.class.php. Но не буду же я для каждого запроса в базу данных плодить функции в Auth.class.php. Вот и решил в ajax.php юзать просто:
PHP:
$dbh = new Auth\User();
$query = "select * from users";
$sql = $dbh->db->prepare($query);
$sql->execute();
$result = $sql->fetchAll();
Правильно ли так делать? Эстетично? Не будет способствовать низкой производительности?
Хотелось бы в auth.class.php оставить функции, касающиеся только, разве что, авторизации, регистрации и подобные. Все остальное либо вывести в другой файл с функциями или вовсе выполнять по факту, где это требуется.
Каюсь, использовал чужие наработки с классами и функциями, лишь перепилил под себя, ввиду своей ленивости.