Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько вопросов для повышения квалификации 
:(
    Опции темы
nepster
Дата 2.8.2013, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Всем привет, возникли несколько вопросов, отелось бы узнать мнения и советы коллег. За ранее большое спасибо! 

1) Как лучше хранить денежное значение в базе, какой тип данных ?



2) Собственно вопрос про 0 и false

Ситуация когда нужно проверить есть ли значение в переменно и оно равно 0

Мой вариант решения: 
Код

    $result = 0;
    if($result || (string)$result == '0')

А как Вы решаете данную задачу? 



3) достаточно ли принудительно указать тип данных для предотвращения sql инъекции для числа и htmlspecialchars для строки ? 

Код

$id; // получили идентификатор записи к примеру
 
варианты валидации:
 
1) $id = (int)$id;
 
2) $id = (is_numeric($id)) ? (int)$id : 0;
 
// для строки
$string = htmlspecialchars($string);

PM MAIL   Вверх
Fortop
Дата 2.8.2013, 16:08 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nepster @  2.8.2013,  15:54 Найти цитируемый пост)
Как лучше хранить денежное значение в базе, какой тип данных ?

decimal/numeric

Цитата(nepster @  2.8.2013,  15:54 Найти цитируемый пост)
итуация когда нужно проверить есть ли значение в переменно и оно равно 0

откройте для себя 
===

Цитата(nepster @  2.8.2013,  15:54 Найти цитируемый пост)
 достаточно ли принудительно указать тип данных для предотвращения sql инъекции для числа и htmlspecialchars для строки ? 

нет


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 2.8.2013, 16:35 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



И от себя добавлю...

Цитата(nepster @  2.8.2013,  14:54 Найти цитируемый пост)
1) Как лучше хранить денежное значение в базе, какой тип данных ?
decimal, как и сказали, с нужной точностью (2 знака для рублей, долларов и т.п.). Это тип для точных расчетов. В нем нет каверз, как во float.
Хранить целым числом в виде значения копеек, центов и т.п. настоятельно не рекомендую. Округление тысячных долей до сотых - очень частая ситуация (посмотрите на цифры обмена валют), а с целыми числами это невозможно.

Цитата(nepster @  2.8.2013,  14:54 Найти цитируемый пост)
2) Собственно вопрос про 0 и false

Fortop +++
Странно вообще возникновение такого вопроса, если честно =)


Цитата(nepster @  2.8.2013,  14:54 Найти цитируемый пост)
3) достаточно ли принудительно указать тип данных для предотвращения sql инъекции для числа и htmlspecialchars для строки ? 
Prepared statements были придуманы еще 10 лет назад. С небольшой форой для их популяризации и реализации разными СУБД можно сказать, что последние 5 лет ими не пользоваться - это даже не странно, а уже глупо.

htmlspecialchars предназначен для вывода текста в браузер, а не для его ввода в базу. Эта функция предназначена для таких строк, как, например:
<script>alert("Этот сайт не фильтрует посты юзеров!");</script>
Как можно заметить, этот форум вывел просто текст, а не злобный html-код.

Причем к sql-инъекциям эта функция не имеет абсолютно никакого отношения.

Это сообщение отредактировал(а) Arantir - 2.8.2013, 16:36


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 2.8.2013, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Я Prepared statements  пользуюсь только через драйвер PDO напрямую в СУБД  их не взываю, нету надобности когда PDO делает тоже самое.
У себя в фм реализовал  в методах контролера 
$this->post(<имя ключа>, возможное значение по умолчанию null,  тип проверки null  int str num empty можно использовать знак отрицания в начале ! 
использую так 
Код

if($id = $this->get('id',false,'int') && $id > 0 ){

}
if(0===($id = $this->get('id',false))){

}

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

ID всегда проверяю через is_int + > 0 но не через numeric

Это сообщение отредактировал(а) Sanchezzz - 2.8.2013, 19:25


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
nepster
Дата 3.8.2013, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Подскажите пожалуйста как безопасно орабатывать получнные данные на сервере.

Я используюю Yii, собственно там работаю с актив рекорд. Я в подробности работы класса не мокался, но знаю, что он тоже проверяет данные. 

Но хотельсь бы знать более подробно как защиться от злоумышлеников и как правильно валидировать данные. Особенно числовые! 
PM MAIL   Вверх
georgiy11
Дата 3.8.2013, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Метод rules()
PM MAIL   Вверх
nepster
Дата 4.8.2013, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



а если на чистом php. 

Мне не опнравился данный метод, так как я использую мультиязычность и обрабатываю каждую ошибку. Поэтому мне проще возвращать  в качестве ответ от сервера код ошибки или success в формате json 
PM MAIL   Вверх
georgiy11
Дата 4.8.2013, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Все ошибки будут хранится в модели AR. getErrors и можно обрабатывать smile. Можно в самом правиле прописывать свой обработчик для ошибки.

Это сообщение отредактировал(а) georgiy11 - 4.8.2013, 13:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.