Аватары, хранящиеся в бд

Discussion in 'PHP' started by Дикс, 8 May 2006.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Как лучше сделать - закачивать аватары в спецпапку форума или сохранять их в базе?
    Попробовал сделать форму
    <form action="блаблабла" method='POST' enctype="multipart/form-data" >
    <input type='file' name='useravatar' /></td>

    форма отправляет данные, затем

    $useravatar = $HTTP_POST_VARS['useravatar']; // line 27
    и значение просто добавляется в БД

    Но при выполнении скрипта вываливается:

    Notice: Undefined index: useravatar in z:\home\localhost\www\dronix6\register.php on line 27

    и в базу ничего не добавляется.

    Столбец в базе:
    u_avatar mediumblob BINARY
    значение для юзера:
    [BLOB - 0 Bytes]

    Почему андефайнед индекс и может стоит просто сохранять их в папку? :confused:
     
  2. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    1) хронить аватары в базе все равно что на катерах спортивных в канистрах нефть через континенты перевозить =))
    2) все данные из полей типа file пишутся не в $_POST а в $_FILES, т.е.
    $useravatar = $_FILES['useravatar'];
     
    _________________________
    1 person likes this.
  3. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    пасиба :)
    а я всегда юзаю длинные прототипы $_post или гет - $http_get_vars['']
    привык уже к ним. мне стоит перейти на короткие, как у тебя?

    И ещё вопрос:
    если я буду заливать авики в папку, мудро ли будет затем прочитать содержимое авы
    в массив и проверить его на наличие текста <? или <script ?
     
  4. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    ну... положим не только на эти, их можно еще и зашифровать... вообщем поле для экспериментов.
    смотря как ты используешь эти файлы - лучше перестраховаться, и отсеять
     
  5. virgoz

    virgoz Elder - Старейшина

    Joined:
    16 Sep 2004
    Messages:
    151
    Likes Received:
    28
    Reputations:
    15
    Для этого есть специальная функция по проверке содержимого файла. Не помню правда какая.
     
  6. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    лол, ребята. Вы извените, не хочу никого обидеть но действительно смешно =)
    Делаешь
    $img=getimagesize($_FILES['useravatar']);
    и получаешь массив в переменную $img только в том случае, если файл является картинкой. В массив пишется инфа о файле. Графический тип, глубина цвета, если не изменяет память, размеры, атрибуты для тега <img> и другое. Если в нем присутствует что-то типа <? или <script то функция вернет 0, так как это уже не графический файл. Т.е. делаем
    PHP:
    $img=getimagesize($_FILES['useravatar']);
    if(
    $img){
    или
    PHP:
    $img=getimagesize($_FILES['useravatar']);
    if(
    is_array($img)){
    Но первый способ более оптимальный.
    Короче вот... http://ru.php.net/manual/ru/function.getimagesize.php
    Да и вообще любые ответы на любые вопросы можно найти в мане. просто надо научится им пользоваться.

    Насчет $_POST и $HTTP_POST_VARS... насколько я знаю - разницы нет. Переменные автоматом создаются и теб и другие. Но я привык к короткому обозначению. Он более удобный и короткий и не мусорит код.

    А читать файл в массив дабы проверить его на наличие подобных символов вообще глупо. Подумай сам, как эти скрипты будут исполняться, если ты файл заливаешь к себе на сервак? Если, конечно, у тебя апачу или другому веб-серверу не указано, что он должен запускать php для обработки графики =)

    2 Talisman
    нет слова "вообщем". Есть слово "вообще" и "в общем" =)) Кстати, сам долго путал =))
     
    _________________________
    1 person likes this.