За последние 24 часа нас посетили 49866 программистов и 1730 роботов. Сейчас ищут 735 программистов ...

Проверка с условиями if-else

Тема в разделе "PHP для новичков", создана пользователем Булат Азат улы, 27 сен 2017.

  1. Булат Азат улы

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

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    Здравствуйте. Увидел в одном сайте (заголовок "Проверки") интересный (новый для меня) вид проверки с помощью условия "if" (т.е. "иначе" просто пропускается):
    PHP:
    1. function(){
    2.     if (0 < $_FILES['file']['error']) die("Error: ".$_FILES['file']['error']);
    3.     if ($_FILES['file']['size'] < 1024 && $_FILES['file']['size'] > 1*1024*1024) die("От 1Кб до 1Мб.");
    4.    
    5.     //действия после проверки
    6. }
    Вроде, всё логично: код читается сверху вниз, и если условие не выполняется, то код дальше перестаёт выполняться. Если нет - идет дальше.
    Поставил это на свой код, так как таким образом код становится чище и понятнее, нежели вставнять условия в условия несколько раз. Вроде, когда проверял в первый раз - проверка работала. А теперь заметил, что не работает.

    Правильно ли делать такие проверки? И почему такой код у меня перестал работать (проверял только на размер файла)?
     
  2. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    А теперь посмотрите повнимательней на ваше условие: размер файла должен быть меньше 1024 И больше 1048576 одновременно. Такое условие никогда не выполнится, поменяйте местами знаки <>.
     
    Булат Азат улы нравится это.
  3. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Ему скорее всего нужно не знаки местами менять, а заменить && на ||
     
    Булат Азат улы нравится это.
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    мне такой подход лично не нравится
    например функцию возвращающую результат вы так не сделаете
    для простых линейных алгоритмов еще худо бедно пойдет.. но для более сложных.... использующих функции, ООП и прочее - не стоит
     
  5. Булат Азат улы

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

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    @Griffter, @Sergey_Tsarev, спасибо! Заменил на "или". Как-то случайно этот знак поставил. Всё работает.
    @ADSoft, а почему нельзя использовать в функциях, возвращающих результат?
    Сейчас я такие проверки использую при принятии файла и изменении размера с помощью сторонней функции (конечно, не в функции, а в условии). Так всё же работает:
    PHP:
    1. function resizeToHeight ($filename, $height, $outImg) {
    2.     $img = imagecreatefromjpeg($filename);
    3.     $origWidth = imagesx($img);
    4.     $origHeight = imagesy($img);
    5.     $ratio = $height / $origHeight;
    6.     $width = $origWidth * $ratio;
    7.     $new_image = imagecreatetruecolor($width, $height);
    8.     imagecopyresampled($new_image, $img, 0, 0, 0, 0, $width, $height, $origWidth, $origHeight);
    9.     $img = $new_image;
    10.     imagejpeg($img, $outImg, 75);
    11. }
    12. $types = array('image/gif', 'image/png', 'image/jpeg');
    13.  
    14. if (isset($_FILES['file']['tmp_name'])) {
    15.     if (0 < $_FILES['file']['error']) die("Error: ".$_FILES['file']['error']);
    16.     if (!in_array($_FILES['file']['type'], $types)) die("Только форматы изображений GIF, PNG, JPEG.");
    17.     if ($_FILES['file']['size'] < 10*1024 or $_FILES['file']['size'] > 10*1024*1024) die("От 10Кб до 10Мб.");
    18.    
    19.     $rasIsem = basename($_FILES['file']['name']);
    20.     $rasMiniIsem = str_replace('.jpg', '_mini.jpg', $rasIsem);
    21.     move_uploaded_file($_FILES['file']['tmp_name'], "images/".$rasIsem);
    22.    
    23.     resizeToHeight ("images/".$rasIsem, 200, "images/".$rasMiniIsem);
    24.    
    25.     echo "<span class='code'>&#60;img class='rasemUrta' src='images/".$rasMiniIsem."' height='200' alt='' title=''&#62;</span>";
    26. }
    В таком коде можно использовать подобную проверку?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Секцию else можно опускать в php, если при невыполненном условии ничего не нужно делать. Это нормально, обсуждать тут нечего вообще. @ADSoft наверное про die внутри функции. Функция должна либо возвращать код ошибки, либо бросать исключение. Вызывая функцию, я обычно не ожидаю, что она мне завершит процесс, поэтому не стоит этого делать. Если функция встретила ошибку и кинула исключение, а я его не поймал, процесс тоже завершится, но в логах будет запись "непойманное исключение такое-то, брошенное в строке такой-то", и стек вызовов, по которому я могу найти, что привело к ошибке. Если будет die - это нигде в логах не отразиться.
     
    Булат Азат улы нравится это.
  7. Булат Азат улы

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

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    @mkramer, всё понял, спасибо!