В случае одного изображения делаю так: Код (Text): $tmp = $_FILES['photoimg']['tmp_name']; if(move_uploaded_file($tmp, $path.$actual_image_name)) { $sql = "INSERT INTO users SET image ='$tmp'"; // добавляю путь в базу А если загружаемых файлов( изображений) несколько как данномслучае выстроить запись пути в базу в данном случае : Код (Text): // make a unique filename for the uploaded file and check it is // not taken... if it is keep trying until we find a vacant one foreach($active_keys as $key) { $now = time(); while(file_exists($uploadFilename[$key] = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'][$key])) { $now++; } } // now let's move the file to its final and allocate it with the new filename foreach($active_keys as $key) { @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key]) or error('receiving directory insuffiecient permission', $uploadForm); $sql = "INSERT INTO users SET imagepole1 ='tmp_name[$key]' , imagepole2='tmp_name[$key]', imagepole3 ='tmp_name[$key]', imagepole4='tmp_name[$key]' "; // Что то по типу этого } и ещё правильно ли также хранить миниатюр имиджа или делать resize с оригинала на лету при вставке на сайт. Спасибо
Если фоток предполагается много, то хранишь в отдельной таблице. Естественно, надо сохраняться хотя бы 2 варианта, мини и оригинал фото, если с размером хостинга проблем нет, в противном случае, можно и ресайзить на лету
Почему то цикл не хочет добавлять пути в базу Код (Text): <?php // filename: upload.processor.php // first let's set some variables include("conf.php"); // News has been entered // using the form below. // open database connection $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); // select database mysql_select_db($db) or die ("Unable to select database!"); // make a note of the current working directory, relative to root. $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']); // make a note of the directory that will recieve the uploaded files $uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'uploaded_files/'; // make a note of the location of the upload form in case we need it $uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.form.php'; // make a note of the location of the success page $uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.success.php'; // name of the fieldname used for the file in the HTML form $fieldname = 'file'; //echo'<pre>';print_r($_FILES);exit; // Now let's deal with the uploaded files // possible PHP upload errors $errors = array(1 => 'php.ini max file size exceeded', 2 => 'html form max file size exceeded', 3 => 'file upload was only partial', 4 => 'no file was attached'); // check the upload form was actually submitted else print form isset($_POST['submit']) or error('the upload form is neaded', $uploadForm); // check if any files were uploaded and if // so store the active $_FILES array keys $active_keys = array(); foreach($_FILES[$fieldname]['name'] as $key => $filename) { if(!empty($filename)) { $active_keys[] = $key; } } // check at least one file was uploaded count($active_keys) or error('No files were uploaded', $uploadForm); // check for standard uploading errors foreach($active_keys as $key) { ($_FILES[$fieldname]['error'][$key] == 0) or error($_FILES[$fieldname]['tmp_name'][$key].': '.$errors[$_FILES[$fieldname]['error'][$key]], $uploadForm); } // check that the file we are working on really was an HTTP upload foreach($active_keys as $key) { @is_uploaded_file($_FILES[$fieldname]['tmp_name'][$key]) or error($_FILES[$fieldname]['tmp_name'][$key].' not an HTTP upload', $uploadForm); } // validation... since this is an image upload script we // should run a check to make sure the upload is an image foreach($active_keys as $key) { @getimagesize($_FILES[$fieldname]['tmp_name'][$key]) or error($_FILES[$fieldname]['tmp_name'][$key].' not an image', $uploadForm); } // make a unique filename for the uploaded file and check it is // not taken... if it is keep trying until we find a vacant one foreach($active_keys as $key) { $now = time(); while(file_exists($uploadFilename[$key] = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'][$key])) { $now++; } } // now let's move the file to its final and allocate it with the new filename foreach($active_keys as $key) { @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key]) or error('receiving directory insuffiecient permission', $uploadForm); } этот цикл добавил к коду Код (Text): <?php # Assuming image1, etc accept null values you could try something like this... Not tested #set some variables $query_part_1 = ''; $query_part_2 = ''; $i = 1; foreach($active_keys as $key) { $query_part_1 .= ",'image" . $i++ . "'"; $query_part_2 .= ",'" . $_FILES[$fieldname]['name'][$key] . "'"; } $query = "INSERT INTO properties ('location','description'" . $query_part_1 . ") VALUES ('" . $location . "','" . $description . "'" . $query_part_2 . ")"; ?>
пох. я помогаю человеку, а сарказм — плата за помощь Код (Text): $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']); есть функция dirname() а в новых версиях пэхапэ есть еще константа __DIR__
Спасибо за намёк и поправку в помещении пути в базу ! Буду исправляться Но в сообщении от Вс май 20, 2012 16:03 проблема в том что цикл ничего не загоняет в базу .
Ну смотри, вот здесь ты собираешь названия полей и значения, которые нужно в них записать в переменные: Код (PHP): foreach($active_keys as $key) { $query_part_1 .= ",'image" . $i++ . "'"; $query_part_2 .= ",'" . $_FILES[$fieldname]['name'][$key] . "'"; } То есть после прохода цикла в переменной $query_part_1 будет строка Код (Text): ,'image1','image2','image3' и так далее, а в $query_part_2 - названия присланных файлов из массива $_FILES, записанные аналогичным образом. Далее ты составляешь уже полностью сам запрос и подставляешь в него те два сгенерированные в цикле кусочка. Код (PHP): $query = "INSERT INTO properties ('location','description'" . $query_part_1 . ") VALUES ('" . $location . "','" . $description . "'" . $query_part_2 . ")"; Т.е. в переменной $query будет записано нечто вроде Код (Text): INSERT INTO properties ('location','description','image1','image2','image3') VALUES ('значение_location','значение_description','файл_1','файл_2','файл_3') Но что дальше - не понятно... В том коде, который ты показал - получается, что запрос ты составил, но не сделал его. Допиши это: Код (PHP): mysql_query($query) or exit($query . '<br />' . mysql_error()); после строки, в которой составляется запрос (которая начинается на $query = ...), чтобы отправить его к базе данных. И ещё - у тебя названия полей заключены в прямые (обычные) кавычки, а нужно их в "косые" (которые на букве ё при английской раскладке): ` Но только названия полей ('location','description','image1','image2','image3'), значения - должны быть в прямых.
Данный код почему то даёт ощибку синтксиса Плз помогите разобратся Код (Text): foreach($active_keys as $key) { @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key]) or error('receiving directory insuffiecient permission', $uploadForm); $query_part_1 = ''; $query_part_2 = ''; $i = 1; $query_part_1 .= ",'image" . $i++ . "'"; $query_part_2 .= ",'" . $uploadFilename[$key] . "'"; $query = "INSERT INTO imloop (`" . $query_part_1 . "`) VALUES ('" . $query_part_2 . "')"; mysql_query($query) or exit($query . '<br />' . mysql_error()); mysql_close($connection); }
Код (Text): foreach($active_keys as $key) { @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key]) or error('receiving directory insuffiecient permission', $uploadForm); $query_part_1 = ''; $query_part_2 = ''; $i = 1; // добавляем запятые после key/values $query_part_1 .= " image" . $i++ . ","; $query_part_2 .= " '" . $uploadFilename[$key]. "',"; $query_part_1 = preg_replace("/,$/","",$query_part_1); // удаление запятых на конце $query_part_2 = preg_replace("/,$/","",$query_part_2); $query = "INSERT INTO `imloop` (" .$query_part_1. ") VALUES (" .$query_part_2. ")"; mysql_query($query) or exit($query . '<br />' . mysql_error()); } 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
После изменения в коде пытается отправить по столбикам но выдает синтаксическую ошибку.. Как можно избавится от запятой которая появляется на (image5,) а также от знаков на VALUES (" \'Z: Благодарю Код (Text): foreach($active_keys as $key) { @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key]) or error('receiving directory insuffiecient permission', $uploadForm); $query_part_1 .= " image" . $i++ . ","; $query_part_2 .= " '" . $uploadFilename[$key]. "',"; } $cols[] = $query_part_1; $data[] = $query_part_2; $cols = array_map ('mysql_real_escape_string', $cols); $data= array_map ('mysql_real_escape_string', $data); //$cols = rtrim($cols, ','); //$data = rtrim($data, ','); $query = 'INSERT INTO `imloop` (' . implode(',', $cols) . ') VALUES ("' . implode('","', $data) . '")'; mysql_query($query) or exit($query . '<br />' . mysql_error()); mysql_close($connection); Код (Text): 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\',") 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
Вот так и будет хорошо как я говорю. Сколько файлов пришло, столько строк и добавится. К чему файлы грузятся?
Есть форма через которую добавляются: Наименование товара | Количество | Цена | Производитель | и плюс | image1 | image2| image3| image4 | image5 итд здесь хотелось бы дать пользователю добавлять произвольное количество фоток т е плюс до 10 фоток.
Сохраняй файлы в строке так: Номер товара, путь к файлу, имя файла, тип файла Так как имена файлов могут совпасть храни их переименовывая функцией unicid
Но ведь к каждому товару у меня может быть до 10 фоток Вот почему хочу пихать все данные в одну строку что бы не путаться при выводе.