|
|
|
| Здраствуйте!
Пользователь на своей страничке (у каждогопользователя id_pu разный)
грузит свой логотип для того чтобы логотип отображался на его страничке:
<p>позволяем загрузить новый логотип:</p>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="hidden" name="id_pu" value='<?php echo $myrow3['id_pu']; ?>'><br>
<input type="submit" value="Загрузить"><br>
</form>
|
далее файл upload.php
<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>
<?php
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Если файл загружен успешно, перемещаем его
// из временной директории в конечную
move_uploaded_file($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]);
} else {
echo("Ошибка загрузки файла");
}
echo $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["logo"]["name"];
var_dump($_FILES);
echo "temp file: ",$_FILES["filename"]["tmp_name"], "<br>";
echo "new file: ", $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"];
?>
</body>
</html>
|
CREATE TABLE `pu` (
`id_pu` int(11) NOT NULL,
`logo` varchar(255) NOT NULL,
|
К примеру, как должно быть: предприятие с id_pu=100 загружает логотип 100.jpg, который помещается в папку img/logo.
Одновременно в БД у предприятия с id_pu=100 есть поле logo, в котором записан путь к файлу логотипа img/logo/100 .jpg
Вопрос: правильно ли я понимаю, что нужно переписать
echo "temp file: ",$_FILES["filename"]["tmp_name"], "<br>";
echo "new file: ", $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"];
?>
|
чтобы загруженный файл прямиком ложился в папку img/logo и чтобы потом название этого файла было записано в поле logo по нужному id_pu
Если да что в ней поменять? | |
|
|
|
|
|
|
|
для: Василий
(01.01.2012 в 09:10)
| | Если вам нужно ложить файл в папку img/logo, то почему ложтите в папку upload?
Или нужно ложить в папку upload/img/logo ? Тогда создайте папки там и пропишите путь в скрипте.
Если название файла должно быть 100.jpg, то почему вы используете реальное название загружаемого файла $_FILES["filename"]["name"] ? Подставляйте вместо этой переменной идентификатор предприятия.
Если лого загружается второй раз, то необходимо проверить наличие уже загруженного лого в базе, в таблице `pu`
if(!mysql_result(mysql_query("SELECT COUNT(*) FROM `pu` WHERE `id_pu` = ".(int)$id_pu), 0))
{
// Делаем insert
mysql_query("INSERT INTO `pu` (`id_pu`, `logo`) VALUES (".(int)$id_pu.", '{$path}')");
}
|
| |
|
|
|
|
|
|
|
для: Dr Lines
(02.01.2012 в 03:48)
| | Если название файла должно быть 100.jpg, то почему вы используете реальное название загружаемого файла $_FILES["filename"]["name"] ? Подставляйте вместо этой переменной идентификатор предприятия.
Вот здесь если можно подробнее. Как прописать идентификатор? | |
|
|
|
|
|
|
|
для: Василий
(02.01.2012 в 06:29)
| | А в какой переменной у вас хранится идентификатор? | |
|
|
|
|
|
|
|
для: Dr Lines
(02.01.2012 в 06:31)
| | идентификатор хранится в поле logo | |
|
|
|
|
|
|
|
для: Василий
(02.01.2012 в 18:18)
| | Ваши слова ранее:
>К примеру, как должно быть: предприятие с id_pu=100 загружает логотип 100.jpg, который >помещается в папку img/logo.
>Одновременно в БД у предприятия с id_pu=100 есть поле logo, в котором записан путь к файлу >логотипа img/logo/100 .jpg
А теперь вы говорите
>идентификатор хранится в поле logo
Вобщем ладно, вот алгоритм:
1. Вывод HTML формы (с методом POST) с полем для загрузки файла и скрытым полем id_pu
Вывели.
2. Отправка данных с формы и их обработка (надо проверить, что была отправлена форма и что ID предприятия правильный, а не взятый с потолка)
<?php
if(is_numeric($_POST['id_pu']))
{
$id_pu = (int)$_POST['id_pu'];
// Допустим, у вас есть таблица с предприятиями `business`,
// где поле `id` - идентификатор предприятия. Проверяем что посланный ID существует.
if(mysql_result(mysql_query("SELECT COUNT(*) FROM `business` WHERE `id` = {$id_pu}"), 0))
{
Проверяем загруженный файл
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Если файл загружен успешно, перемещаем его
// из временной директории в конечную
$path = $_SERVER['DOCUMENT_ROOT'].'/upload/img/logo/'.$id_pu.'.jpg';
if(move_uploaded_file($_FILES["filename"]["tmp_name"], $path))
{
// Если лого загружается второй раз, то необходимо проверить наличие уже загруженного лого в базе, в таблице `pu`
if(!mysql_result(mysql_query("SELECT COUNT(*) FROM `pu` WHERE `id_pu` = ".$id_pu), 0))
{
// Делаем insert
mysql_query("INSERT INTO `pu` (`id_pu`, `logo`) VALUES ({$id_pu}, '{$path}')");
}
}
}
else
echo("Ошибка загрузки файла");
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Dr Lines
(03.01.2012 в 03:32)
| | Тот скрипт загрузки был без защиты.
Новый
<?php
/**
* Function of uploaded of a file
* Функция загрузки файла (аплоадер)
* @param int $max_file_size максимальный размер файла в килобайтах
* @param array $valid_extensions массив допустимых расширений
* @param string $upload_dir директория загрузки
* @return array сообщение о ходе выполнения
*
* @author IT studio IRBIS-team (www.irbis-team.com)
* @copyright © 2009 IRBIS-team
*/
function uploadHandle($max_file_size = 100, $valid_extensions = array(), $upload_dir = '.')
{
$error = null;
$info = null;
$max_file_size *= 1024;
if ($_FILES['userfile']['error'] === UPLOAD_ERR_OK)
{
// проверяем расширение файла
$file_extension = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION);
if (in_array($file_extension, $valid_extensions))
{
// проверяем размер файла
if ($_FILES['userfile']['size'] < $max_file_size)
{
$destination ="img/logo_pu/" . $_FILES['userfile']['name'];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destination))
$info = 'Файл успешно загружен';
else
$error = 'Не удалось загрузить файл';
}
else
$error = 'Размер файла больше допустимого';
}
else
$error = 'У файла недопустимое расширение';
}
else
{
// массив ошибок
$error_values = array(
UPLOAD_ERR_INI_SIZE => 'Размер файла больше разрешенного директивой upload_max_filesize в php.ini',
UPLOAD_ERR_FORM_SIZE => 'Размер файла превышает указанное значение в MAX_FILE_SIZE',
UPLOAD_ERR_PARTIAL => 'Файл был загружен только частично',
UPLOAD_ERR_NO_FILE => 'Не был выбран файл для загрузки',
UPLOAD_ERR_NO_TMP_DIR => 'Не найдена папка для временных файлов',
UPLOAD_ERR_CANT_WRITE => 'Ошибка записи файла на диск'
);
$error_code = $_FILES['userfile']['error'];
if (!empty($error_values[$error_code]))
$error = $error_values[$error_code];
else
$error = 'Случилось что-то непонятное';
}
return array('info' => $info, 'error' => $error);
}
/////////////////////////////////////////////////////////////////////
$extensions = array('jpg', 'jpeg', 'png', 'gif');
$upload_dir = 'images';
// Запускаем функцию
if(!empty($_POST['upload_submit']))
{
$message = uploadHandle(200, $extensions, $upload_dir);
// Выводим сообщение
echo $message['error'] ? $message['error'] : $message['info'];
}
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="userfile" />
<input type="submit" value="Закачать" name="upload_submit" />
</form>
<?php
echo '<pre>';
print_r($_FILES['userfile']);
echo '</pre>';
?>
|
| |
|
|
|
|
|
|
|
для: Василий
(03.01.2012 в 16:43)
| | То что в этом скрипте проверяется файл на расширение - не значит, что есть защита
Этого не достаточно | |
|
|
|