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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверка данных, приходящих от пользователя

Сообщения:  [1-10]   [11-12] 

 
 автор: cheops   (25.08.2006 в 12:20)   письмо автору
 
   для: abord   (24.08.2006 в 17:04)
 

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

   
 
 автор: abord   (24.08.2006 в 19:06)   письмо автору
 
   для: RV   (24.08.2006 в 18:59)
 

проверить сколько есть на складе и дальше плясать уже от этого

Не ну можно в goods заделать поле count и через админку бы заполнялось для каждого товара его количество. Это тоже стандартно и мое решение легко расширяемо и для такого случая, но если заказчику это не нужно. Те админу проще не заполнять это поле. Я просто выношу в настройки $maxcount = 10000 согласовав с заказчиком, если сделали заказ на какое нибудь реальное число товаров, то его можно рассматривать, а если ввели например 10000000 то такой заказ даже не пройдет.


Как вы считаете?

   
 
 автор: RV   (24.08.2006 в 18:59)   письмо автору
 
   для: abord   (24.08.2006 в 18:49)
 

проверить сколько есть на складе и дальше плясать уже от этого

   
 
 автор: abord   (24.08.2006 в 18:49)   письмо автору
 
   для: RV   (24.08.2006 в 18:42)
 

Задача корзина, интернет магазина, в пользователь вводит count, количество товара в текстовое поле, конечно он туда не введет 10000000000000, если он нормально делает заказ, но теоритически ему никто не мешает этого сделать. Так же как и ввести например отрицательное число. А зачем мне в таблице заказов бессмысленные значения?
mysql_error() конечно ничего не возвращает, но тем не менее если бы был не INT а TINYINT урезались бы уже достаточно небольшие числа. Почему бы не проверять большие значения?

Насчет goodid тут как и в любом каталоге, можно сделать просто SELECT count(*) FROM goods WHERE goodid =".$this -> goodid и далее товар/рубрика найден/не найден.

Но помойму, условие не повредит
$maxid = getoneresult("SELECT MAX(goodid) FROM goods WHERE 1");
if($this -> goodid > 0 && $this -> goodid < $maxid){
}
Если $this -> goodid > $maxid в данном случае имело место редактирование адресной строки и не подставлять $this -> goodid в запрос, по мойму уже плюс к безопасности...

   
 
 автор: RV   (24.08.2006 в 18:42)   письмо автору
 
   для: abord   (24.08.2006 в 18:35)
 

а где неправильный запрос? mysql_error() что то возвращает?
и что за такой id который пользователь сам должен делать?
получается что вы сами не знаете структуру вашей таблицы.
какая первоначальная задача? потому как решение очень странное

   
 
 автор: abord   (24.08.2006 в 18:35)   письмо автору
 
   для: RV   (24.08.2006 в 18:30)
 

INSERT INTO `basket` ( `sid` , `dateadd` , `goodid` , `count` )
VALUES (
'0', '0', '100000000000000000000000000', '0'
);


В таблице получается 0 0 2147483647 0

   
 
 автор: RV   (24.08.2006 в 18:30)   письмо автору
 
   для: abord   (24.08.2006 в 18:28)
 

>Если п-ль ввел огромный id будет неверный sql запрос

покажите пример такого запроса

   
 
 автор: abord   (24.08.2006 в 18:28)   письмо автору
 
   для: abord   (24.08.2006 в 18:11)
 

Решение такое:
Запрос
&goodid=65&count=432


function CheckGoodid(){
  $maxid = getoneresult("SELECT MAX(goodid) FROM goods WHERE 1");
    if($this -> goodid > 0 && $this -> goodid < $maxid){
     if(getoneresult("SELECT count(*) FROM goods WHERE goodid =".$this -> goodid)){
      return TRUE;
     }
  }
    return FALSE;
 }
 function CheckCount(){
  global $maxgoodcount;
    if($this -> count > 0 && $this -> count < $maxgoodcount){
        return TRUE;
  }
    return FALSE;
 }
//getoneresult возвращает одно выбранное значение


вот я введу id=4, а у вас такого нет. и что теперь? general protection fault как поговаривала винда.

Сначала смотрим, что 4 больше 0 и меньше моего максимального id в базе,
а затем SELECT count(*) FROM goods WHERE goodid =4

   
 
 автор: RV   (24.08.2006 в 18:20)   письмо автору
 
   для: abord   (24.08.2006 в 18:11)
 

в таком случае как вы защищаетесь от отсутствующих id в базе.
вот я введу id=4, а у вас такого нет. и что теперь? general protection fault как поговаривала винда.
во-вторых с чего вы взяли что при большом id будет неверным sql запрос?

   
 
 автор: abord   (24.08.2006 в 18:11)   письмо автору
 
   для: kasmanaft   (24.08.2006 в 17:35)
 

Если п-ль ввел огромный id будет неверный sql запрос
Допустим у меня поле Id типа INT
У него есть свой предел, если число превысит этот предел то вместо него будет занесено значение соответсвующее границе предела.
По мойму оно не надо:)

   

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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