<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

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

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

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

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

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

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

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

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

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

не могу найти ошибку (с нуля до гуру PHP и MySQL)
01.09.2015 17:08:50 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #1
Maksim14

Maksim14

Новичок

Новичок

Дата регистрации:
01.09.2015 16:53:11

Сообщений: 9

Доброго времени суток!
почитал форумы и статьи... все указывают, что либо с подключением к БД что-то не так... либо селект не правильный
Вообщем, регистрация не работает (урок 12). Кмк, проблема с сравнением логинов в БД либо что-то с паролем не так несколько дней не могу словить ошибку  прошу помощи:
Fatal error: Call to a member function isExistsDB() on a non-object in C:\******\global_class.php on line 87

global_class.php
<?php
require_once "config_class.php";
require_once "checkvalid_class.php";
require_once "database_class.php";
abstract class GlobalClass{

private $db;
private $table_name;
protected $config;
protected $valid;

protected function __construct($table_name, $db){
$this->db = $db;
$this->table_name = $table_name;
$this->config = new Config();
$this->valid = new CheckValid();
}

//функция добавления новых записей
protected function add($new_values){
return $this->db->insert($this->table_name, $new_values);
}

// правка по id-записи
protected function edit($id, $upd_fields){
return $this->db->updateOnID($this->table_name, $id, $upd_fields);
}

//удаление записей по ID
public function delete($id){
return $this->db->deleteOnID($this->table_name, $id);
}

//удалить ВСЕ
public function deleteAll(){
return $this->db->deleteAll($this->table_name);
}

//как узнать одно поле, если известно другое
protected function getField($field_out, $field_in, $value_in){
return $this->db->getField($this->table_name, $field_out, $field_in, $value_in);
}

//находим поле по $id
protected function getFieldOnID($id, $field){
return $this->db->getFieldOnID($this->table_name,$id, $field);
}

//изменение поля по ID
protected function setFieldOnID($id, $field, $value){
return $this->db->setFieldOnID($this->table_name, $id, $field, $value);
}

//получить всю запись целиком по ID
public function get($id){
return $this->db->getElementOnID($this->table_name, $id);
}

//получить все записи из таблицы
public function getAll($order = "", $up = TRUE){
return $this->db->getAll($this->table_name, $order, $up);
}

//получить все записи по определенному полю
protected function getAllOnField($field, $value, $order = "", $up = TRUE){
return $this->db->getAllOnField($this->table_name, $field, $value, $order, $up);
}

//получить любые записи определеенного числа
public function getRandomElement($count){
return $this->db->getRandomElements($this->table_name, $count);
}

//получить последнюю ID
public function getLastID(){
return $this->db->getLastID($this->table_name);
}

//количество элементов в данной таблице
public function getCount(){
return $this->db->getCount($this->table_name);
}

//по некоторому полю проверить существует ли такое поле
protected function isExists($field, $value){
return $this->db->isExistsDB($this->table_name, $field, $value);
}
}
?>
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();
//connect to DB
$this->mysqli = new mysqli($this->config->host, $this->config->user, $this->config->password, $this->config->db);
if ($this->mysqli->connect_errno) exit("Ошибка соединения с базой данных";
$this->mysqli->query("SET NAMES 'utf8'";
}

//запросы-ответы
private function query($query){
if(mysql_connect()){
echo mysql_connect();
}
return $this->mysqli->query($query);
}

//выборка. $fields - список полей
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); //запрос через метод query

if(!$result_set) return FALSE;
//if($result_set) echo "ВСЕ ОКЕ!";
//else printf("Errormessage: %s\n, $mysqli->error";


//преобразовать в 2-хмерный массив
$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 .= "'".addcslashes($value, ""."',";
$query = substr($query, 0, -1); //удаляем последнюю ,
$query .= "";
return $this->query($query);
}

//для обновления записей. $upd_fields - поля, которые обновляем
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` = '".addcslashes($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_name){
$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`='".addcslashes($value_in, ""."'";
if(count($data) != 1) return FALSE; //если запись не найдена
return $data[0][$field_out];
}
//находим поле по $id. $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 getLastID($table_name){
$data = $this->select($table_name, array("MAX(`id`)");
return $data[0]["MAX(`id`)"];
}

//удалить запись по 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, $value, $field_in, $value_in){
return $this->update($table_name, array($field => $value), "`$field_in` = '".addcslashes($value_in, ""."'";
}

//изменение поля по ID
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);
}

//возвращает всю запись целеком по одному 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 getAllOnField($table_name, $field, $value, $order, $up){
return $this->select($table_name, array("*", "`$field` = '".addcslashes($value, ""."'", $order, $up);
}


//проверка на существования определенного значения в некоторой таблице
public function isExistsDB($table_name, $field, $value){
$data = $this->select($table_name, array("id", "`$field` = '".addcslashes($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` = '".addcslashes($id, ""."'";
if (count($data) === 0) return FALSE;
return TRUE;
}

public function __destruct(){
if ($this->mysqli) $this->mysqli->close();
}
}
?>
Профиль Ответить
02.09.2015 17:32:06 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #2
Maksim14

Maksim14

Новичок

Новичок

Дата регистрации:
01.09.2015 16:53:11

Сообщений: 9

никто ничего не видит?
Профиль Ответить
03.09.2015 11:59:50 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #3
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 168

У вас же написано. что данный метот вызывается, но его класс не является обьектом
Профиль Ответить
03.09.2015 17:28:46 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #4
Maksim14

Maksim14

Новичок

Новичок

Дата регистрации:
01.09.2015 16:53:11

Сообщений: 9

Да, это понятно. Это из-за того что запрос в базу не правильно составлен? Если это так, то где ошибка? или дело в чем-то другом?
Профиль Ответить
03.09.2015 21:12:15 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #5
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 168

Загрузите код на pasterbin или аналогичный сервис, а то тут не видно ничего
Профиль Ответить
04.09.2015 11:34:23 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #6
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 168

Я не могу зайти по ссылке, она доступна только Белорусам
Профиль Ответить
04.09.2015 12:48:57 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #7
Maksim14

Maksim14

Новичок

Новичок

Дата регистрации:
01.09.2015 16:53:11

Сообщений: 9

ПЕРЕЗАЛИЛ
http://файлообменник.рф/y4v5n2wlfv6v.html
Профиль Ответить
05.09.2015 19:43:39 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #8
CyberGenius777

CyberGenius777

Освоившийся

Освоившийся

Дата регистрации:
25.11.2013 14:39:15

Сообщений: 30

На 264 строке косяк на косяке. Функция isExistsDB....
$data = $this->select($table_name, array("id", "`$field` = '".addcslashes($value, ""."'";
'".addcslashes($value, ""."'";
- а именно вот тут;

$this->select($table_name, array("id", "`$field` = '".addslashes($value)."'";

 вот так должно быть, исправь, проверь, напиши, исправилось или нет
Профиль Ответить
05.09.2015 19:46:49 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #9
CyberGenius777

CyberGenius777

Освоившийся

Освоившийся

Дата регистрации:
25.11.2013 14:39:15

Сообщений: 30

Там скобка закрывается, вместо картинки, не знаю, почему показывает, что это картинка, хотя, может это у меня только так
Профиль Ответить
07.09.2015 11:20:11 не могу найти ошибку (с нуля до гуру PHP и MySQL) Сообщение #10
Maksim14

Maksim14

Новичок

Новичок

Дата регистрации:
01.09.2015 16:53:11

Сообщений: 9

там все в порядке. проверь файлы на файлообменнике.
Профиль Ответить