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

Форум PHP

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

 

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

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

тема: Работа с загруженной картинкой
 
 автор: Василий   (01.01.2012 в 09:10)   письмо автору
 
 

Здраствуйте!
Пользователь на своей страничке (у каждогопользователя 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
Если да что в ней поменять?

  Ответить  
 
 автор: Dr Lines   (02.01.2012 в 03:48)   письмо автору
 
   для: Василий   (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}')");
}

  Ответить  
 
 автор: Василий   (02.01.2012 в 06:29)   письмо автору
 
   для: Dr Lines   (02.01.2012 в 03:48)
 

Если название файла должно быть 100.jpg, то почему вы используете реальное название загружаемого файла $_FILES["filename"]["name"] ? Подставляйте вместо этой переменной идентификатор предприятия.

Вот здесь если можно подробнее. Как прописать идентификатор?

  Ответить  
 
 автор: Dr Lines   (02.01.2012 в 06:31)   письмо автору
 
   для: Василий   (02.01.2012 в 06:29)
 

А в какой переменной у вас хранится идентификатор?

  Ответить  
 
 автор: Василий   (02.01.2012 в 18:18)   письмо автору
 
   для: Dr Lines   (02.01.2012 в 06:31)
 

идентификатор хранится в поле logo

  Ответить  
 
 автор: Dr Lines   (03.01.2012 в 03:32)   письмо автору
 
   для: Василий   (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(
"Ошибка загрузки файла");
    } 
}
?>

  Ответить  
 
 автор: Василий   (03.01.2012 в 16:43)   письмо автору
 
   для: 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>';
    
?>  

  Ответить  
 
 автор: Slo_Nik   (03.01.2012 в 17:23)   письмо автору
 
   для: Василий   (03.01.2012 в 16:43)
 

То что в этом скрипте проверяется файл на расширение - не значит, что есть защита
Этого не достаточно

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

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