PDA

Просмотр полной версии : Загрузка файлов в базу PHP


h1vs2
20.01.2009, 04:52
Доброй ночи, пишу курсач - магазин на 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>
А вот сам обработчик:
<? 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>

Пробывал на стандарнтое устройсво вывести :
echo implode("",file($_FILES['image']['name']));
Тоже пусто.

Подскажите пожалуйста

kolpeex
20.01.2009, 05:22
Путь к файлу, который был загружен - $_FILES['image']['tmp_name']

h1vs2
20.01.2009, 05:46
Блин, спасибо огромное, туплю ночью

groundhog
20.01.2009, 10:38
ты хоть картинку в BLOB поля сохраняешь?

MuXaJIbI4
20.01.2009, 11:40
Сами картинки в базе вообще лучше не хранить а только имя напрмер ее. А какртинку в оотдельной папке.

kolpeex
20.01.2009, 11:41
Ну, почему же? Вполне нормально, так бэкап легче делать. По сути БД тот же файл на диске.

Trieg
20.01.2009, 12:16
при таком раскладе выше нагрузка на бд да и общая производительности системы наверно упадет.. хотя я сам подобное не делал (предпочитаю в бд хранить только информацию о файле), так что знаю только по наслышке..
ЗЫ: например будет оч хренова если бд расположена не на том же компе где сам сайт.

nerezus
20.01.2009, 12:23
Сами картинки в базе вообще лучше не хранить а только имя напрмер ее. А какртинку в оотдельной папке. именно

Ну, почему же? Вполне нормально, так бэкап легче делать. По сути БД тот же файл на диске. так отдавать же через PHP придется.

groundhog
20.01.2009, 12:24
Trieg всё верно говорит, просто сделаем отступление, что если это скажем аватарка, или картинка в подписи, размер которой не превышает 10Кб, то потери будут не существенны (особенно если кеширование хорошо продумано)... Зато удобство переноса - весьма ощутимое...

MuXaJIbI4
20.01.2009, 12:45
А ыт что если куда то будешь переносить портал, то обойдешься только базой. Все равно скрипты и все переносить. Потом если у тебя будет не маленькая нагрузка, то лишнии запросы к базе не желательны.

kolpeex
20.01.2009, 12:50
Правильно. Все зависит от поставленной задаче и от окружающей среды.

nerezus
20.01.2009, 13:40
Вот форма: Какого хрена в форме у тебя SQL запрос?
Это называется не формой, а говном позорным.

GuD-ok
20.01.2009, 14:12
А я думал где делают таких людей делают(которые картинки в БД хранят).А их оказывается в ВУЗах учат(((( Картинки >10 Кб ставят базу раком за 10 минут. А эсли это интернет магазин(previev + fullsize). То картинки в БД для тебя не вариант.

groundhog
20.01.2009, 14:33
А я думал где делают таких людей делают(которые картинки в БД хранят).А их оказывается в ВУЗах учат(((( Картинки >10 Кб ставят базу раком за 10 минут. А эсли это интернет магазин(previev + fullsize). То картинки в БД для тебя не вариант.
Не умничай и не утрируй... По-твоему BLOB тип был введён на потеху всем? Раком базу можно поставить и одним селектом без всяких картинок. Всё зависит от места произрастания рук и коэффициента их кривизны... Кеширование для кого было придумано?

nerezus
20.01.2009, 15:53
Да не партесь вы, этот интернет-магазин для универа, для реального магазина его все равно никто юзать не будет, ибо тут ппц код.

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

GuD-ok
20.01.2009, 15:54
Не умничай и не утрируй... По-твоему BLOB тип был введён на потеху всем? Раком базу можно поставить и одним селектом без всяких картинок. Всё зависит от места произрастания рук и коэффициента их кривизны... Кеширование для кого было придумано?

Что такое BLOB 90% таких умельцев не слышало.А настройка кэширования это вообще отдельная история, с которой вообще редко кто нормально справляется.

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

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

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


А на месте препода я бы не принял.

h1vs2
23.01.2009, 07:32
Мдец, обосрали, как могли, да храню в блобе, ибо для курсача мне так удобней, о нагрузке в базе и о хранении только ссылок на картинки, тоже знаю, но сейчас мне оно не надобно.
Учусь я в коледже, не в универе, решил попробывать.

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

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