За последние 24 часа нас посетили 17570 программистов и 1719 роботов. Сейчас ищут 1827 программистов ...

Как ввести путь в бд нескольких файлов

Тема в разделе "PHP для новичков", создана пользователем streamland, 11 май 2012.

  1. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    В случае одного изображения делаю так:

    Код (Text):
    1.  
    2.    
    3. $tmp = $_FILES['photoimg']['tmp_name'];
    4.                                                         if(move_uploaded_file($tmp, $path.$actual_image_name))
    5.                                                                 {
    6. $sql = "INSERT INTO users SET  image ='$tmp'"; // добавляю путь в базу

    А если загружаемых файлов( изображений) несколько как данномслучае выстроить запись пути в базу в данном случае :

    Код (Text):
    1.  
    2.  
    3.  
    4. // make a unique filename for the uploaded file and check it is
    5. // not taken... if it is keep trying until we find a vacant one
    6. foreach($active_keys as $key)
    7. {
    8.         $now = time();
    9.         while(file_exists($uploadFilename[$key] = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'][$key]))
    10.         {
    11.                 $now++;
    12.  
    13.         }
    14. }
    15.  
    16. // now let's move the file to its final and allocate it with the new filename
    17. foreach($active_keys as $key)
    18. {
    19.         @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
    20.                 or error('receiving directory insuffiecient permission', $uploadForm);
    21.  
    22. $sql = "INSERT INTO users SET  imagepole1 ='tmp_name[$key]' , imagepole2='tmp_name[$key]', imagepole3 ='tmp_name[$key]', imagepole4='tmp_name[$key]' "; // Что то по типу этого  
    23. }  
    24.  

    и ещё правильно ли также хранить миниатюр имиджа или делать resize с оригинала на лету при вставке на сайт.

    Спасибо
     
  2. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Если фоток предполагается много, то хранишь в отдельной таблице. Естественно, надо сохраняться хотя бы 2 варианта, мини и оригинал фото, если с размером хостинга проблем нет, в противном случае, можно и ресайзить на лету
     
  3. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Почему то цикл не хочет добавлять пути в базу

    Код (Text):
    1.  
    2. <?php  
    3.  
    4. // filename: upload.processor.php
    5.  
    6. // first let's set some variables
    7.  
    8. include("conf.php");
    9.  
    10.   // News has been entered
    11.   // using the form below.
    12.  
    13.   // open database connection
    14.         $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
    15.   // select database
    16.         mysql_select_db($db) or die ("Unable to select database!");
    17.  
    18.  
    19.  
    20.  
    21.  
    22.  
    23. // make a note of the current working directory, relative to root.
    24. $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']);
    25.  
    26. // make a note of the directory that will recieve the uploaded files
    27. $uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'uploaded_files/';
    28.  
    29. // make a note of the location of the upload form in case we need it
    30. $uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.form.php';
    31.  
    32. // make a note of the location of the success page
    33. $uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.success.php';
    34.  
    35. // name of the fieldname used for the file in the HTML form
    36. $fieldname = 'file';
    37.  
    38. //echo'<pre>';print_r($_FILES);exit;
    39.  
    40.  
    41.  
    42. // Now let's deal with the uploaded files
    43.  
    44. // possible PHP upload errors
    45. $errors = array(1 => 'php.ini max file size exceeded',
    46.                 2 => 'html form max file size exceeded',
    47.                 3 => 'file upload was only partial',
    48.                 4 => 'no file was attached');
    49.  
    50. // check the upload form was actually submitted else print form
    51. isset($_POST['submit'])
    52.     or error('the upload form is neaded', $uploadForm);
    53.    
    54. // check if any files were uploaded and if
    55. // so store the active $_FILES array keys
    56. $active_keys = array();
    57. foreach($_FILES[$fieldname]['name'] as $key => $filename)
    58. {
    59.     if(!empty($filename))
    60.     {
    61.         $active_keys[] = $key;
    62.     }
    63. }
    64.  
    65. // check at least one file was uploaded
    66. count($active_keys)
    67.     or error('No files were uploaded', $uploadForm);
    68.        
    69. // check for standard uploading errors
    70. foreach($active_keys as $key)
    71. {
    72.     ($_FILES[$fieldname]['error'][$key] == 0)
    73.         or error($_FILES[$fieldname]['tmp_name'][$key].': '.$errors[$_FILES[$fieldname]['error'][$key]], $uploadForm);
    74. }
    75.    
    76. // check that the file we are working on really was an HTTP upload
    77. foreach($active_keys as $key)
    78. {
    79.     @is_uploaded_file($_FILES[$fieldname]['tmp_name'][$key])
    80.         or error($_FILES[$fieldname]['tmp_name'][$key].' not an HTTP upload', $uploadForm);
    81. }
    82.    
    83. // validation... since this is an image upload script we
    84. // should run a check to make sure the upload is an image
    85. foreach($active_keys as $key)
    86. {
    87.     @getimagesize($_FILES[$fieldname]['tmp_name'][$key])
    88.         or error($_FILES[$fieldname]['tmp_name'][$key].' not an image', $uploadForm);
    89. }
    90.    
    91. // make a unique filename for the uploaded file and check it is
    92. // not taken... if it is keep trying until we find a vacant one
    93. foreach($active_keys as $key)
    94. {
    95.     $now = time();
    96.     while(file_exists($uploadFilename[$key] = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'][$key]))
    97.     {
    98.         $now++;
    99.        
    100.     }
    101. }
    102.  
    103. // now let's move the file to its final and allocate it with the new filename
    104.  
    105.         foreach($active_keys as $key)
    106. {
    107.     @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
    108.         or error('receiving directory insuffiecient permission', $uploadForm);
    109.        
    110. }



    этот цикл добавил к коду


    Код (Text):
    1.  
    2. <?php
    3.  
    4. # Assuming image1, etc accept null values you could try something like this... Not tested
    5.  
    6. #set some variables
    7. $query_part_1 = '';
    8. $query_part_2 = '';
    9. $i = 1;
    10.  
    11. foreach($active_keys as $key)
    12. {
    13.     $query_part_1 .= ",'image" . $i++ . "'";
    14.     $query_part_2 .= ",'" . $_FILES[$fieldname]['name'][$key] . "'";
    15. }
    16.  
    17. $query = "INSERT INTO properties ('location','description'" . $query_part_1 . ") VALUES ('" . $location . "','" . $description . "'" . $query_part_2 . ")";
    18.  
    19. ?>
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    ты записываешь путь до временного файла? не ну он конечно проживет какое-то время…
    о май гад!
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хихикаем над малышней? =) оч достойно!
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    пох. я помогаю человеку, а сарказм — плата за помощь
    Код (Text):
    1. $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']);
    есть функция dirname()
    а в новых версиях пэхапэ есть еще константа __DIR__
     
  7. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Спасибо за намёк и поправку в помещении пути в базу ! Буду исправляться

    Но в сообщении от Вс май 20, 2012 16:03 проблема в том что цикл ничего не загоняет в базу :).
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  9. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Sobachnik
    Можно ли по подробней в цикле

    Спасибо
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну смотри, вот здесь ты собираешь названия полей и значения, которые нужно в них записать в переменные:
    Код (PHP):
    1. foreach($active_keys as $key)
    2. { 
    3.     $query_part_1 .= ",'image" . $i++ . "'";
    4.     $query_part_2 .= ",'" . $_FILES[$fieldname]['name'][$key] . "'"; 
    5. } 
    То есть после прохода цикла в переменной $query_part_1 будет строка
    Код (Text):
    1. ,'image1','image2','image3'
    и так далее, а в $query_part_2 - названия присланных файлов из массива $_FILES, записанные аналогичным образом.
    Далее ты составляешь уже полностью сам запрос и подставляешь в него те два сгенерированные в цикле кусочка.
    Код (PHP):
    1. $query = "INSERT INTO properties ('location','description'" . $query_part_1 . ") VALUES ('" . $location . "','" . $description . "'" . $query_part_2 . ")"; 
    Т.е. в переменной $query будет записано нечто вроде
    Код (Text):
    1. INSERT INTO properties ('location','description','image1','image2','image3') VALUES ('значение_location','значение_description','файл_1','файл_2','файл_3')
    Но что дальше - не понятно... В том коде, который ты показал - получается, что запрос ты составил, но не сделал его. Допиши это:
    Код (PHP):
    1. mysql_query($query) or exit($query . '<br />' . mysql_error()); 
    после строки, в которой составляется запрос (которая начинается на $query = ...), чтобы отправить его к базе данных.
    И ещё - у тебя названия полей заключены в прямые (обычные) кавычки, а нужно их в "косые" (которые на букве ё при английской раскладке): ` Но только названия полей ('location','description','image1','image2','image3'), значения - должны быть в прямых.
     
  11. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Спасибо огромное ша буду разбирать!
     
  12. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Данный код почему то даёт ощибку синтксиса

    Плз помогите разобратся

    Код (Text):
    1.  
    2. foreach($active_keys as $key)
    3. {
    4.     @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
    5.         or error('receiving directory insuffiecient permission', $uploadForm);
    6.        
    7.        
    8.         $query_part_1 = '';
    9. $query_part_2 = '';
    10. $i = 1;
    11.        
    12.            $query_part_1 .= ",'image" . $i++ . "'";
    13.    
    14.    $query_part_2 .= ",'" . $uploadFilename[$key] . "'";
    15.  
    16.  
    17. $query = "INSERT INTO imloop (`" . $query_part_1 . "`) VALUES ('" . $query_part_2 . "')";
    18.        
    19.        
    20.         mysql_query($query) or exit($query . '<br />' . mysql_error());
    21.        
    22.         mysql_close($connection);
    23.      } 
     
  13. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Код (Text):
    1.  
    2. foreach($active_keys as $key)
    3. {
    4.     @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
    5.         or error('receiving directory insuffiecient permission', $uploadForm);
    6.                
    7.         $query_part_1 = '';
    8. $query_part_2 = '';
    9. $i = 1;
    10.    // добавляем запятые после key/values
    11. $query_part_1 .= " image" . $i++ . ",";
    12. $query_part_2 .= " '" . $uploadFilename[$key]. "',";  
    13.    
    14.    $query_part_1 = preg_replace("/,$/","",$query_part_1); // удаление запятых на конце
    15. $query_part_2 = preg_replace("/,$/","",$query_part_2);
    16.  
    17. $query = "INSERT INTO `imloop` (" .$query_part_1. ") VALUES (" .$query_part_2. ")";
    18.        
    19.         mysql_query($query) or exit($query . '<br />' . mysql_error());
    20.        
    21.        
    22.      } 
    23.        
    24. mysql_close($connection);
    Данный скрипт работает но помещает фотки только в "image1"
    по типу:
    id image1 image2 image3 image4 image5 image6
    1 рис1
    2 рис2
    3 рис3
    4 рис4



    А нужно по типу

    id image1 image2 image3 image4 image5 image6
    1 рис1 рис2 рис3 рис4
     
  14. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    После изменения в коде пытается отправить по столбикам но выдает синтаксическую ошибку..
    Как можно избавится от запятой которая появляется на (image5,) а также от знаков на VALUES (" \'Z:
    Благодарю

    Код (Text):
    1.  
    2. foreach($active_keys as $key)
    3. {
    4.     @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
    5.         or error('receiving directory insuffiecient permission', $uploadForm);
    6.        
    7.     $query_part_1 .= " image" . $i++ . ",";
    8.    
    9. $query_part_2 .= " '" . $uploadFilename[$key]. "',";  
    10.  
    11.  
    12.      }     
    13.  
    14.      $cols[] = $query_part_1;
    15. $data[] = $query_part_2;
    16.     $cols =  array_map ('mysql_real_escape_string', $cols);
    17. $data=  array_map ('mysql_real_escape_string', $data);
    18.  
    19.  //$cols = rtrim($cols, ',');
    20.  //$data = rtrim($data, ',');
    21. $query = 'INSERT INTO `imloop` (' . implode(',', $cols) . ') VALUES ("' .  implode('","', $data) . '")';
    22.  
    23. mysql_query($query) or exit($query . '<br />' . mysql_error());
    24.  
    25.      
    26.            
    27. mysql_close($connection);


    Код (Text):
    1.  
    2. INSERT INTO `imloop` ( image, image1, image2, image3, image4, image5,) VALUES (" \'Z:/home/multiple/www/uploaded_files/1352755279-1.jpg\', \'Z:/home/multiple/www/uploaded_files/1352755279-2.jpg\', \'Z:/home/multiple/www/uploaded_files/1352755279-3.jpg\', \'Z:/home/multiple/www/uploaded_files/1352755279-4.jpg\', \'Z:/home/multiple/www/uploaded_files/1352755279-5.jpg\', \'Z:/home/multiple/www/uploaded_files/1352755279-6.jpg\',")
    3. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES (" \'Z:/home/multiple/www/uploaded_files/1352755279-1.jpg\', \'Z:/home/' at line 1
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Братуха, ты зря так вообще делаешь.
     
  16. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    А как вы предлагаете ?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    один файл - одна строка.


    к чему они вообще у вас привязаны? ради чего у вас там пять колонок?
     
  18. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Просто пытаюсь сделать мултиаплоуд форму где количество загружаемых файлов(jpeg) будет меняться
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Вот так и будет хорошо как я говорю. Сколько файлов пришло, столько строк и добавится.

    К чему файлы грузятся?
     
  20. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Есть форма через которую добавляются:
    Наименование товара | Количество | Цена | Производитель | и плюс | image1 | image2| image3| image4 | image5 итд здесь хотелось бы дать пользователю добавлять произвольное количество фоток т е плюс до 10 фоток.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Сохраняй файлы в строке так:
    Номер товара, путь к файлу, имя файла, тип файла

    Так как имена файлов могут совпасть храни их переименовывая функцией unicid
     
  22. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
    Но ведь к каждому товару у меня может быть до 10 фоток

    Вот почему хочу пихать все данные в одну строку что бы не путаться при выводе.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты не спутаешься
     
  24. streamland

    streamland Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    79
    Симпатии:
    0
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    что "неа"?