Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Несколько вопросов для повышения квалификации

 PHP.SU

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


 Страниц (1): [1]   

> Без описания
nepster
Отправлено: 02 Августа, 2013 - 03:18:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Все примет, вот хотелось бы узнать пару нюансов по работе с веб приложениями. Хотелось бы подискутировать и увидеть мнения/советы/решения коллег.

За ранее большое спасибо за ответы!


1) AJAX Запрос? Оптимизация!
Собственно работаю с ajax. Есть форма нужно защититься от "дрожащих рук клиента". Тоесть пока выполняется запрос заблокировать все остальные кнопки, чтобы не могли зажать ентер к примеру и "задедосить" сервер (пусть даже случайно).
Пример в приложенном файле

Кнопку заблокировать легко, а как заблокировать ссылку на момент загрузки ?
Или как кто решает проблему, затягивает экран прозрачной темной пленкой на момент загрузки ?


2) hidden поля
Кто в каких целях использует inpute type="hidden", приведите пожалуйста примеры ?



3) как правильно обрабатывать данные php
к примеру есть форма, которая посылает данные на сервер.
Кто как делает валидацию данных ?



4) Как лучше хранить денежное значение в базе и работать на сервере ?



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

Ситуация когда нужно проверить есть ли значение в переменно и оно равно 0
Мой вариант решения:
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = 0;
  3. if($result || (string)$result == '0')
  4.  


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



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



И достаточно ли для строки:


Прикреплено изображение (Нажмите для увеличения)
ajax.jpg
 
 Top
avtor.fox
Отправлено: 02 Августа, 2013 - 08:51:11
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




nepster пишет:
Или как кто решает проблему, затягивает экран прозрачной темной пленкой на момент загрузки ?

Как вариант. Деактивация кнопок и ссылок тоже сойдёт, но это геморно.

nepster пишет:
hidden поля

Например ID какой-нибудь записи.

nepster пишет:
как правильно обрабатывать данные php

Всё зависит от архитектуры приложения. Я например нередко сталкиваюсь с тем, что входные данные (поля) могут быть неизвестны. В таком случае делаю обработку известных данных, а неизвестные поля "кладу" как сериализованные или json кодированные строки. А для самой обработки данных от SQL или XSS инъекций использую real_escape_string || prepare, strip_tags и прочее (что несомненно зависит от архитектуры и потребностей)

nepster пишет:
Как лучше хранить денежное значение в базе и работать на сервере ?

Смотря какой тип числовых данных. Целые, с плавающей точкой, точные, приближённые. FLOAT, DECIMAL, BOOLEAN, - например. Но про них нужно читать подробно.

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

А теперь проверьте свой код с отрицательным значением. И опять таки всё зависит от задачи.

nepster пишет:
достаточно ли принудительно указать тип данных для предотвращения sql инъекции

Увы, но нет.
PHP:
скопировать код в буфер обмена
  1. $Inj = (string) "avtor.fox' -- "; //Не удалит инъекцию


А если вернуться в числовому типу и вспомнить про всемогущую типизацию переменных PHP, то Ваше:
PHP:
скопировать код в буфер обмена
  1. $numeric = '0.49';
  2. echo (int) $numeric; // 0
  3. echo (float) $numeric; // 0.49


nepster пишет:
И достаточно ли для строки:

Всё зависит от того, что Вы от неё хотите.
 
 Top
stifard
Отправлено: 02 Августа, 2013 - 08:54:25
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Май 2013  


Помог: 1 раз(а)




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

асинхронность off?
(Добавление)
6) достаточно ли принудительно указать тип данных для предотвращения sql инъекции
Нет
 
 Top
DelphinPRO
Отправлено: 02 Августа, 2013 - 09:28:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




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




-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
nepster
Отправлено: 02 Августа, 2013 - 10:16:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Про sql типы не уточнил

Интересует именно int? к примерю есть разница между:
PHP:
скопировать код в буфер обмена
  1.  
  2. $id; // получили идентификатор записи к примеру
  3.  
  4. варианты валидации:
  5.  
  6. 1) $id = (int)$id;
  7.  
  8. 2) $id = (is_numeric($id)) ? (int)$id : 0;
  9.  


В свою очередь для строки будет ли достаточно htmlspecialchars() ?
(если данные передаются от клиента на сервер, что бы пользователь не нашкодил)


hidden поля
Я использую на сайте AJAX и плагин для получения данных из форм (плагин удобный поддерживает файлы) и обработчик формы по классу. Тоесть данные передать нельзя, потому все, что мне нужно например защитный токен я помещаю именно в поле hidden, логично ли я поступаю ?


CODE (htmlphp):
скопировать код в буфер обмена
  1. Смотря какой тип числовых данных. Целые, с плавающей точкой, точные, приближённые. FLOAT, DECIMAL, BOOLEAN, - например. Но про них нужно читать подробно.



Вот как раз интересно именно тип данных в базе, сейчас я использую double и налажал в том, что перед записью в базу всегда округляю round($funds,2), я уже понял, что это ошибка. Где-то читал, что советуют хранить копейки в обычном int.



Касательно валидации данных:

Возьмем простой пример новости на сайте.
Есть страница редактировать новость, есть страница создать новость.
На сервер поступают данные:

id новости (если редактировать)
название новости
текст полной новости
текст короткой новости
кол-во просмотров (если редактировать)
дата создания (если редактировать)
статус
id автора


Вот интересно как бы вы сделали валиацию ?

Чуть позже скину мою реализацию, но в двух словах:

Что бы не повторять несколько проверок, создаем функцию news_validation($data);

При редактировании и создании передаем туда данные, если возвращает true, тоесть валидация прошла успешо, записываем данные в базу, при этом прогоняем строки через
trim(htmlspecialchars($data['news_full'])).


а внутри news_validation($data) у нас проверки такого плана:

PHP:
скопировать код в буфер обмена
  1.  
  2. if(!isset($news_status) || !is_numeric($news_status)) return 'ERROR_NOVALID_NEWS_STATUS';
  3.  
  4.  
  5. return false;
  6.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB