PHP.SU

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

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

> Найдено сообщений: 359
Hapson Отправлено: 28 Июня, 2013 - 20:28:40 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
vanicon пишет:
Hapson пишет:
А как же нормализация?

Тут главное не слишком нормализировать, потому что все зависит от конкретного приложения, и иногда приходиться денормализацию делать, для повышение производительности.
В вашем же случае, делайте так как будет удобнее работать с данными, а не например делать две таблицы для пользователей (зареганых и не зареганых)...

Я размышлял следующим образом:

У комментария обязательно есть:
1. его id
2. id статьиб к которой он относится
3. сам коммент
4. его статус

Далее:
1. id пользователя, если он зарегистрирован
2. дальше по id пользователя можно узнать все о нем

Или:
1. имя и email пользователя, если он незарегистрирован... и все

Ну еще есть рейтинг, который тоже может быть а может и нет.

Если все слить, то поля id пользователя, рейтинг, имя и email пользователя где-то будут, а где-то будут пустовать. Вот о чем я.
Я как бы планировал так, чтобы каждая таблица содержала минимум NULL
Hapson Отправлено: 28 Июня, 2013 - 20:17:09 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
Так ничего и не понял...
Нужно так разбивать или делать большие таблицы для всего.
Статьи, категории, комменты, пользователи...
К чему тогда столько писанины о нормализации?

Да, простенький блог, но базу хочется делать как для чего-то большого, в будущем может быть расширяемого.

А можно вкратце, чем отличаются InnoDB и MyISAM?
Hapson Отправлено: 28 Июня, 2013 - 19:50:53 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
То есть я так понял, что все валить в большие таблицы?
Категории, статьи, комменты, пользователи...
Так?
А как же нормализация?
Hapson Отправлено: 28 Июня, 2013 - 18:33:02 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
Contr
Имена конечно будут поменьше. Это сейчас, чтобы понимать.
А по поводу char - насколько я помню, то пробелы добиваются в БД, но при выборке они отбрасываются.

vanicon
Да, наверно надо кое-что объединить. Но например Дискрипшен категорий можно же вывести в отдельную таблицу. Так как скорее всего его не будет.

LIME
Спасибо за ссылку. Читаю

ЗЫ
Вот еще не пойму, какую таблицу делать для картинок? Хранить там id и линки на картинки?
Hapson Отправлено: 28 Июня, 2013 - 11:12:36 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
Ну так как лучше?
Делать несколько таблиц так, чтобы в них были заполнены все поля. Или обобщить немного и пусть будет NULL в некоторых полях?
Прочитал, что вроде объединение замедляет отклик БД.
Hapson Отправлено: 27 Июня, 2013 - 08:09:02 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
vanicon
В таблице Category_info пока олин столбец - дискрипшен. Он может быть, а может и не быть (скорее всего).
Рейтинг у комментов и статей может быть, а может и нет.
Комменты могут быть от зарегистрированных пользователей, а могут быть от гостей.

Если все объединить, то в таблицах будет много пустых полей. А так во всех таблицах практически все поля будут заполнены. Запросы будут посложнее, но их ведь только раз написать.

Вообщем я как бы следую рекомендациям из книг. В частности МартинГрабер-SQL. Вроде как считается не очень хорошо, если в таблице много пустоты. Размер БД от этого однозначно увеличится.
(Добавление)
Ps
Не знаю, может и правда переборщил...
Hapson Отправлено: 27 Июня, 2013 - 00:35:24 • Тема: Архитектура БД • Форум: SQL и Архитектура БД

Ответов: 62
Просмотров: 460
Вроде как созрел уже что-то писать. Решил сначала написать блог, для себя любимого)))
И тренировка и пригодится.
Естественно начал с БД. Сижу уже вот 3 вечера - думаю.
Вообщем будут статьи от меня, и пока только от меня. Пока...
Комментарии как от зарегистрированных пользователей, так и от незарегистрированных.
Ну и категории конечно.
Вот че я надумал
CODE (SQL):
скопировать код в буфер обмена
  1. /* Category */
  2. | id_cat | id_user |  alias   | title   | created | MODIFY |status |
  3. | int(5) | int(5)  | char(100)|char(100)|datetime |datetime|tinyint|
  4. --status: 1 - публикуется, 2 - на модерации, 3 - не публикуется, 0 - удалена
  5.  
  6. /* Category_info */
  7. | id_cat | description |
  8. | int(5) |  char(255)  |
  9.  
  10. /* Articles (Статьи) */
  11. | id_article | id_user  | copyrights | alias   |  title  | keywords | description | robot | article | cnt_comments | created | MODIFY  | end_public | STATUS  |
  12. |   int(5)   |  int(5)  |   tinyint  |char(100)|char(100)|char(255) | char(255)   |tinyint| text    |   int(5)     | datetime| datetime| datetime   | tinyint |
  13. --status: 1 - публикуется, 2 - на модерации, 3 - не публикуется, 0 - удалена
  14.  
  15. /* Articles_raiting (рейтинг статей) */
  16. | id_article | rating_all | rating_good | rating_bad |
  17. |   int(5)   |   int(5)   |   int(5)    |   int(5)   |
  18.  
  19. /* Comments (комментарии) */
  20. | id_comment | id_article | comment | STATUS |
  21. |   int(5)   |   int(5)   | text    |tinyint |
  22. --status: 1 - публикуется, 2 - на модерации, 3 - не публикуется, 0-удален
  23.  
  24. /* Comments_rating (рейтинг комментариев) */
  25. | id_comment | rating_all | rating_good | rating_bad |
  26. |    int(5)  |  int(5)    |  int(5)     |   int(5)   |
  27.  
  28. /* Comments_of_reg (комментарии зарегистрированных пользователей) */
  29. | id_comment | id_user |
  30. |   int(5)   |  int(5) |
  31.  
  32. /* Comment_of_not_reg (комментарии незарегистрированных пользователей) */
  33. | user_name | user_email |
  34. | char(60)  |  char(50)  |
  35.  
  36. /* Users (пользователи) */
  37. | id_user | login  | password | role  | STATUS | email  | date_register |
  38. | int(5)  |char(50)|  char(50)|tinyint| tinyint|char(50)|   datetime    |
  39. --status: 1 - активирован, 2 - ожидает активации, 3 - бан, 0 - удален
  40.  
  41. /* User_info (доп. инфа о пользователях) */
  42. | id_user | site_url  | site_title | name   | Age   | sex   |  city   |
  43. | int(5)  | char(100) |  char(50)  |char(50)|tinyint|tinyint|char(100)|
  44.  
  45. /* Setting (настройки сайта) */
  46. |   url  | keywords | description |
  47. |char(50)|char(255) |  char(255)  |


Вот затык у меня с последней табличкой. Нужна ли она вообще? Это типа какие-то настройки сайта.
Еще что-то туплю с таблицей для галереи: что там храниь? Ну название, title, alias...

Ну и как вообще оно? Я на верном пути?
Может нужно что-то еще?
(Добавление)
ЗЫ
Переводы строк коверкают все...
Лучше скопировать в notepad++.
Hapson Отправлено: 21 Июня, 2013 - 20:38:41 • Тема: Непонятки с mysql_fetch_array... • Форум: Вопросы новичков

Ответов: 2
Просмотров: 135
Столкнулся с непоняткой.
Есть таблица в базе - users. В ней заполнена всего одна строка - id, login, password, reg_date, status.
Делаю так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(/*если пришла форма*/){
  2.         if(/*если есть ошибка заполнения*/){
  3.                 $error_auth = 'Проверьте правильность заполнения полей - не менее 6 и не более 15 символов(латинские буквы верхнего, нижнего регистров и цифры).';
  4.         }else{
  5.                 $user_login = $_POST['login'];
  6.                 $user_password = $_POST['password'];
  7.                
  8.                 db_connect();
  9.                 $query =("SELECT id, login, password, reg_date, status
  10.                                         FROM `" . DB_PREF . "users`
  11.                                         WHERE `login` = '" . $user_login . "'
  12.                                         AND `password` = '" . $user_password . "'");
  13.                 $auth = mysql_query($query);
  14.                 unset($query);
  15.                 mysql_close();
  16.                
  17.                 if(mysql_num_rows($auth) > 0){
  18.                         //собираем данные пользователя
  19.                         $user_info = mysql_fetch_array($auth);
  20.                        
  21.                         //если в выбранных данных статус пользователя 1,то все ОК - это админ пришел
  22.                         if($user_info['status'] == 1){
  23.                                 $user_status = 1;
  24.                                 $user_id = $user_info['id'];
  25.                                 $user_login = $user_info['login'];
  26.                                 $user_password = $user_info['password'];
  27.                                 $_SESSION['id'] = $user_id;
  28.                                 header('Location: ' . $_SERVER['PHP_SELF']);
  29.                                 exit;


Смотрим
CODE (htmlphp):
скопировать код в буфер обмена
  1. echo '<pre>';
  2. echo print_r($user_info);
  3. echo '<br /><br />';
  4. var_dump($user_info);
  5. echo '</pre>';


Видим
Цитата:
Array
(
[0] => 1
[id] => 1
[1] => tester
[login] => tester
[2] => tester
[password] => tester
[3] => 1371074215
[reg_date] => 1371074215
[4] => 1
[status] => 1
)
1

array(10) {
[0]=>
string(1) "1"
["id"]=>
string(1) "1"
[1]=>
string(6) "tester"
["login"]=>
string(6) "tester"
[2]=>
string(6) "tester"
["password"]=>
string(6) "tester"
[3]=>
string(10) "1371074215"
["reg_date"]=>
string(10) "1371074215"
[4]=>
string(1) "1"
["status"]=>
string(1) "1"
}


Что за 1 после массива? После вывода print_r
Ни один массив не показывает 1, кроме этого.
В исходном коде 1 идет сразу после вывода print_r
(Добавление)
если через print_r вывести одну ячейку из массива $user_info, то в конце выводимого значения также стоит 1...
(Добавление)
PS

CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach($user_info as $a => $b){
  2.         echo "$a = $b<br />";
  3. }


Цитата:
0 = 1
id = 1
1 = tester
login = tester
2 = tester
password = tester
3 = 1371074215
reg_date = 1371074215
4 = 1
status = 1

(Добавление)
PPS

вру
после вывода любого массива через print_r, в конце 1. Что это за единица?
Hapson Отправлено: 21 Июня, 2013 - 18:38:20 • Тема: Непонятная функция - помогите разобраться • Форум: Вопросы новичков

Ответов: 33
Просмотров: 1118
Здравствуйте.
Вот решил записать соединение с БД в функцию
CODE (htmlphp):
скопировать код в буфер обмена
  1. function db_connect(){
  2.         @mysql_connect(DB_SERVER, DB_LOGIN, DB_PASS) or die ($db_error = mysql_error() . ' (Не удалось подключиться к базе данных)');
  3.         @mysql_select_db(DB_NAME) or die ($db_error = mysql_error() . ' (Не удалось выбрать базу данных)');
  4. }

Так вот вопрос, как мне вытянуть $db_error так, чтобы никто не видел этой строки. К примеру записать значение этой переменной в лог.
А еще лучше, вывести сообщение юзеру и продолжить выполнение скрипта. Сейчас, если меняю к примеру пароль БД, то вываливается белый экран с ошибкой.
(Добавление)
сделать $db_error глобальной..?
а как продолжить выполнение, если коннект не удался?
Hapson Отправлено: 18 Июня, 2013 - 19:09:35 • Тема: Непонятная функция - помогите разобраться • Форум: Вопросы новичков

Ответов: 33
Просмотров: 1118
armancho7777777
CODE (htmlphp):
скопировать код в буфер обмена
  1. "/^[a-zA-Z0-9]{1,15}$/"

{1,15} - это же не менее 1 и не более 15 символов. Здесь буквы верхнего, нижнего регистра и цифры. Вроде так...?

PS
А, ну да... да да - затупил что-то. Так и есть, могут состоять из одного.
Спасибо за замечание, нуно подправить.
Hapson Отправлено: 17 Июня, 2013 - 23:28:21 • Тема: Непонятная функция - помогите разобраться • Форум: Вопросы новичков

Ответов: 33
Просмотров: 1118
А вот с этим что?
Мой пост
??? Непонял!
Hapson Отправлено: 17 Июня, 2013 - 20:23:19 • Тема: Непонятная функция - помогите разобраться • Форум: Вопросы новичков

Ответов: 33
Просмотров: 1118
LIME
Спасибо. С первым понятно.
А я вот че написал у себя
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(!empty($_POST['auth'])){
  2.         //заполнены ли поля?
  3.         if((empty($_POST['login']) || empty($_POST['password'])) || (!preg_match("/^[a-zA-Z0-9]{1,15}$/", $_POST['login']) || !preg_match("/^[a-zA-Z0-9]{1,15}$/", $_POST['password']))){
  4.                 echo 'Проверьте правильность заполнения полей';
  5.         }


Это нормально? Достаточно ли для проверки полей?
Hapson Отправлено: 17 Июня, 2013 - 19:55:49 • Тема: Непонятная функция - помогите разобраться • Форум: Вопросы новичков

Ответов: 33
Просмотров: 1118
Набрел тут недавно на одну пользовательскую функцию...
Здесь
Проверка полей ввода логина/пароля

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function html($_POST) {
  3.    $_POST = is_array($_POST) ? array_map('html', $_POST) : htmlspecialchars ($_POST);
  4.    return $_POST;
  5. }
  6.  
  7. $_POST = array_map('html', $_POST);
  8. ?>

Цитата автора:
Цитата:
Благодаря этой проверке нас будет сложнее взломать. Например, такая конструкция уже не пройдет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <script>alert("hack")</script>


Вот третий день уже на нее смотрю, но понять не могу. Также что-то не доходит до меня array_map()
Это тут что-то типа рекурсии? Или как?
Hapson Отправлено: 16 Июня, 2013 - 01:20:21 • Тема: Авторизация • Форум: Вопросы новичков

Ответов: 47
Просмотров: 1606
teddy пишет:
Ну сделайте по ролям тогда доступы, и проверяйте, если админ, пускать всюду, если пользователь, то пускать сюда, но не пускать туда... Конечно, для пользователей тоже нужно будет. Иначе как вы планируете фиксировать их действия на сайте? Хотя можно куками тоже, но я их не использую, если вам оно надо - можете использовать, никто не ограничивает )

Ну оно так и есть.
$user_status = 1(админ), 2(модер), 3(юзер), 0(гость)

teddy пишет:
В файле form.php подразуемается, что там лежат поля для ввода логина и пароля при авторизации...
Ну а дальше делать что-то, проверяя на наличие сессии

Так и есть. При входе в админку сразу проверка на наличие id в сессии. Если нет, то на форму авторизации. Успешно - в админку (если $user_status = 1)

teddy пишет:
Что бы не было подобных проблем, создайте чертеж вашего проекта для себя же, продумайте приблизительный алгоритм, что и где будет лежать, как будет работать..

В голове как бы все вижу, но знания php еще слабоваты.


Набрел тут вчера на видеолекции Специалиста - ВЕЩЬ! Хорошо мужик рассказывает
Hapson Отправлено: 16 Июня, 2013 - 00:12:28 • Тема: Авторизация • Форум: Вопросы новичков

Ответов: 47
Просмотров: 1606
teddy пишет:
Hapson пишет:
Так что лучше загонять в массив сессии? id или логин-пароль?

Думаю одного логина будет достаточно при грамотном подходе. А на основе этой сессии уже разруливать код...

Хотя тут все зависит от того, что вы хотите сделать ) я так особо не вчитывался во весь топик, особенно в код... Тоесть если пользователь авторизован, то записываем логин в сессию, а дальше уже используем логин для того, что нам нужно... А поля для авторизации убираем. И лучше запретить к полям для авторизации доступ вообще через прямой путь, коль уж авторизовались...

Ну форма авторизации только через index.php админки открывается, больше никак. Или я что-то не понял?
Вообще это форма авторизации только для админа. Для юзеров будет другая. Вот я что думаю... для юзеров тоже сессии использовать?

Страниц (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