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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Загрузка имен файлов в БД

Сообщения:  [1-10]   [11-20] 

 
 автор: Slo_Nik   (24.10.2011 в 14:21)   письмо автору
 
   для: kapitalist   (24.10.2011 в 12:04)
 

если Вы хотите оригинальное имя, то зачем Вам путь к файлу, потом "original" и ещё имя загружаемого файла?
получите расширение файла, а имя можно сформировать так

<?php 
$ext_img 
strtolower(strrchr($_FILES['userfile']['name'],"."));// расширение отдельного изображения
$name_new date("YmdHis"time()).$ext_img;// новое имя изображения
?>

если загружаете несколько изображений, то используйте цикл for.
в запросе у вас только одно поле `file`, так как Вы хотите записать в Базу несколько имён?

  Ответить  
 
 автор: Lotanaen   (24.10.2011 в 12:23)   письмо автору
 
   для: kapitalist   (21.10.2011 в 19:41)
 

а мой вариант разве не рабочий?
а как вы узнаете к какой записи board соотвествует файл?
что вы в цикле foreach делаете?
тип файла для надежности наверное лучше определять функцией GetImageSize()

  Ответить  
 
 автор: kapitalist   (24.10.2011 в 12:04)   письмо автору
 
   для: Slo_Nik   (22.10.2011 в 12:10)
 

Я просто хочу чтобы имя файла было уникальным...
Я конечно попробую написать как вы сказали, но как-то запись в БД мне так и не удалось сделать!

  Ответить  
 
 автор: Slo_Nik   (22.10.2011 в 12:10)   письмо автору
 
   для: kapitalist   (21.10.2011 в 19:41)
 

а зачем Вы имя файла берёте из массива $_POST ($name) ?
Ввам надо брать имя файла из массива $_FILES ($_FILES['userfile']['name']).
Или не так....
У Вас есть переменная $name получаемая из $_POST и потом Вы в цикле foreach создаёте ещё $name
сделайте в цикле foreach($good_name as $key => $value) и далее замените $name на $value
Да и получением имени файла Вы что то намудрили.... Я так понял, что Вы не собираетесь менять имя файла, а только что то добавить, так зачем выдирать откуда то имя файла и расширение? не проще ли использовать $_FILES['userfile']['name'] ?

  Ответить  
 
 автор: kapitalist   (21.10.2011 в 19:41)   письмо автору
 
   для: kapitalist   (20.10.2011 в 14:25)
 

Вот получается такой код:
<?php 
include '../blocks/bd.php';
if (!empty(
$_POST['city'])) $city $_POST['city'];
if (!empty(
$_POST['pets'])) $pets $_POST['pets'];
if (!empty(
$_POST['animals'])) $animals $_POST['animals'];
if (!empty(
$_POST['aniyID'])) $anyID $_POST['anyID'];
if (!empty(
$_POST['price'])) $price $_POST['price'];
if (!empty(
$_POST['torg'])) $torg $_POST['torg'];
if (!empty(
$_POST['tualet'])) $tualet $_POST['tualet'];
if (!empty(
$_POST['pitanie'])) $pitanie $_POST['pitanie'];
if (!empty(
$_POST['mesto'])) $mesto $_POST['mesto'];
if (!empty(
$_POST['phone'])) $phone $_POST['phone'];
if (!empty(
$_POST['email'])) $email $_POST['email'];
if (!empty(
$_POST['name'])) $name $_POST['name'];
if (!empty(
$_POST['login'])) $login $_POST['login'];
if (!empty(
$_POST['title'])) $title $_POST['title'];
if (!empty(
$_POST['description'])) $description $_POST['description'];


$result mysql_query("SELECT id FROM animals WHERE animals='$animals'",$db);
$myrow mysql_fetch_assoc($result);
if (empty(
$myrow['id'])) {
$result1 mysql_query ("INSERT INTO animals (pets,animals) VALUES ('$pets','$animals')");
}



$path_to_files 'photo/'// путь для сохранения файлов
// если у нас несколько полей userfile[],
// отметаем те, в которые ничего не было выбрано
$good_name array_filter($_FILES['userfile']['name']);
if (
sizeof($good_name) != 0) { // если массив файлов не пустой
   
foreach ($good_name as $key => $name) {
      
$type =     $_FILES['userfile']['type'][$key];
      
$tmp_name $_FILES['userfile']['tmp_name'][$key];
      
$size =     $_FILES['userfile']['size'][$key];
      
// эта функция проверяет был ли загружен файл во временную директорию php
      
if (!is_uploaded_file($tmp_name)) {
         echo 
"An error happened while loading. Failed.";
         continue;
      }
      
// выковыриваем имя и расширение файла -
      
$file_ext substr($namestrrpos($name"."));
      
// - это может понадобиться, например, для сохранения в базу данных
      
$file_name substr($name0strrpos($name"."));
      
// делаем реальный путь в файловой системе
      
$real_path realpath($path_to_files);
      
// создаем в нашей директории временный файл с уникальным именем,
      
$temp_file_name tempnam($real_path"UPLF");
      
// делаем новое, более привлекательное, имя файла для хранения на сервере
      
$file_name $temp_file_name."original.".strtolower($file_ext);
      
// переносим загруженный временный файл в файл со сделанным нами уникальным именем
      
if (move_uploaded_file($tmp_name$file_name)) {
         echo 
"Saved!";
         
unlink($temp_file_name); // удаляем временный файл
      
}else {
         echo 
"Failed!";
         continue;
      }
   }
}else {
   echo 
"No files were loaded.";
}




if (isset(
$pets$title))
{
 
$result2 mysql_query ("INSERT INTO board (`title`, `city`, `pets`, `animals`, `anyID`, `price`, `torg`, `tualet`, `pitanie`, `mesto`, `email`, `name`, `login`, `file`, `description`)
 VALUES 
 ('"
mysql_real_escape_string($title) ."',
  '"
mysql_real_escape_string($city) ."',
  '"
mysql_real_escape_string($pets) ."',
  '"
mysql_real_escape_string($animals) ."',
  '"
mysql_real_escape_string($anyID) ."',
  '"
mysql_real_escape_string($price) ."',
  '"
mysql_real_escape_string($torg) ."',
  '"
mysql_real_escape_string($tualet) ."',
  '"
mysql_real_escape_string($pitanie) ."',
  '"
mysql_real_escape_string($mesto) ."',
  '"
mysql_real_escape_string($email) ."',
  '"
mysql_real_escape_string($name) ."',
  '"
mysql_real_escape_string($login) ."',
  '"
mysql_real_escape_string($file) ."',
  '"
mysql_real_escape_string($description) ."'
  )"
);


// Добавляем фото в БД
$result3 mysql_query ("INSERT INTO board_img (file) VALUES ('$file_name')");


if (
$result2 == 'true') {echo "<html><head><link href='blocks/style/style.css' rel='stylesheet' type='text/css' /><meta http-equiv=\"refresh\" content=\"2;url=" $_SERVER['HTTP_REFERER'] . "\"></head<body><div id='obrabotchic'>Ваше объявление опубликовано!</div></body></html>";}
else {echo 
"<html><head><link href='blocks/style/style.css' rel='stylesheet' type='text/css' /><meta http-equiv=\"refresh\" content=\"2;url=" $_SERVER['HTTP_REFERER'] . "\"></head<body><div id='obrabotchic'>Ваше объявление не создано!</div></body></html>";}
}         
else 
{
echo 
"<html><head><link href='blocks/style/style.css' rel='stylesheet' type='text/css' /><meta http-equiv=\"refresh\" content=\"2;url=" $_SERVER['HTTP_REFERER'] . "\"></head<body><div id='obrabotchic'>Вы ввели не все данные!</div></body></html>";
}
?>  


Но имя файла в БД заносится такого вида: Z:home est1.ruwwwoardphotoUPL72D6.tmporiginal.jpg
И только одно, а не несколько строк

  Ответить  
 
 автор: Lotanaen   (21.10.2011 в 09:43)   письмо автору
 
   для: kapitalist   (20.10.2011 в 18:45)
 

проверку типа файла, а заодно и его размера можно сделать функцией filesize()

  Ответить  
 
 автор: kapitalist   (20.10.2011 в 18:45)   письмо автору
 
   для: Lotanaen   (20.10.2011 в 17:57)
 

Теперь понял. Спасибо! Буду пробовать.

  Ответить  
 
 автор: Lotanaen   (20.10.2011 в 17:57)   письмо автору
 
   для: kapitalist   (20.10.2011 в 17:34)
 

идет переименование файла на image_board.jpg в данном случае, т.е. 1.jpg, 2.jpg и т.д. для других типов файлов нужно еще доделать скрипт - я же ранее уже писал об этом.
в переменной $dir_images указываете директорию где будут храниться изображения
все поля загрузки изображений называете file_name[] .
вот именно запрос заносяший имя изображения в БД

mysql_query("update image_board set image='".$num_image.".jpg' where image_doard=$num_image;");


в поле image и будут храниться имена файлов, а в поле id_board привязка к таблице board

  Ответить  
 
 автор: kapitalist   (20.10.2011 в 17:34)   письмо автору
 
   для: Lotanaen   (20.10.2011 в 16:53)
 

Тогда я не могу понять как имя файла должно попадать в бд

  Ответить  
 
 автор: Lotanaen   (20.10.2011 в 16:53)   письмо автору
 
   для: kapitalist   (20.10.2011 в 16:29)
 

>Спасибо! Но таким образом мне выдается ошибка на 60 строке.

точку с запятой в конце строки не поставил - поставьте.
>А вот так и нужно в колонку image_board заносить значение NULL
>Я как-то этот момент не понял!

image_board - автоинкримент будет записываться очередной уникальный порядковой номер, можно просто 0 ставить.

  Ответить  

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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