|
|
|
| Может все-таки кто-нибудь знает: когда передаются картинки через форму HTML в базу, может какой-нибудь переменной присвоить значение поля input type="file" name="photo", чтобы в базе хранились сами картинки, а не пути к ним? Мне очень нужно | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 11:55)
| | я же вам давал ссылку: загрузить файл на сервер, считать его в переменную и поместить в БД с типом поля blob | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 11:55)
| | Нет, так поступить нельзя - следует открыть файл, прочитать его содержимое в переменную, экранировать спец-символы, тогда можно помещать содержимое такой переменной в базу данных.
PS Вопросы, посвящённые базам данных лучше сразу размещать в разделе MySQL | |
|
|
|
|
|
|
|
для: cheops
(01.03.2006 в 14:24)
| | Так а без файла то совсем нельзя? | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 14:52)
| | Люди добрые!
Второй день мучаюсь - ничего не получается.
У меня через форму картинки попадают в базу данных, а потом выводятся оттуда. Вроде все работает, но проблема в том, что в базе хранятся не сами картинки, а пути к ним. Помогите советом.
В базу кладутся так:
$query = "INSERT INTO vsm_notebook (f_photo) VALUES
('$HTTP_POST_VARS[photo]')";
|
А достаются так:
$id = $_GET["id"];
$query = "SELECT * FROM vsm_notebook where f_id =" .$id;
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
$id = $row["f_id"];
$photo= $row["f_photo"];
}
|
Вывод в браузер:
<?if (!empty($photo))
{ print "<img src='".$photo."'></td>";
</tr>";}?>
|
Никак не пойму. Все про файл какой-то говорят | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 14:58)
| | тот файл (с картинкой), который вы выбираете через форму, надо открыть, прочитать, закрыть, а
то, что прочитали (бинарный код) занести в базу в поле BLOB. но для начала попытаться это
вывести в браузер, чтобы убедиться, что прочитано правильно. сейчас пойду пороюсь, где-то у
меня был такой скрипт. я уже давным-давно отказалась от такого метода хранения картинок.
скажите своим преподам, что вас неправильно учат :) | |
|
|
|
|
|
|
|
для: elenaki
(01.03.2006 в 15:28)
| | Я ему пыталась сказать, что так никто уже не делает. Он же настаивает на том, что все данные должны храниться в одном вместе.
Я ведь файл выбираю через форму. Название то у него какое будет?
Самое главное, что у меня и так все работает, только в базе лежат пути. | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 15:34)
| | а название там ни к чему. скрипт может открыть файл, прочитать содержимое в переменную и
закрыть файл, даже если на хостинге запрещена загрузка фоток (довольно часто на бесплатных).
вот так мы читаем файл в переменную:
<? include "config.inc.php";
ini_set("max_execution_time",999999);
// otkrivaem
$file = fopen($filename, "r"); ////тут имя поля с типом file, в котором выбирается картинка
// chitaem
$buffer = fread($file, filesize($filename));
// zakrivaem
fclose($file);
?>
|
а так вставляем в базу:
$buffer = addslashes($buffer);
$query = "INSERT INTO vsm_notebook (f_photo) VALUES ('$buffer')";
|
поле f_photo должно быть типа BLOB | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 15:34)
| | Не всё у Вас работает...
Если обычные значения обычных полей формы доступны через $_POST['поле'], то загружаемые на сервер файлы, доступны через $_FILES['поле']. Причем каждый элемент этого массива - это целая структура, описывающая файл, который пытаются загрузить.
$_FILES['userfile']['name'] - Оригинальное имя файла на компьютере клиента.
$_FILES['userfile']['type'] - Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif".
$_FILES['userfile']['size'] - Размер в байтах принятого файла.
$_FILES['userfile']['tmp_name'] - Временное имя, с которым принятый файл был сохранен на сервере.
$_FILES['userfile']['error'] - Код ошибки, которая может возникнуть при загрузке файла. Ключ ['error'] был добавлен в PHP 4.2.0
|
(из документации к php http://www.php.net/manual/ru/features.file-upload.php ) | |
|
|
|
|
|
|
|
для: Trianon
(01.03.2006 в 15:51)
| | Я делаю так. У меня поле type="file" name="photo", т.е. имя photo
$file = fopen($photo, "r");
$buffer = fread($file, filesize($photo));
fclose($file);
|
А он мне пишет
Warning: fread(): supplied argument is not a valid stream resource in ...
Warning: fclose(): supplied argument is not a valid stream resource in ...
|
Что ж не так то? | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 16:05)
| | то что открывать надо загруженный файл, а не поле из формы:
$file = fopen($_FILES['photo']['tmp_name'], "r");
|
| |
|
|
|
|
|
|
|
для: Loki
(01.03.2006 в 16:15)
| | Блин, та же фигня. Как еще можно попробовать? | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 16:05)
| | В форме должно быть что-то вроде
<form method=post enctype=multipart/form-data >
Photo: <input type=file name=photo />
<input type=submit />
|
А в обработчике формы:
$photo = $_FILES['photo']['tmp_name']);
//следующие три строки можно заменить на $buffer = file($photo);
$file = fopen($photo, "r");
$buffer = fread($file, filesize($photo));
fclose($file);
mysql_connect(...);
mysql_select_db(...)
$query = "INSERT INTO vsm_notebook (f_photo) VALUES('"
. mysql_escape_string($buffer) . "')";
mysql_query($query);
|
| |
|
|
|
|
|
|
|
для: Trianon
(01.03.2006 в 16:27)
| | Теперь моя фотка выводится вот так яШяа\0JFIF\0\0H\0H\0\0яб2Exif\0 И очень долго грузится | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 16:44)
| | Следовательно, в базу попала фотография, а не имя файла. Что и требовалось.
На сервер грузится долго? | |
|
|
|
|
|
|
|
для: Trianon
(01.03.2006 в 17:15)
| | :)) а у мя обратный вопрос! :) как записать путь к файлу в базу - тоетсь чтобы только ссылку выводить а не весь файл.. ну тоесть чтобы выводить картинку но в базе хранить толкьо ссылку на него! :)) я чёт сообразить совсем не могу 6)) | |
|
|
|
|
|
|
|
для: 10100100
(01.03.2006 в 19:17)
| | вообще-то это лучше отдельной веткой обсуждать.
BTW, в коментарии к коду я наврал.
Вместо //следующие три строки можно заменить на $buffer = file($photo);
следует читать //следующие три строки можно заменить на $buffer = file_get_contents($photo); | |
|
|
|
|
|
|
|
для: 10100100
(01.03.2006 в 19:17)
| | приблезительно так: (php)
if(stristr($_FILES['fimg']['type'],"image"))
{
|
записать в базу t_pic с полем Ident (autoincrement) выдернуть значение Ident ($ImageName) и записать
move_uploaded_file($_FILES['fimg'][tmp_name], DIR_TO_IMG."/".$ImageName)
|
вот и все | |
|
|
|
|
|
|
|
для: juliya
(01.03.2006 в 16:44)
| | просумировав все выше сказаное у меня кое-что получилось
файл index.php
<?
if(isset($_POST["submit"]))
{
if(stristr($_FILES['fimg']['type'],"image"))
{
$ff = $_FILES['fimg']['tmp_name'];
$handle = fopen($ff, "rb");
$contents = fread($handle, filesize($ff));
fclose($handle);
$link = mysql_connect(SERVER_NAME, DB_USER, DB_PASS)
or die("Could not connect : " . mysql_error());
mysql_select_db("test") or die("Could not select database");
$query = "INSERT INTO t_pic (b_Data, s_header) VALUES ('".mysql_escape_string($contents)."', '".$_FILES['fimg']['type']."')";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
}
}
$res = $ChatDB->SelectFromBase("select * from t_pic");
if(!$res)$RecordCount = 0; else $RecordCount = mysql_num_rows($res);
$MainText = "<table width=\"90%\"><tr>";
for($i = 0; $i < $RecordCount; $i++)
{
$id = mysql_result($res, $i, "Ident");
$MainText .= "<td><img src=\"test/img.php?id=$id\"></td>";
$MainText .= "</tr><tr>";
}
$MainText .= "</tr></table>";
$MainText .="<form method=post action=\"index.php?Act=test\" enctype=\"multipart/form-data\">
<input type=\"file\" name=\"fimg\">
<input type=\"submit\" name=\"submit\" value=\"Послать данные\">
</form>";
echo $MainText;
?>
|
и файл img.php
<?
include ("db.php");
$link = mysql_connect(SERVER_NAME, DB_USER, DB_PASS)
or die("Could not connect : " . mysql_error());
mysql_select_db("test") or die("Could not select database");
$id = $_GET["id"];
$query = "select * from t_pic where (Ident = $id)";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
header('Content-type: '.mysql_result($result,0, "s_header").' ');
print( mysql_result($result,0, "b_Data"));
/* Освобождаем память от результата */
mysql_free_result($result);
/* Закрываем соединение */
mysql_close($link);
?>
|
добавить хочу базу майскуеля из таблицы "test"
CREATE TABLE 't_pic' (
'Ident' int(11) NOT NULL auto_increment,
'b_Data' longblob NOT NULL,
's_header' varchar(10) NOT NULL default '',
PRIMARY KEY ('Ident')
) TYPE=MyISAM AUTO_INCREMENT=1 ;
|
и нормально работает (без библиотеки GDI) | |
|
|
|