Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Наиболее эффективный способ отправки картинок на web-сайт и добавления новой записи в базу данных
 
 автор: Степан   (15.06.2009 в 12:01)   письмо автору
 
 

Прошу Вашей помощи решить следующую проблему. На web - странице, основной функцией которой является добавление фотографий на сайт, имеются форма для добавления фото, форма для названия фото, кнопка добавить и скрытые формы содержащие информацию о фотографии для базы данных. PHP код добавляющий фото на сайт следующего содержания:
if (isset($_POST["MAX_FILE_SIZE"])) {
$tmp_file_name = $_FILES["file_upload"]["tmp_name"];
$dest_file_name = $_SERVER['DOCUMENT_ROOT'] . "/images/painting/" $_FILES["file_upload"]["name"];
$full_name = "images/painting/" .$_FILES["file_upload"]["name"];
move_uploaded_file($tmp_file_name,$dest_file_name);
}
?>
На этой же веб – странице есть модель серверного поведения Insert, которая добавляет в таблицу базы данных новую строку, содержащую такие сведения как id, title (название фото), fullname (имя файла, берущее свое значение из скрытой формы, содержащей переменную $full_name).
При нажатии на кнопку «добавить» фото копируется на web –сайт, в базу данных добавляется новая строка, но значение fullname (тип данных blob) в новой строке равно нулю. Подскажите что я мог сделал неправильно?

  Ответить  
 
 автор: Rolex   (15.06.2009 в 15:24)   письмо автору
 
   для: Степан   (15.06.2009 в 12:01)
 

Добрый день. В отличие от всех других полей, данные BLOB поля не хранятся непосредственно в записи таблицы. В записи таблицы хранится лишь идентификатор BLOB (BLOB_ID), а само тело BLOB хранится на отдельных страницах базы данных и доступ к ним осуществляется специальными функциями IB API.

Попробуйте изменить тип данных blob на text.

  Ответить  
 
 автор: Степан   (15.06.2009 в 16:04)   письмо автору
 
   для: Rolex   (15.06.2009 в 15:24)
 

>Добрый день. В отличие от всех других полей, данные BLOB поля не хранятся непосредственно в записи таблицы. В записи таблицы хранится лишь идентификатор BLOB (BLOB_ID), а само тело BLOB хранится на отдельных страницах базы данных и доступ к ним осуществляется специальными функциями IB API.
>
>Попробуйте изменить тип данных blob на text.

Попробовал, но результат остался прежним.

  Ответить  
 
 автор: Slo_Nik   (15.06.2009 в 16:50)   письмо автору
 
   для: Степан   (15.06.2009 в 12:01)
 

приведи, пожалуйста, код формы и как ты делаешь запрос к базе данных

  Ответить  
 
 автор: Степан   (16.06.2009 в 09:07)   письмо автору
 
   для: Slo_Nik   (15.06.2009 в 16:50)
 

>приведи, пожалуйста, код формы и как ты делаешь запрос к базе данных

код формы:

<form action="<?php echo $editFormAction; ?>" method="POST" enctype="multipart/form-data" name="file_upload" id="file_upload">
<p>
<input name="MAX_FILE_SIZE" type="hidden" id="MAX_FILE_SIZE" value="655360" />
</p>
<p align="left">Файл: </p>
<p align="left">
<label>
<input name="file_upload" type="file" id="file_upload" />
<br />
<br />
Название:<br />
<br />
</label>
<input name="title2" type="text" id="title2" />
</p>
<p align="left">
<label>
<input type="submit" name="Submit" value="Отправить файл на сервер" />
</label>
<input name="id2" type="hidden" id="id2" value="<?php echo $row_pictures['id']; ?>" />
<input name="fullname2" type="hidden" id="fullname2" value="<?php echo $full_name; ?>" />
<input name="nameid2" type="hidden" id="nameid2" value="<?php echo $row_name['id']; ?>" />
</p>
<input type="hidden" name="MM_insert" value="file_upload">
</form>


Insert Record:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "file_upload")) {
$insertSQL = sprintf("INSERT INTO painting (id, title, fullname, nameid) VALUES (%s, %s, %s, %s)",
GetSQLValueString($_POST['id2'], "int"),
GetSQLValueString($_POST['title2'], "text"),
GetSQLValueString($_POST['fullname2'], "text"),
GetSQLValueString($_POST['nameid2'], "int"));

mysql_select_db($database_Guest, $Guest);
$Result1 = mysql_query($insertSQL, $Guest) or die(mysql_error());
}

  Ответить  
 
 автор: Trianon   (16.06.2009 в 11:48)   письмо автору
 
   для: Степан   (16.06.2009 в 09:07)
 

очевидно скрытое поле формы fullname2 является пустым в момент отправки формы.

PS. фрагменты html и php-кода принято брать в теги [code] затем, чтоб текст было легче читать.
Ы?

  Ответить  
 
 автор: Степан   (16.06.2009 в 12:18)   письмо автору
 
   для: Trianon   (16.06.2009 в 11:48)
 

>очевидно скрытое поле формы fullname2 является пустым в момент отправки формы.
>
>PS. фрагменты html и php-кода принято брать в теги [code] затем, чтоб текст было легче читать.
>Ы?


Очевидно, но почему оно пустое?

  Ответить  
 
 автор: Trianon   (16.06.2009 в 12:42)   письмо автору
 
   для: Степан   (16.06.2009 в 12:18)
 

Очевидно потому что соответствующей переменной никто не присвоил значения.
Включите вывод нотайсов - убедитесь сами.
error_reporting(E_ALL|E_NOTICE);

  Ответить  
 
 автор: Степан   (16.06.2009 в 12:57)   письмо автору
 
   для: Trianon   (16.06.2009 в 12:42)
 

Извините, но разве строка
$full_name = "images/painting/" .$_FILES["file_upload"]["name"];
не присваивает значение переменной?

  Ответить  
 
 автор: Trianon   (16.06.2009 в 13:12)   письмо автору
 
   для: Степан   (16.06.2009 в 12:57)
 

возможно и присваивает. Но из уже принятых данных формы ($_FILES - массив принятых через форму файлов)
А у Вас эта переменная используется при создании формы - то есть всяко до момента отправки данных этой формой.

  Ответить  
 
 автор: Степан   (17.06.2009 в 10:19)   письмо автору
 
   для: Trianon   (16.06.2009 в 13:12)
 

Я понял Вашу мысль. Но подскажите, пожалуйста, каким образом можно получить данные об имени файла для внесения в базу данных при отправке его на сервер?

  Ответить  
 
 автор: Trianon   (17.06.2009 в 11:57)   письмо автору
 
   для: Степан   (17.06.2009 в 10:19)
 

Получить можно из массива $_FILES[]
Правда несовсем понятно, зачем они на сервере (в БД или нет - неважно) нужны...
Но тем не менее клиентское имя файла можно получить из этого массива всяко.

  Ответить  
 
 автор: Петр   (17.06.2009 в 12:24)   письмо автору
 
   для: Степан   (17.06.2009 в 10:19)
 


Оригинальное имя файла на компьютере клиента
$_FILES['userfile']['name']
Mime-тип файла, в случае, если браузер предоставил такую информацию
$_FILES['userfile']['type']
Размер в байтах принятого файла
$_FILES['userfile']['size']
Временное имя, с которым принятый файл был сохранен на сервере
$_FILES['userfile']['tmp_name']
Код ошибки, которая может возникнуть при загрузке файла
$_FILES['userfile']['error']


Отправляем файл на сервер, формируем для него имя (например UNIX-метка времени - количество пройденых секунд с 01.01.1970), записываем информацию о нем в БД. Если планируется добавлять много файлов одновременно или предусмотрена загрузка разными пользователями, то к метке времени прибавить номер.

Другой способ:
Сначала загружаем файл, записываем информацию о файле в БД, потом определяем ID последней записи, а затем уже перемещаем файл из временной директории в нужную (под нужными именем ID)

  Ответить  
 
 автор: Степан   (23.06.2009 в 09:42)   письмо автору
 
   для: Петр   (17.06.2009 в 12:24)
 

Спасибо всем за помощь! Вроде бы разобрался.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования