Привык к процедурному стилю, сейчас со скрежетом перехожу на ООП, помогите. Правильно ли я написал код так все работает, но мне кажется нужно как то по другому, суть такая, регистрация пользователя с проверкой и хешированием пароля.
Сначала хеширование пробовал в конструктор занести, но потом передумал, сделал все в один метод. В общем помогите кто чем может, только если критика то можно конкретно, а не "твой говнокод я смотреть не стану" вот сам класс
class Registration extends SqlQuery
{
public function newArray($arr)
{
$end = end($arr); // извлекаю сам пароль
$options = [
'cost' => 11,
];
$hash = password_hash($end, PASSWORD_BCRYPT, $options); // создаю хеш пароля
$new_array = array('email' => '', 'status' => '');
$new_array = array_intersect_key($arr, $new_array);// убираю пароли из старого массива
$hash =['password'=>$hash];
$result = array_merge ($new_array, $hash);// создаю новый массив
$email = $result["email"]; // извлекаю емаил
$sql="SELECT COUNT(id) AS id FROM ce_members WHERE `email`='".$email."'"; // проверяю нет ли такого пользователя
$checkMember = DB::run($sql);
$res = $checkMember->fetch();
if($res["id"] > 0){
$result = ['status' => 666];
return $result;
}
else {
return $result;
}
}
}
вот класс SqlQuery
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
require_once ($_SERVER['DOCUMENT_ROOT'] . '/backEnd/controller/DB.php');
class SqlQuery {
public function InsertText($array, $nameTable) {
// build query...
$sql = "INSERT INTO " . $nameTable;
// implode keys of $array...
$sql .= " (`" . implode("`, `", array_keys($array)) . "`)";
// implode values of $array...
$sql .= " VALUES ('" . implode("', '", $array) . "') ";
$stmt = DB::run($sql);
$e = DB::lastInsertId();
return $e;
}
public function UpdateText($array, $id, $nameTable, $tableImg) {// 1 - array with data $_POST. 2 - id by object. 3 Table by data text. 4 3 Table by data image
$search = "SELECT `name` FROM ".$tableImg." WHERE `idParent`='".$id."'";
$searchX = DB::run($search);
foreach ($searchX as $file) {
unlink($file["name"]);
}
$delSql = "DELETE FROM ".$tableImg." WHERE `idParent`='".$id."'";
$delRes = DB::run($delSql);
// build query...
$arrVal = $array;
$arrKey = array_keys($array);
$all = [];
foreach ($arrKey as $key => $val) {
$all[] = "`" . $arrKey[$key] . "` = '" . $arrVal[$val] . "'";
}
$allStrong = implode(",", $all);
$sql = "UPDATE " . $nameTable . " SET";
$sql .= $allStrong;
$sql .= " WHERE `id`='" . $id . "'";
$stmt = DB::run($sql);
}
public function ImageInsert($id, $theName, $tableImg){
$today = date("Y/m");
$path = '/backEnd/view/cms/image/' . $today;
if (!file_exists($_SERVER['DOCUMENT_ROOT']."/".$path)) { // проверяем если такого пути нет, то создаём новый
mkdir($_SERVER['DOCUMENT_ROOT']."/".$path, 0755, true); // новый калог с правами
}
$help = $_SERVER['DOCUMENT_ROOT'];
foreach ($_FILES[$theName]["error"] as $key_objectNewBuilds => $error_objectNewBuilds) {
if ($error_objectNewBuilds == UPLOAD_ERR_OK) {
$tmp_name_objectNewBuilds = $_FILES[$theName]["tmp_name"][$key_objectNewBuilds];
// basename() может спасти от атак на файловую систему;
// может понадобиться дополнительная проверка/очистка имени файла
$original_name_objectNewBuilds = basename($_FILES[$theName]["name"][$key_objectNewBuilds]);
//Получить расширение файла
$extension_objectNewBuilds = pathinfo($original_name_objectNewBuilds, PATHINFO_EXTENSION);
//Придумать новое имя файла с расширением загружаемого файла
$new_name_objectNewBuilds = uniqid() . '.' . $extension_objectNewBuilds;
move_uploaded_file($tmp_name_objectNewBuilds, "$help/$path/$new_name_objectNewBuilds");
$name = $path . '/' . $new_name_objectNewBuilds;
$prewSqlImg = "INSERT INTO ".$tableImg." (`idParent`, `name`) VALUES ('".$id."', '".$name."')";
$stmt3 = DB::run($prewSqlImg);
}
}
}
}
поля это данные POST запроса ключ=>значение
ключ всегда совпадает с столбцом в бд, а значение просто влетает в соответствующий столбец, по такому принципу строится этот класс.
DB это отсюда взял http://phpfaq.ru/pdo/pdo_wrapper там подключение к бд и запрос помогает сокращать
Позволю себе заметить, что использование ООП или любого другого стиля программирования без четкого понимания выгоды приводят к такого рода сомнениям. Именно практическая выгода решений должна быть мерилом правильности, а не соответствие чьим-либо рекомендациям. Людям свойственно ошибаться. Правильный код или нет, это каждый решает для себя самостоятельно исходя из поставленных задач и накопленного опыта.
На вашем месте я бы поработал с образом объектно ориентированного искусства - Yii2 фремворком (или Laravel, или Symphony).
Так вам легче будет "пощупать" преимущества и вы поймете их на уровне опыта, а не на уровне соблюдения магических ритуалов. И в итоге сможете самостоятельно отличать "хороший" код от "плохого".
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть необходимость реализовать конвертор из HTML в PDF продукцииВсе настроено все реализовано, но есть проблема, 25 страниц конвертируется за 75 секунд,...