За последние 24 часа нас посетили 49790 программистов и 1757 роботов. Сейчас ищут 787 программистов ...

Форма. Файл. POST. Ошибка.

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

  1. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    Т. е. точнее файл на форме есть, а выбирается он не всегда. И тогда, когда он не выбирается, генерится предупреждение. Вопрос в том как правильно обработать эту ситуацию. Как в букваре. Вот...?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    if (!isset($_FILES["file"]["tmp_name"]))
     
  3. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    Это понятно.
    Попытаюсь объяснить подробнее. При отправке формы с не выбранным файлом он(пхп):
    1 Делает варнинг No file uploaded.
    2 Не перекидывает на выставленный Location
    При выборе файла все работает ОК.
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Судя по написанному выше -- не верю.
     
  5. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    if($mode!='del'){
    if (($_FILES['pic']['size']!=0))
    {
    //Обработка если была загрузка
    }
    //Обработка еcли не было
    }
    header("Location: ".$CFG['www_root']."/poster/");

    Я может не понял, я просто проверяю size вместо tmp_name(Или в проверке tmp_name сокрыт некий сакральный смысл?). Объясните пожалуйста.

    зы Забыл. С Новым Годом.


    зы Еще там в ['file']['error'] - ошибка UPLOAD_ERR_NO_FILE но так собсно и предполагалось - файл может быть а может нет
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    heapKiller
    Хотя я тоже был не прав. Смотря какая форма:
    Если enctype не указан и файл не загружался, то ошибок быть не каких не должно. Массив должен быть пустым.
    Если enctype="multipart/form-data" и файл не загружался то массив будет таким:
    Код (Text):
    1.  
    2. Array
    3. (
    4.     [file] => Array
    5.         (
    6.             [name] =>
    7.             [type] =>
    8.             [tmp_name] =>
    9.             [error] => 4
    10.             [size] => 0
    11.         )
    12.  
    13. )
    Очень странно, что if (($_FILES['pic']['size']!=0)) выполняется. Header не отсылается, оттого, что выскочила ошибка, а следовательно, вывелся текст в браузер.

    Могу только посоветовать подробней отследить:
    1) Что приходит в массиве
    2) Названия форм и путь в массиве
     
  7. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    Форма именно такая.
    В массиве приходит именно то, что Вы написали.
    Я именно и спрашиваю как такую ситуацию "красиво" отработать. )
    Т. е. пользователь редактирует параметры среди которых есть один с типом файл, который он может выбрать, а может - нет. Хочет поменять- выбирает, не хочет - не меняет. Как эту еррор убить?
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я всегда делал так:
    if (!empty($_FILES["file"]["name"])) {
    обработка
    }
     
  9. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    Хорошо. И что делать в случае когда empty == true? Мне нужно чтоб он выводил нужную мне локацию. А сейчас вылетает ошибка что file not uploaded.
     
  10. egrik

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

    С нами с:
    22 дек 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Voronezh
    header('Location:site.ru/error_uploaded');
     
  11. блин. А поле error в массиве $_FILES для кого?
     
  12. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    флоппик
    Поверь мне. Моя материлка гораздо длинней и шершавей. (А как еще отвечать на "<Матные слова>"?)

    Но специально для танкистов и не закончивших праздновать: про error я писал в 5 от начала посте (3 моем). Так и должно быть. Вопрос в том. почему он выводит мне сообщение об этом в браузер а не перекидывает на нужный мне location.

    зы забыл совсем. вопрос решен. Тема закрыта.