Загрузка файлов в базу PHP

Discussion in 'PHP' started by h1vs2, 20 Jan 2009.

  1. h1vs2

    h1vs2 New Member

    Joined:
    11 Jan 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    Доброй ночи, пишу курсач - магазин на PHP.
    Собственно не получается загрузить картинку в базу.

    Вот форма:

    PHP:
    <? include ("blocks/db.php"); ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
    <title>Страница добавления фирм</title>
    <link href="style.css" rel="stylesheet" type="text/css">

    </head>
    <body background="img/bg.jpg">
    <table width="810" border="0" align="center" class="main_table" background="img/small_bg.png">
    <? include("blocks/header.php"); ?>
      <tr>
        <td><table width="100%" border="0" class="sab_table">
          <tr>
           <? include("blocks/left.php"); ?> 
            <td width="482" valign="top" align="left" class="type_td">
         
           $result=mysql_query("SELECT name,id FROM categor");
           $myrow=mysql_fetch_array($result);
           $count=mysql_num_rows($result);
           echo "<h3 align='center'>Добавление фирмы</h3>";

    <form name='form1' method='post' action='add_firm.php' enctype='multipart/form-data'>
     <p>Выберите категорию для фирмы<br><select name='cat' size='$count'>";
               <?
             do
             {
             printf ("<option value='%s'>%s</option>",$myrow["id"],$myrow["name"]);
    }
    while ($myrow=mysql_fetch_array($result));     
    echo "</select></p>"; 
             ?>
             <p>
               <label>Введите название фирмы<br>
               
                 <input type="text" name="name" id="name">
                 </label>
             </p>
             <p>
               <label>Загрузите картинку для фирмы<br>
               <input type="file" name="image">
               </label>
             </p>
            <p align="center">
               <label>
               <input type="submit" name="submit" id="submit" value="Добавить фирму">
               </label>
             </p>
            </form>
           <p>&nbsp;</p>        </td>
          </tr>
        </table></td>
      </tr>
    <?  include ("blocks/footer.php");        ?>  
    </table>
    </body>
    </html>
    А вот сам обработчик:
    PHP:
    <? include ("blocks/db.php"); 
    if (isset(
    $_POST['name']))       
    {
    $name $_POST['name']; 

    if (
    $name == ''
    {
    unset(
    $name);
    }  
    }
    if (isset(
    $_POST['cat']))      {$cat $_POST['cat']; if ($cat == '') {unset($cat);}}
    if(isset(
    $_FILES['image']['name']))
    {
    $tmpimg=UPLOADEDFILES.$_FILES['image']['name'];
    $fp=fopen($tmpimg,"rb");
    $image=fread($fp,filesize($tmpimg));
    $image=addslashes($image);
    fclose($fp);
    }
    else
    {
    unset(
    $image);
    }
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
    <title>Обработчик</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    </head>


    <body background="img/bg.jpg">
    <table width="810" border="0" align="center" class="main_table" background="img/small_bg.png">
    <? include("blocks/header.php"); ?>
      <tr>
        <td><table width="100%" border="0" class="sab_table">
          <tr>
           <? include("blocks/left.php"); ?> 
            <td width="482" valign="top" align="left" class="type_td">
            <?
    if (isset($name) && isset($cat))
    {
    echo $image;
    $result = mysql_query ("INSERT INTO firma (name,cat,image) VALUES ('$name','$cat','$image')");

    if ($result == 'true') {echo "<p>Фирма успешна добавлена</p>";}
    else {echo "<p>Фирма не добавлена</p>";}
    }         
    else 

    {
    echo "<p>Вы ввели не всю информацию, поэтому фирма в базу не может быть добалена.</p>";
    }
     ?>
    </td>
          </tr>
        </table></td>
      </tr>
    <!--Подключаем нижний графический элемент-->  
    <?  include ("blocks/footer.php"); ?>  
    </table>
    </body>
    </html>
    Пробывал на стандарнтое устройсво вывести :
    PHP:
    echo implode("",file($_FILES['image']['name']));
    Тоже пусто.

    Подскажите пожалуйста
     
    #1 h1vs2, 20 Jan 2009
    Last edited: 20 Jan 2009
  2. kolpeex

    kolpeex Member

    Joined:
    17 Feb 2008
    Messages:
    21
    Likes Received:
    8
    Reputations:
    0
    Путь к файлу, который был загружен - $_FILES['image']['tmp_name']
     
  3. h1vs2

    h1vs2 New Member

    Joined:
    11 Jan 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    Блин, спасибо огромное, туплю ночью
     
  4. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    ты хоть картинку в BLOB поля сохраняешь?
     
  5. MuXaJIbI4

    MuXaJIbI4 Member

    Joined:
    20 Nov 2008
    Messages:
    66
    Likes Received:
    7
    Reputations:
    0
    Сами картинки в базе вообще лучше не хранить а только имя напрмер ее. А какртинку в оотдельной папке.
     
  6. kolpeex

    kolpeex Member

    Joined:
    17 Feb 2008
    Messages:
    21
    Likes Received:
    8
    Reputations:
    0
    Ну, почему же? Вполне нормально, так бэкап легче делать. По сути БД тот же файл на диске.
     
  7. Trieg

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

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    при таком раскладе выше нагрузка на бд да и общая производительности системы наверно упадет.. хотя я сам подобное не делал (предпочитаю в бд хранить только информацию о файле), так что знаю только по наслышке..
    ЗЫ: например будет оч хренова если бд расположена не на том же компе где сам сайт.
     
  8. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    именно

    так отдавать же через PHP придется.
     
  9. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Trieg всё верно говорит, просто сделаем отступление, что если это скажем аватарка, или картинка в подписи, размер которой не превышает 10Кб, то потери будут не существенны (особенно если кеширование хорошо продумано)... Зато удобство переноса - весьма ощутимое...
     
  10. MuXaJIbI4

    MuXaJIbI4 Member

    Joined:
    20 Nov 2008
    Messages:
    66
    Likes Received:
    7
    Reputations:
    0
    А ыт что если куда то будешь переносить портал, то обойдешься только базой. Все равно скрипты и все переносить. Потом если у тебя будет не маленькая нагрузка, то лишнии запросы к базе не желательны.
     
  11. kolpeex

    kolpeex Member

    Joined:
    17 Feb 2008
    Messages:
    21
    Likes Received:
    8
    Reputations:
    0
    Правильно. Все зависит от поставленной задаче и от окружающей среды.
     
  12. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Какого хрена в форме у тебя SQL запрос?
    Это называется не формой, а говном позорным.
     
  13. GuD-ok

    GuD-ok New Member

    Joined:
    14 Nov 2008
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    А я думал где делают таких людей делают(которые картинки в БД хранят).А их оказывается в ВУЗах учат(((( Картинки >10 Кб ставят базу раком за 10 минут. А эсли это интернет магазин(previev + fullsize). То картинки в БД для тебя не вариант.
     
  14. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Не умничай и не утрируй... По-твоему BLOB тип был введён на потеху всем? Раком базу можно поставить и одним селектом без всяких картинок. Всё зависит от места произрастания рук и коэффициента их кривизны... Кеширование для кого было придумано?
     
  15. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Да не партесь вы, этот интернет-магазин для универа, для реального магазина его все равно никто юзать не будет, ибо тут ппц код.

    Преподам код показывать если придется, то переделывай. Я бы такое не принял.
     
  16. GuD-ok

    GuD-ok New Member

    Joined:
    14 Nov 2008
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    Что такое BLOB 90% таких умельцев не слышало.А настройка кэширования это вообще отдельная история, с которой вообще редко кто нормально справляется.

    +BLOB юзает больше памяти. http://phpclub.ru/mysql/doc/storage-requirements.html + память самого php ,на нагруженном проекте эти копейки выйдут раком .Да и на ненагруженом тоже.

    Правда memcached опять таки излечит частично.

    Да и не видел я примеров такой работы на практике.Если есть с удовольствием гляну.


    А на месте препода я бы не принял.
     
    #16 GuD-ok, 20 Jan 2009
    Last edited: 20 Jan 2009
  17. h1vs2

    h1vs2 New Member

    Joined:
    11 Jan 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    Мдец, обосрали, как могли, да храню в блобе, ибо для курсача мне так удобней, о нагрузке в базе и о хранении только ссылок на картинки, тоже знаю, но сейчас мне оно не надобно.
    Учусь я в коледже, не в универе, решил попробывать.

    2 nerezus, я понимаю, ты умный и знающий человек, но зачем срать, мог бы например подкинуть де что подчитнуть, или как надо...

    Вообщем, мда народ