PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (24): В начало « ... 16 17 18 19 [20] 21 22 23 24 »

> Найдено сообщений: 359
Hapson Отправлено: 24 Июля, 2013 - 23:40:47 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
Ну вот очередные мои потуги понять ООП и начать-таки писать блог именно на ООП. Уже начал писать на функциях, но все же хочу ООП.
Вот небольшой набросок, как оно примерно будет (будет ли...)
Это похоже на ООП?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // это файл типа config.php
  3. define('DB_SERVER', 'localhost');
  4. define('DB_LOGIN', 'root');
  5. define('DB_PASSWORD', 'password');
  6. define('DB_NAME', 'myuser');
  7.  
  8. //классы будут каждый в отдельном файле + будет файлик с __autoload()
  9. class DB{
  10.         private $id_connect;
  11.         private static $db = NULL;
  12.        
  13.         static function getDB(){
  14.                 if(self::$db == NULL){
  15.                         self::$db = new DB();
  16.                 }
  17.                 return self::$db;
  18.         }
  19.         private function __construct(){
  20.                 $this->id_connect = new mysqli(DB_SERVER, DB_LOGIN, DB_PASSWORD, DB_NAME);
  21.                 $this->id_connect->query("SET lc_time_names = 'ru_RU'");
  22.                 $this->id_connect->set_charset("utf8");
  23.         }
  24.         function select($sql){
  25.                 $query = $this->id_connect->query($sql);
  26.                 $result = mysqli_fetch_all($query);
  27.                 return $result;
  28.         }
  29.         function insert($sql){
  30.                 $query = $this->id_connect->query($sql);
  31.                 $result = $this->id_connect->affected_rows;
  32.                 return $result;
  33.         }
  34.         public function __destruct() {
  35.                 if ($this->id_connect) $this->id_connect->close();
  36.         }
  37. }
  38. class Users{
  39.         public $name;
  40.         public $password;
  41.        
  42.         function __construct($name, $password){
  43.                 $this->name = $name;
  44.                 $this->password = $password;
  45.         }
  46.         function register(){
  47.                 $db = DB::getDB();
  48.                 $result = $db->insert("INSERT INTO user (name, password) VALUES ('$this->name', '$this->password')");
  49.                 return $result;
  50.         }
  51.         function get_info($col, $table){
  52.                 $db = DB::getDB();
  53.                 $result = $db->select("SELECT $col FROM $table");
  54.                 return $result;
  55.         }
  56. }
  57. class Articles{
  58.         public $article;
  59.         public $title;
  60.         public $description = '';
  61.         public $keywords = '';
  62.        
  63.         function __construct($article, $title, $description, $keywords){
  64.                 /*
  65.                 ** здесь данные пойдут в class Cleaner{} наверное, и вернутся безопасными для вставки
  66.                 */
  67.                 $this->article = $article;
  68.                 $this->title = $title;
  69.                 $this->description = $description;
  70.                 $this->keywords = $keywords;
  71.         }
  72.         function save(){
  73.                 $db = DB::getDB();
  74.                 $result = $db->insert("INSERT INTO articles (article, title, description, keywords) VALUES ('$this->article', '$this->title, $this->description, $this->keywords')");
  75.                 return $result;
  76.         }
  77.         function show(){
  78.                 $db = DB::getDB();
  79.                 $result = $db->select("SELECT $col FROM $table");
  80.                 return $result;
  81.         }
  82. }
  83. $user = new Users('Вася', 'Пароль');
  84. var_dump($user->register());//число вставленных строк
  85. $user_info = $user->get_info('name, password', 'user');
  86. echo "<pre>";
  87. var_dump($user_info);//двумерный массив юзеров
  88. echo "</pre>";
  89. ?>
Hapson Отправлено: 18 Июля, 2013 - 19:42:43 • Тема: Вывод меню • Форум: Вопросы новичков

Ответов: 7
Просмотров: 288
caballero пишет:
Цитата:
Ну вот когда я добавляю статью, то можно сразу делать и пункт меню в нужной категории.


на фига пихать статью в меню?

то же с категориями - выводишь список категорий со ссылкам на категорию

и незачем копировать дебильную жумлу

Да да да... я уже понял, что ее копирую. Фигня получается.
Действительно, можно и без этого обойтись (без доп таблиц меню)
Hapson Отправлено: 18 Июля, 2013 - 17:37:36 • Тема: Вывод меню • Форум: Вопросы новичков

Ответов: 7
Просмотров: 288
DelphinPRO пишет:
Hapson пишет:
Это что же получится, каждое обновление страницы - запрос в БД и отрисовка меню?
Запрос один, при добавлении\редактировании пунктов. потом в кеш и оттуда берем, пока не измениться. я так делаю.

А как кстати кешировать что-то в php? Что-то я еще нигде об этом не читал и не слушал.
Hapson Отправлено: 18 Июля, 2013 - 17:21:03 • Тема: Вывод меню • Форум: Вопросы новичков

Ответов: 7
Просмотров: 288
Ну вот когда я добавляю статью, то можно сразу делать и пункт меню в нужной категории. А если например я захочу вывести менб категорий, меню записей по дате и т.д и т.п....
Вообщем я что-то и сам пока не въеду, как лучше.

Хочется как можно проще, чтобы не приходилось постоянно лазить в код и писать очередной пункт в массиве, и инклюдить новый файлик меню в новой позиции...
Писать все массивы в один файл не получится. Для каждого меню делать отдельный файл? Или все же писать меню в базу?
Это что же получится, каждое обновление страницы - запрос в БД и отрисовка меню?
Hapson Отправлено: 18 Июля, 2013 - 16:50:19 • Тема: Вывод меню • Форум: Вопросы новичков

Ответов: 7
Просмотров: 288
Всем привет!

Сижу вот второй день и думаю, как и где нужно хранить меню..?
Пишу свой первый блог, дошел до меню. Собственно менюшек будет много. Одно горизонтальное главное, одно горизонтальное в админке + боковые меню категорий и записей...
Я так понимаю, хранить меню нужно в массиве. Точнее хранить по барабану как, но в массиве удобно. Плюс еще нужно предусмотреть возможность изменения существующих меню и их создание/удаление из интерфейса админки. Хранение массива меню в файле для этого мало подходит.

Ну например с верхним меню админки все просто - его можно жестко проинклюдить, так как оно практическ не будет меняться.

А как быть с другими? Писать ручками массив для каждого меню - не вариант. Значит нужно хранить все данные менюшек в БД?
Hapson Отправлено: 08 Июля, 2013 - 16:53:23 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
vanicon
Вот вы говорите, что у вас соль лежит в приложении. Я так понимаю она одна и скорее всего это какая-то константа. В коде ведь не будешь хранить соль для каждого пользователя.
Мне кажется надежнее хранить соль в базе - уникальную для каждого.

PS
Я еще читал про crypt, но так ничего и не понял. Вроде пишут, что он лучше md5, но там вроде алгоритм зависит от системы, или как-то так...
Hapson Отправлено: 07 Июля, 2013 - 21:38:17 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
Вобщем сделал так
PHP:
скопировать код в буфер обмена
  1. //$adm_password приходит из формы при регистрации
  2. $adm_password = md5($adm_password);
  3. $diff = md5(uniqid(rand(), 1));
  4. $adm_password = md5($adm_password . $diff);

В базу записал $adm_password и $diff (в разные поля)
(Добавление)
PS
в джумле я так понял тоже самое записано, только в одном поле (через двоеточие)
Hapson Отправлено: 07 Июля, 2013 - 17:20:05 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
OrmaJever пишет:
Hapson пишет:
Ну в общих чертах, как я понял, можно использовать приведенный мною пример и сохранять сгенерированную соль в базе рядом с паролем пользователя.
Правильно?

да, соль просто усложняет пароль.

Спасибо, понятно.
Hapson Отправлено: 07 Июля, 2013 - 14:23:16 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
Всем спасибо, буду читать.
Ну в общих чертах, как я понял, можно использовать приведенный мною пример и сохранять сгенерированную соль в базе рядом с паролем пользователя.
Правильно?
Hapson Отправлено: 07 Июля, 2013 - 13:36:32 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
Denkill пишет:
Лучше конечно хранит в отдельном файле (что бы было легче менять)

А при шифровки и расшифровки инклудить этот файл.

А зачем ее менять?
Если к примеру зарегистрировался пользователь User с паролем password и я его пароль зашифровал с солью salt, то я должен хранить эту соль пока активен User.
(Добавление)
DelphinPRO пишет:
Denkill пишет:
Соль ставишь статистическую типо $salt = "salt";

Необязательно.
Некоторые системы (например Joomla, а ее думаю не дураки писали?) хранят соль в базе, причем соль для каждого юзера уникальная.

Вот и я о том же.
Соль-то для чего нужна? Если ломанули БД,то без соли пароли не расшифруют(наверно...). А если соль в БД лежит, и пусть даже уникальная для каждого пользователя, то в чем ее смысл?
Hapson Отправлено: 07 Июля, 2013 - 13:21:11 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
Denkill пишет:
Соль ставишь статистическую типо $salt = "salt";

P.S ну понимаешь что salt слишком просто

Ну это понятно. Но эту переменную тоже нужно где-то сохранить. Где?
Там же где и проходит хеширование?
Hapson Отправлено: 07 Июля, 2013 - 13:14:54 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2952
Говорят что MD5 не надежен и нужно использовать так называемую соль. Но что-то я не пойму в чем ее смысл.
Например:
PHP:
скопировать код в буфер обмена
  1. $pass = 'password';
  2. $md = md5($pass);
  3. $salt = uniqid(rand(), 1);
  4. $md = md5($md . $salt);
  5. echo $md;
  6.  
  7. if(md5(md5('password') . $salt) == $md){
  8.         echo 'да';
  9. }else{
  10.         echo 'нет';
  11. }

И что? Я ведь должен записать куда-то сгенерированную соль, чтобы потом авторизовать пользователя. Если соль не сохранять, то потом невозможно будет сверить пароль.
Вопрос: где хранить соль? В базе? Тогда смысл...
Hapson Отправлено: 07 Июля, 2013 - 12:31:51 • Тема: Регулярные выражения • Форум: Вопросы новичков

Ответов: 20
Просмотров: 793
teddy
А нет, нет - все работает.
Просто забыл что нужно коннект передавать
Hapson Отправлено: 07 Июля, 2013 - 12:14:57 • Тема: Регулярные выражения • Форум: Вопросы новичков

Ответов: 20
Просмотров: 793
AlexAnder пишет:

Цитата:
function form_clean($x, $y = 'db') // принимаем координаты не пойми чего для получения не пойми чего

ну хотя бы у функции название нормальное

Радость Ну мне так удобнее
(Добавление)
EuGen пишет:
Hapson
0. Нет смысла использовать addslashes и mysql_real_escape_string вместе.
1. Вообще, функции mysql_* являются устаревшими, вместо них следует использовать расширение mysqli
2. Недопустимо использовать проверку на html-сущности при записи в БД. Это портит пользовательский ввод и может привести к коллизиям. Так, к примеру, md5(htmlspecialchars('<')) совпадёт с md5(htmlspecialchars('&lt;')) - что является ошибкой. Общий совет - каждая проверка нужна в своём месте. Если данные из БД в дальнейшем отображаются в приложении - то именно там и нужно перед выводом пропускать данные через функции проверки на html

Они не вместе.
addslashes - если пишется в файл
mysql_real_escape_string - если пишется в БД.
А вот mysqli у меня что-то не работает... почему-то. Подключены и mysql и mysqli, MySQL 5.5
Hapson Отправлено: 07 Июля, 2013 - 12:08:15 • Тема: Регулярные выражения • Форум: Вопросы новичков

Ответов: 20
Просмотров: 793
vanicon пишет:
Hapson
Убрать, он нужен при выводе данных на страницу.
И да не забудьте поставить ограничение на длину пароля...

Спасибо. Да, про длину забыл.

Страниц (24): В начало « ... 16 17 18 19 [20] 21 22 23 24 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB