Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите с архитектурой БД + несколько вопросов по php
 
 автор: katok   (17.03.2010 в 03:00)   письмо автору
 
 

1)какой функцией фильтровать get/post запросы от sql inj. и xss?
только mysql_escape_string() для этого достаточно?

2)как защититься от подмены get/post запросов?

3)как защититься от кражи сессии?

4)почему некоторые программисты хранят сессии в БД mysql, это безопаснее или так быстрее работает?

5)какая команда нужна, что вся БД mysql была в utf-8?

6)можно ли несколько покупок продать одним кликом в paypal? т.е. в корзине на моем
сайте несколько товаров, юзер нажимает одну кнопку buy now и попадает на paypal.com
для оплаты?(ссылку на пример рабочии, если не трудно)

7)можно ли проверить php скриптом оплату товара пользователем?(ссылку на пример рабочии, если не трудно)



8)Правильно ли я выбрал типы полей для своей БД? Можно ли эту БД как-то упростить?

CATEGORY:
cat_id(smallint),
item_name(tinytext)

ITEMS:
item_id(smallint),
cat_id(smallint),
title(tinytext),
description(text),
in_stock(tinyint(2). takes 2 values: 1 or 0),
image_id(tinyint),
add_date(datetime),
hide(tinyint(2). takes 2 values: 1 or 0),
price(mediumint)

IMAGES:
image_id(smallint),
item_id(smallint),
image_link(text)

USERS:
user_id(smallint),
name(tinytext),
surname(tinytext),
phone(tinyint),
mobile_ph(tinyint),
email(tinytext),
address(text),
ip(tinyint)

ORDERS:
order_id(smallint),
user_id(smallint),
item_id(smallint),
qty(smallint),
status(tinytext. takes 2 valus: waiting or approved),
add_date(datetime),
currency(tinytext. takes 3 values: euro, pounds, US dollars),
total_price(int),
income(int),
approved(datetime)

ADMIN:
admin_id(smallint),
name(tinytext),
password(tinytext),
last_visit(datetime)


9)Как правильно хранить ссылки на картинки в БД? Записать все ссылки в одну строку т.е. вот так:

image_id,          item_id,  image_link
1,                     1,        www.site.ru/image1.jpg
                                    www.site.ru/image2.jpg
                                    www.site.ru/image3.jpg
                                    www.site.ru/image4.jpg
2,                     2,        www.site.ru/image5.jpg
                                    www.site.ru/image6.jpg
                                    www.site.ru/image7.jpg
                                     www.site.ru/image8.jpg

и потом ссылки парсить reg.ex'ом или нужно записывать каждую ссылку на новую строку, т.е. так:

image_id, item_id, image_link
1,        1,       www.site.ru/image1.jpg
2,        1,       www.site.ru/image2.jpg
3,        1,       www.site.ru/image3.jpg
4,        1,       www.site.ru/image4.jpg 
5,        2,       www.site.ru/image5.jpg
6,        2,       www.site.ru/image6.jpg
7,        2,       www.site.ru/image7.jpg
8,        2,       www.site.ru/image8.jpg



?

10)Поле ITEMS.add_date(datetime) получает значение в формате YYYY-MM-DD HH:MM:SS, а мне нужно в таком: d-m-yyyy @ hh:mm:ss
Как это сделать, reg.ex'oм парсить эту строку или как-то по другому?

  Ответить  
 
 автор: Trianon   (17.03.2010 в 09:27)   письмо автору
 
   для: katok   (17.03.2010 в 03:00)
 

почему все вопросы в одной теме и в одном разделе?

  Ответить  
 
 автор: Trianon   (17.03.2010 в 09:33)   письмо автору
 
   для: katok   (17.03.2010 в 03:00)
 

8.
а) Вы зря экономите на id. Делайте их INT
б) если текстовое поле несет ключевую информацию (логин, телефон, e-mail, URL) его делают VARCHAR, а не TEXT
в) если пароль хранится в виде хеша - вместо VARCHAR разумно применить VARBINARY
Если в открытом виде,... впрочем, в открытом виде пароли храниться не должны нигде.

  Ответить  
 
 автор: neadekvat   (17.03.2010 в 19:57)   письмо автору
 
   для: Trianon   (17.03.2010 в 09:33)
 

Какое обоснование, что id (первичные ключи) следует делать INT?

  Ответить  
 
 автор: Trianon   (17.03.2010 в 20:08)   письмо автору
 
   для: neadekvat   (17.03.2010 в 19:57)
 

Я говорил не только о первичных.
Когда пространство первичных ключей переполнится, кому-то сильно сплохеет.
При типах TINYINT и SMALLINT это может произойти куда раньше, чем загадывает автор.

  Ответить  
 
 автор: neadekvat   (17.03.2010 в 20:21)   письмо автору
 
   для: Trianon   (17.03.2010 в 20:08)
 

Я представляю, сколько надо добавить категорий, к примеру, чтобы INT хотя бы наполовину заполнить =)
Однако сильно ли сказывается на скорости (если это все-таки первичный ключ), да и размер в 4 раза увеличивается (пусть там 3 байта разницы, но при больших нагрузках, видимо, и такое ощутимо?)

  Ответить  
 
 автор: Trianon   (17.03.2010 в 20:23)   письмо автору
 
   для: neadekvat   (17.03.2010 в 20:21)
 

Вы специалист по большим нагрузкам?
Нет?
И я нет.
Какой смысл нам перетирать эту тему?



P.S.
Твою налево, ну почему люди пытаются лезть в оптимизацию до того, как научатся более менее прилично проектировать создаваемое?!

  Ответить  
 
 автор: neadekvat   (17.03.2010 в 20:38)   письмо автору
 
   для: Trianon   (17.03.2010 в 20:23)
 

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

P.S. Сам по энерции всегда использую INT (так в большинстве статей было, по которым я учился), однако аргументированно доказать, что здесь будет лучше именно INT не могу.

  Ответить  
 
 автор: Trianon   (17.03.2010 в 21:33)   письмо автору
 
   для: neadekvat   (17.03.2010 в 20:38)
 

Здесь будет лучше INT потому, что при относительно коротком размере элемента индекса (4 байта)
пространство ключей достигает двух миллиардов, чего достаточно для подавляющего большинства приложений.
Вот и все рассуждение.

  Ответить  
 
 автор: Trianon   (17.03.2010 в 09:36)   письмо автору
 
   для: katok   (17.03.2010 в 03:00)
 

9.
Никаких регекспов. Массивные данные в ячейках не хранятся - это сразу и в лоб нарушает первую нормальную форму.
Массивные данные следует растягивать по строкам.
Так что второй вариант.

  Ответить  
 
 автор: Trianon   (17.03.2010 в 09:38)   письмо автору
 
   для: katok   (17.03.2010 в 03:00)
 

10.
Почитать о функциях даты и времени MySQL
Применить подходящую.
Либо выполнять преобразование уже на php-уровне.

  Ответить  
 
 автор: Trianon   (17.03.2010 в 09:43)   письмо автору
 
   для: katok   (17.03.2010 в 03:00)
 

5. какая команда нужна, что вся БД mysql была в utf-8?
Чтобы вся БД была - достаточно CREATE DATABASE dbname CHARACTER SET 'utf8'; ну и SET NAMES 'utf8' при обращениях.
А вот чтобы вся БД стала - одной командой не обойдешься.
Придется долго и нудно исправлять. Так что лучше сразу делать без ошибок.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования