<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру 2.0

PHP и MySQL с Нуля до Гуру 2.0

Данный курс научит Вас программировать на самом популярном Web-языке в мире - PHP. Курс состоит из 11 разделов, в которых с нуля рассказывается и показывается процесс написания различных скриптов на PHP.

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

Почти к каждому уроку идут упражнения.

Просмотрев данный курс, Вы сможете создавать абсолютно любые PHP-сайты любой сложности.

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

Подписавшись по 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

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