<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Помогите с регистрацией
14.07.2014 16:54:47 Помогите с регистрацией Сообщение #1
Skew4eg

Skew4eg

Новичок

Новичок

Дата регистрации:
11.05.2014 19:28:52

Сообщений: 10

Здравствуйте, может кто-нибудь проходил курс "PHP и MySQL с Нуля до Гуру". У меня возникла проблема с регистрацией.  Когда  я нажимаю на кнопку, ничего не меняется(просто обновляется страница и стирается всё, что было в полях). Может быть где-то ошибка? Кстати заметил то, что когда я меняю кодировку файла functions,php, то первая ошибка session_start(), а вторая ошибка Cannot modify header information - headers already sent by в файле manage_class.php. Помогите пожалуйста, очень хочу доделать регистрацию.
Профиль Ответить
15.07.2014 21:18:26 Помогите с регистрацией Сообщение #2
Skew4eg

Skew4eg

Новичок

Новичок

Дата регистрации:
11.05.2014 19:28:52

Сообщений: 10

Всё проверил, было две ошибки. Всё равно не хочет. Пишет: Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test.local\www\lib\manage_class.php:1) in
Z:\home\test.local\www\lib\manage_class.php on line 26. Там в этих строках такой код public function redirect($link) {
        header("Location: $link";
        exit;
    }
Профиль Ответить
16.07.2014 18:54:19 Помогите с регистрацией Сообщение #3
dima9595

dima9595

Продвинутый

Продвинутый

Дата регистрации:
02.12.2012 18:14:26

Сообщений: 57

значит уже заголовки были отправлены сервером.
Профиль Ответить
16.07.2014 20:16:21 Помогите с регистрацией Сообщение #4
Skew4eg

Skew4eg

Новичок

Новичок

Дата регистрации:
11.05.2014 19:28:52

Сообщений: 10

Это я понял, но почему пользователь не добавляется в базу?
Профиль Ответить
16.07.2014 20:38:24 Помогите с регистрацией Сообщение #5
dima9595

dima9595

Продвинутый

Продвинутый

Дата регистрации:
02.12.2012 18:14:26

Сообщений: 57

Я конечно исходники не видел, но могу сказать только одно - скорей всего это из-за ошибки с заголовками.
Профиль Ответить
17.07.2014 00:00:02 Помогите с регистрацией Сообщение #6
Skew4eg

Skew4eg

Новичок

Новичок

Дата регистрации:
11.05.2014 19:28:52

Сообщений: 10

Могу скинуть исходник, но там так много кода, даже не знаю что и кидать(
Профиль Ответить
17.07.2014 11:32:04 Помогите с регистрацией Сообщение #7
Skew4eg

Skew4eg

Новичок

Новичок

Дата регистрации:
11.05.2014 19:28:52

Сообщений: 10

CHECKVALID_CLASS.PHP
<?php
require_once "config_class.php";

class CheckValid {
    
    private $config;
    
    public function __construct() {
        $this->config = new Config();
    }
    
    public function validID($id) {
        if (!$this->isIntNumber($id)) return false;
        if ($id <= 0) return false;
        return true;
    }
    
    public function validLogin($login) {
        if ($this->isContainQuotes($login)) return false;
        if (preg_match("/^\d*$", $login)) return false;
        return $this->validString($login, $this->config->min_login, $this->config->max_login);
    }
    
    public function validHash($hash) {
        if (!$this->validString($hash, 32, 32)) return false;
        if (!$this->isOnlyLettersAndDigits($hash)) return false;
        return true;
    }
    
    public function validTimeStamp($time) {
        return $this->isNoNegativeInteger($time);
    }
    
    private function isIntNumber($number) {
        if (!is_int($number) && !is_string($number)) return false;
        if (!preg_match("/^-?(([1-9][0-9]*|0))$/", $number)) return false;
        return true;
    }
    
    private function isNoNegativeInteger($number) {
        if (!$this->isIntNumber($number)) return false;
        if ($number < 0) return false;
        return true;
    }
    
    private function isOnlyLettersAndDigits($string) {
        if (!is_int($string) && (!is_string($string))) return false;
        if (!preg_match("/[a-zа-я0-9]*/i", $string)) return false;
        return true;
    }
    
    private function validString($string, $min_length, $max_length) {
        if (!is_string($string)) return false;
        if (strlen($string) < $min_length) return false;
        if (strlen($string) > $max_length) return false;
        return true;
    }
    
    private function isContainQuotes($string) {
        $array = array("\"", "'", "`", """, "'";
        foreach ($array as $key => $value) {
            if (strpos($string, $value) !== false) return true;
        }
        return false;
    }
}
?>
DATABASE_CLASS.PHP
<?php
require_once "config_class.php";
require_once "checkvalid_class.php";

class DataBase {

    private $config;
    private $mysqli;
    private $valid;
    
    public function __construct() {
        $this->config = new Config();
        $this->valid = new CheckValid();
        $this->mysqli = new mysqli($this->config->host, $this->config->user, $this->config->password, $this->config->db);
        $this->mysqli->query("SET NAMES 'utf8'";
    }
    
    private function query($query) {
        return $this->mysqli->query($query);
    }
    
    private function select($table_name, $fields, $where = "", $order = "", $up = true, $limit = "" {
        for ($i = 0; $i < count($fields); $i++) {
            if ((strpos($fields[$i], "(" === false) && ($fields[$i] != "*") $fields[$i] = "`".$fields[$i]."`";
        }
        $fields = implode(",", $fields);
        $table_name = $this->config->db_prefix.$table_name;
        if (!$order) $order = "ORDER BY `id`";
        else {
            if ($order != "RAND()" {
                $order = "ORDER BY `$order`";
                if (!$up) $order .= " DESC";
            }
            else $order = "ORDER BY $order";
        }
        if ($limit) $limit = "LIMIT $limit";
        if ($where) $query = "SELECT $fields FROM $table_name WHERE $where $order $limit";
        else $query = "SELECT $fields FROM $table_name $order $limit";
        $result_set = $this->query($query);
        if (!$result_set) return false;
        $i = 0;
        while ($row = $result_set->fetch_assoc()) {
            $data[$i] = $row;
            $i++;
        }
        $result_set->close();
        return $data;
    }
    
    public function insert($table_name, $new_values) {
        $table_name = $this->config->db_prefix.$table_name;
        $query = "INSERT INTO $table_name (";
        foreach ($new_values as $field => $value) $query .= "`".$field."`,";
        $query = substr($query, 0, -1);
        $query .= " VALUES (";
        foreach ($new_values as $value) $query .= "'".addslashes($value)."',";
        $query = substr($query, 0, -1);
        $query .= "";
        return $this->query($query);
    }
    
    private function update($table_name, $upd_fields, $where) {
        $table_name = $this->config->db_prefix.$table_name;
        $query = "UPDATE $table_name SET ";
        foreach ($upd_fields as $field => $value) $query .= "`$field` = '".addslashes($value)."',";
        $query = substr($query, 0, -1);
        if ($where) {
            $query .= " WHERE $where";
            return $this->query($query);
        }
        else return false;
    }
    
    public function delete($table_name, $where = "" {
        $table_name = $this->config->db_prefix.$table_name;
        if ($where) {
            $query = "DELETE FROM $table_name WHERE $where";
            return $this->query($query);
        }
        else return false;
    }
    
    public function deleteAll($table_nae) {
        $table_name = $this->config->db_prefix.$table_name;
        $query = "TRUNCATE TABLE `$table_name`";
        return $this->query($query);
    }
    
    public function getField($table_name, $field_out, $field_in, $value_in) {
        $data - $this->select($table_name, array($field_out), "`$field_in`='".addslashes($value_in)."'";
        if (count($data) != 1) return false;
        return $data[0][$field_out];
    }
    
    public function getFieldOnID($table_name, $id, $field_out) {
        if (!$this->existsID($table_name, $id)) return false;
        return $this->getField($table_name, $field_out, "id", $id);
    }
    
    public function getAll($table_name, $order, $up) {
        return $this->select($table_name, array("*", "", $order, $up);
    }
    
    public function getAllOnField($table_name, $field, $value, $order, $up) {
        return $this->select($table_name, array("*", "`$field`='".addslashes($value)."'", $order, $up);
    }
    
    public function getLastID($table_name) {
        $data = $this->select($table_name, array("MAX(`id`)");
        return $data[0]["MAX(`id`)"];
    }
    
    public function deleteOnID($table_name, $id) {
        if (!$this->existsID($table_name, $id)) return false;
        return $this->delete($table_name, "`id` = '$id'";
    }
    
    public function setField($table_name, $field, $field, $value, $field_in, $value_in) {
        return $this->update($table_name, array($field => $value), "`$field_in` = '".addslashes($value_in)."'";
    }
    
    public function setFieldOnID($table_name, $id, $field, $value) {
        if (!$this->existsID($table_name, $id)) return false;
        return $this->setField($table_name, $field, $value, "id", $id);
    }
    
    public function getElementOnID($table_name, $id) {
        if (!$this->existsID($table_name, $id)) return false;
        $arr = $this->select($table_name, array("*", "`id` = '$id'";
        return $arr[0];
    }
    
    public function getRandomElements($table_name, $count) {
        return $this->select($table_name, array("*", "", "RAND()", true, $count);
    }
    
    public function getCount($table_name) {
        $data = $this->select($table_name, array("COUNT(`id`)");
        return $data[0]["COUNT(`id`)"];
    }
    
    public function isExists($table_name, $field, $value) {
        $data = $this->select($table_name, array("id", "`$field` = '".addslashes($value)."'";
        if (count($data) === 0) return false;
        return true;
    }
    
    private function existsID($table_name, $id) {
        if (!$this->valid->validID($id)) return false;
        $data = $this->select($table_name, array("id", "`id` = '".addslashes($id)."'";
        if (count($data) === 0) return false;
        return true;
    }
    
    public function __desctruct() {
        if ($this->mysqli) $this->mysqli->close();
    }
}
?>
MANAGE_CLASS.PHP
<?php
require_once "config_class.php";
require_once "user_class.php";
class Manage {

    private $config;
    private $user;
    private $data;
    
    public function __construct($db) {
        //session_start();
        $this->config = new Config();
        $this->user = new User($db);
        $this->data = $this->secureData(array_merge($_POST, $_GET));
    }
    
    private function secureData($data) {
        foreach($data as $key => $value) {
            if (is_array($value)) $this->secureData($value);
            else $data[$key] = htmlspecialchars($value);
        }
        return $data;
    }
    
    public function redirect($link) {
        header("Location: $link";
        exit;
    }
    
    public function regUser() {
        $link_reg = $this->config->address."?view=reg";
        $captcha = $this->data["captcha"];
        if (($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "") {
            return $this->returnMessage("ERROR_CAPTCHA", $link_reg);
        }
        $login = $this->data["login"];
        if ($this->user->isExistsUser($login)) return $this->returnMessage("EXISTS_LOGIN", $link_reg);
        $password = $this->data["password"];
        if ($password == "" return $this->unknownError($link_reg);
        $password = $this->hashPassword($password);
        $result = $this->user->addUser($login, $password, time());
        if ($result) return $this->returnPageMessage("SUCCESS_REG", $this->config->address."?view=message";
        else return $this->unknownError($link_reg);
    }
    
    private function hashPassword($password) {
        return md5($password.$this->config->secret);
    }
    
    private function unknownError($r) {
        return $this->returnMessage("UNKNOWN_ERROR", $r);
    }
    
    private function returnMessage($message, $r) {
        $_SESSION["message"] = $message;
        return $r;
    }
    
    private function returnPageMessage($message, $r) {
        $_SESSION["page_message"] = $message;
        return $r;
    }
}
?>
Профиль Ответить
20.07.2014 19:23:15 Помогите с регистрацией Сообщение #8
Perri1986

Perri1986

Новичок

Новичок

Дата регистрации:
14.07.2014 22:59:34

Сообщений: 1

Была такая же проблема!
Поменял кодировку во всех php файлов на utf-8 без BOM.
Проблема исчезла!
Профиль Ответить
26.07.2014 01:19:53 Помогите с регистрацией Сообщение #9
Skew4eg

Skew4eg

Новичок

Новичок

Дата регистрации:
11.05.2014 19:28:52

Сообщений: 10

Всем огромнейшее спасибо за помощь! Всё получилось)) Пришлось просто поменять кодировку во всех файлах и включить сессии, которые я выключил.
Профиль Ответить