2010-07-21 2 views
2

У меня есть следующая HTML-форма. Как вы можете видеть, это сохранение файла.Хранить файлы в базе данных MySQL из HTML-формы

<form enctype="multipart/form-data" action="welcome.php" method="post 
"onsubmit="return validateFormOnSubmit(this)"> 
<b>Name</b><br/> <input type="text" name="fname" /> 
<br/> 
<b>Description</b><br/> <TEXTAREA NAME="description" COLS=40 
ROWS=6></TEXTAREA><br/><br/> <input type="hidden" name="MAX_FILE_SIZE" value="100000"/> 

<b>Upload Picture</b><br/> <input name="uploadedfile" type="file" /><br /> 
<b>Latitude</b><br/><INPUT name="lat" id ="lat" /><br/> 
<b>Longitude</b><br/><INPUT  name="lng" id ="lng" /><br/> <input type="submit" /> 

Этот файл обрабатывается как так ...

$target_path = "uploads/"; 

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

Остальная часть информации хранится в базе данных SQL. Я хотел бы сохранить файл, загруженный в эту базу данных. Как мне это сделать через php-файл, на который отправляется информация? Я вставляю его как ..

$query = "INSERT INTO <TABLE> (name, message, lat, lng, type)VALUES ('".$title."', '".$des."', '".$lati."', '".$long."', '".$type."')"; 
    $q=mysql_query($query) or die(mysql_error()); 
+0

Я не достаточно хорошо с MySQL, чтобы дать развернутый ответ, так что я просто хочу скажите: BLOBS! http://dev.mysql.com/doc/refman/5.0/ru/blob.html – FrustratedWithFormsDesigner

+6

SQL Injection Атака с правого носа, cap'n! – Pointy

+0

@Pointy Я знаю, я знаю. – Skizit

ответ

5

Если вы определенно хотите, чтобы вставить файл HTML в вашей БД MySQL, Есть два способа:

  1. Используйте тип BLOB для сохранения файла.

  2. Преобразуйте свой файл в строку, так же как и HTML, и сохраните ее в поле TEXT.

Однако моя рекомендация состояла в том, чтобы хранить файлы на файловой системе сервера, а не в базе данных.

+0

Если он сохранит файл в блобе, ему придется впоследствии преобразовать эту строку в изображение (смотря на его код, файл имеет изображение с надписью для надписи) – Luke

+0

Моя ошибка, я думал, что он хочет сохранить html-файл сам. Вы абсолютно правы. –

1

Вы имеете в виду содержимое загружаемого файла?

Довольно много, как показано ниже:

// Obtain the file content (add error handling here...) 
$contents = file_get_contents($_FILES['uploadedfile']['tmp_name']); 
// Escape all special characters 
$contents = mysql_real_escape_string($contents) 
// Do the insert 
$query = 'INSERT INTO <TABLE> (....) VALUES ("' . $contents . '")'; 
$q=mysql_query($query) or die(mysql_error()); 

Edit: Марвин прав, его file_get_contents.

+0

Поле в таблице: если это будет HTML: TEXT или LONGTEXT должно быть в порядке. Я бы советовал добавлять проверки повсюду: длина файла, содержимого и т. Д. Файл всегда содержит неизбежные риски. – Blizz

+0

Как говорили другие комментаторы, используйте blob для этого, если файл не будет гарантированно меньше 255 символов длинный. TEXT тоже может работать, зависит от формата файла. –

+0

Капля и текст имеют одинаковую максимальную длину IIRC. Разница в том, что blob позволяет бинарный контент. Я посоветовал обычный тип TEXT, так как было указано, что это будет HTML. – Blizz

3

Вы можете сделать это на буксире.

  1. Копирование файла в файловой системе и сохранение его путь в базе данных

  2. Сохранение файла в виде двоичных данных в базе данных.

    $data = file_get_contents($_FILES['photo']['tmp_name']); 
    $data = mysql_real_escape_string($data); 
    

, а затем сохранить данные в поле (вам нужно создать это поле как BLOB)

+0

Как я мог бы извлечь эти данные, например, если это было изображение с фотографией в HTML? – Skizit

+0

Вы можете создать файл после получения данных из базы данных, вам необходимо записать эти данные в файл. Или http://stackoverflow.com/questions/1330138/php-5-how-to-write-utf-8-binary-data-image-to-output – marvin

Смежные вопросы