За последние 24 часа нас посетил 18151 программист и 1599 роботов. Сейчас ищут 889 программистов ...

Лагает проверка на входящие данные.

Тема в разделе "PHP для новичков", создана пользователем Lopar, 24 июн 2009.

  1. Lopar

    Lopar Активный пользователь

    С нами с:
    18 янв 2009
    Сообщения:
    16
    Симпатии:
    0
    Условие.

    есть две ссылки :
    index.php?option=1
    index.php?option=2



    в index.php:

    PHP:
    1. <?
    2. ...
    3. $option=$_GET['option'];
    4. if ($option!=1 OR $option!=2) {header('Location: index.php');}
    5. ... ?>
    6.  
    Требуется - чтобы файл срабатывал только по двум опциям, а в чистом виде кидал на index.php
    Результат - что есть опции, что нет опций - проверка заваливается и меня кидает на index.php

    Чего я спросонья не вижу?
     
  2. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Ты говоришь: "Если оно не равно один, или если не равно два". Но если оно равно один, то оно не может быть равно два! И наоборот. Попробуй, лучше, так:
    Код (Text):
    1. if ($option!="1" AND $option!="2")
    Мы говорим: "если оно не равно один и не равно два"
    В кавычки взял, чтобы не было преобразования типа из string в int
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?php
    2.  
    3. // Берем модуль числа для проверки
    4. $option = abs(intval($_GET['option']));
    5.  
    6. if($option && $option < 2)
    7.     header("Location: index.php");
    8.  
    9. ?>
     
  4. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Apple, * if(!$option || $option > 2)
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ах да, чёрт!
    Мне показалось при условии 1 или 2 переадресовывать.
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Кстати

    PHP:
    1. <?
    2.  
    3. $option = intval($_GET['option']);
    4.  
    5. switch($option) {
    6.     case 1: {
    7.         // ...
    8.    
    9.         break;
    10.     }
    11.  
    12.     case 2: {
    13.         // ...
    14.    
    15.         break;
    16.     }
    17.  
    18.     default:
    19.         header("Location: index.php");
    20. }
    21.  
    22. ?>
    23.  
    Так легче будет условия добавлять и их обработку :)
    Ну это дело автора.
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    =)
    PHP:
    1.  
    2. <?php
    3.  
    4. if (in_array($option, array(1,2)) === false)
    5. ...
    6.  
    7.  
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А если $option меньше нуля или с десятичной частью?

    Тогда уж
    if (!ctype_digit($option) OR $option < 1 OR $option > 2)
    ...

    А еще нужно проверить на существование через isset
     
  9. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Мне вариант со switch-case нравится
     
  10. Lopar

    Lopar Активный пользователь

    С нами с:
    18 янв 2009
    Сообщения:
    16
    Симпатии:
    0
    Мать-перемать, точно! После 12-часового рабочего будня проверка "ИЛИ" казалась столь естественной...
    Спасибо :)