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

Форум PHP

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

 

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

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

тема: загрузка изображения
 
 автор: Василий   (03.01.2012 в 20:14)   письмо автору
 
 

Предлагается пользователю оставить старый или загрузить новый логотип.
Если есть старый логотип - он выводится, а вот если грузить новый то путь к новому логотипу не прописывается в папке logo для нужного id_pu
<?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 name="add" method='post' action='pu_add.php' enctype="multipart/form-data">
<table width="650" cellspacing="5" cellpadding="5">
 <tr>
  <td width="200" valign="top"><b>Название организации:</b></td>
  <td width="550" align="left" style='background-color:#f0f0f0'>
  <input value= "<?php echo $_GET['title']; ?>" type="text" name="title">

 <tr>
  <td><input type="radio" name="logo" value="old"> оставить старый логотип<br></td> 
  <td><img src="<?php echo $_GET['logo']; ?>"></td>

</tr><tr> 
  <td><input type="radio" name="logo" value="new"> загрузить новый<br> </td> 
  <td> <input type="file" name="filename"></td> 
</tr><tr>
 <td><input type="radio" name="logo" value="no_im"> нет логотипа</td>
<td></td>
</tr> 
 
 
</table>
<input name="id_pu" type="hidden" value="<?php echo $_GET['id_pu']; ?>">
   <br>
   <center>
     <label>
     <input type="submit" name="submit" id="submit" value="Сохранить изменения">
     </label>
   </center>

</form>

</td>
</tr>
</table>

   
 
 автор: Slo_Nik   (03.01.2012 в 20:30)   письмо автору
 
   для: Василий   (03.01.2012 в 20:14)
 

1)где хранится путь к старому логотипу?
2)как Вы выводите старый логотип в браузер?

   
 
 автор: Василий   (03.01.2012 в 20:37)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 20:30)
 

старый логотип выводится:
  <td><input type="radio" name="logo" value="old"> оставить старый логотип<br></td> 
  <td><img src="<?php echo $_GET['logo']; ?>"></td> 

путь хранится в папке img/logo

на странице пользователя его логотип выводится так:
if (!empty($myrow3 ['logo'])) {
printf ("<tr>
    <td><img src='%s' align='middle'></td>
    <td width='400px'>", $myrow3["logo"]);}

   
 
 автор: Slo_Nik   (03.01.2012 в 20:49)   письмо автору
 
   для: Василий   (03.01.2012 в 20:37)
 

я так понял, что данные о логотипе хранятся у Вас в БД.
А Вы обновили данные в базе после того, как заменили логотип?
Вы же ни где не сохраняете новое имя, поэтому не выводится новый логотип.

   
 
 автор: Василий   (03.01.2012 в 20:54)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 20:49)
 

А как же вот это
$destination ="img/logo_pu/" . $_FILES['userfile']['name'];

Как туда прописать нужный путь с привязкой id_pu?

   
 
 автор: Slo_Nik   (03.01.2012 в 21:05)   письмо автору
 
   для: Василий   (03.01.2012 в 20:54)
 

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

   
 
 автор: Василий   (03.01.2012 в 21:11)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 21:05)
 

почему же. обновляю.
Title обновляется, а logo вот нет
if  (isset($_POST['logo']))          {$logo = $_POST['logo']; if ($logo == '') {unset ($logo);}}

$result = mysql_query ("insert bd SET logo='$logo',

   
 
 автор: Slo_Nik   (03.01.2012 в 21:51)   письмо автору
 
   для: Василий   (03.01.2012 в 21:11)
 

в таком случае, для начала, выведите дам массивов POST и FILES в начале скрипта, посмотрите, что в них находится после отправки формы.
потом посмотрите, что находится в запросе, перед выполнением.

<?php 
 
echo "<pre>";
  
print_r(POST);
 echo 
"</pre>";
// то же самое сделайте для FILES 
// ну и запрос
$query "INSERT INTO `table` SET `logo` = '".$logo."'";
echo 
$query;
if(!
mysql_query($query)){
 echo 
mysql_error();
}
?>

В Вашем запросе что то не так....

   
 
 автор: Василий   (03.01.2012 в 22:03)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 21:51)
 

echo "<pre>";
print_r(POST);
echo "</pre>";
// то же самое сделайте для FILES

Вот так правильно -

 echo "<pre>";
  print_r(FILES  );
 echo "</pre>";


?

   
 
 автор: Slo_Nik   (03.01.2012 в 22:19)   письмо автору
 
   для: Василий   (03.01.2012 в 22:03)
 

Вот Вы опять тупо скопировали то, что я написал, а я написал с ошибкой.... )))
извините, но исправить Вам прийдётся

<?php  
 
echo "<pre>"
  
print_r($_POST); 
 echo 
"</pre>"
// то же самое сделайте для $_FILES  
// ну и запрос 

   
 
 автор: Василий   (03.01.2012 в 22:33)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 22:19)
 

<?php  

echo "<pre>"
print_r($_POST); 
echo 
"</pre><hr>"

?>

Logo пустой передается
а проверка показывает, что файл есть:
Array
(
    [filename] => Array
        (
            [name] => yutex.png
            [type] => image/png
            [tmp_name] => /tmp/phpp2aKfg
            [error] => 0
            [size] => 92734
        )

)

   
 
 автор: Slo_Nik   (03.01.2012 в 22:52)   письмо автору
 
   для: Василий   (03.01.2012 в 22:33)
 

получается, что в запросе $logo пустая , правильно?
но берёте Вы её из POST, а надо брать имя из FILES
что показывает дамп массива $_POST ?

   
 
 автор: Василий   (03.01.2012 в 22:55)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 22:52)
 

[logo] =>

пусто

   
 
 автор: Василий   (03.01.2012 в 22:58)   письмо автору
 
   для: Василий   (03.01.2012 в 22:55)
 

Ошибка где-то здесь.

Надо же передавать $_GET['logo']

<?php  
if (!empty($_GET['logo'])) {
printf ("<td><input type='radio' name='logo' value='old'> оставить старый логотип<br></td> 
  <td><img src='%s'></td>

</tr><tr> 
  <td><input type='radio' name='logo' value='new'> загрузить новый<br> </td> 
  <td> <input type='file' name='filename'></td> 
</tr><tr>
 <td><input type='radio' name='logo' value='no_im'> нет логотипа</td>
<td></td>"
,  $_GET["logo"]);}?>

<?php  
if (empty($_GET['logo'])) {
printf ("<td><input type='radio' name='logo' value='new'> загрузить логотип<br> </td> 
  <td> <input type='file' name='filename'></td> 
</tr><tr>
 <td><input type='radio' name='logo' value='no_im'> нет логотипа</td>
<td></td>"
,  $_GET["logo"]);}?>
</tr> 

   
 
 автор: Slo_Nik   (03.01.2012 в 23:10)   письмо автору
 
   для: Василий   (03.01.2012 в 22:58)
 

этим Вы просто выводите изображение, но ни куда не передаёте <img src="<?php echo $_GET['logo']; ?>">
Вам уже помоему писали, что проверяете значение чекбокса, если отмечен чекбокс, что нужен новый логотип, то проверяете массив $_FILES.
C этого массива и берёте название нового логотипа

   
 
 автор: Василий   (03.01.2012 в 23:26)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 23:10)
 

вы имеете ввиду вот это?

<?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(
"Ошибка загрузки файла");
    } 
}
?> 

   
 
 автор: Slo_Nik   (03.01.2012 в 23:34)   письмо автору
 
   для: Василий   (03.01.2012 в 23:26)
 

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

   
 
 автор: Василий   (03.01.2012 в 23:37)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 23:34)
 

хорошо. как занести-то?
Ведь не заносится, проклятая ))

   
 
 автор: Slo_Nik   (03.01.2012 в 23:47)   письмо автору
 
   для: Василий   (03.01.2012 в 23:37)
 

>хорошо. как занести-то?
так же как и остальные данные Вы заносите

   
 
 автор: Василий   (04.01.2012 в 00:25)   письмо автору
 
   для: Slo_Nik   (03.01.2012 в 23:47)
 

Люди, подскажите!

   
 
 автор: Slo_Nik   (04.01.2012 в 00:33)   письмо автору
 
   для: Василий   (04.01.2012 в 00:25)
 

Я не "люди", я "slo_nik"....))))
что Вы выполняете этим участком кода ?

<?php
mysql_query
("INSERT INTO `pu` (`id_pu`, `logo`) VALUES ({$id_pu}, '{$path}')");

   
 
 автор: Василий   (04.01.2012 в 00:38)   письмо автору
 
   для: Slo_Nik   (04.01.2012 в 00:33)
 

я его не использую. я привел вам его как пример. мой код верхний

   
 
 автор: Slo_Nik   (04.01.2012 в 00:56)   письмо автору
 
   для: Василий   (04.01.2012 в 00:38)
 

ну раз как пример, тогда долго прийдётся Вам ждать помощи....
Определитесь для начала с каким кодом Вы работаете и не морочьте голову ни себе, ни другим...

   
 
 автор: Василий   (04.01.2012 в 01:05)   письмо автору
 
   для: Slo_Nik   (04.01.2012 в 00:56)
 

с этим кодом
<?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 name="add" method='post' action='pu_add.php' enctype="multipart/form-data">
<table width="650" cellspacing="5" cellpadding="5">
 <tr>
  <td width="200" valign="top"><b>Название организации:</b></td>
  <td width="550" align="left" style='background-color:#f0f0f0'>
  <input value= "<?php echo $_GET['title']; ?>" type="text" name="title">

 <tr>
  <td><input type="radio" name="logo" value="old"> оставить старый логотип<br></td> 
  <td><img src="<?php echo $_GET['logo']; ?>"></td>

</tr><tr> 
  <td><input type="radio" name="logo" value="new"> загрузить новый<br> </td> 
  <td> <input type="file" name="filename"></td> 
</tr><tr>
 <td><input type="radio" name="logo" value="no_im"> нет логотипа</td>
<td></td>
</tr> 
 
 
</table>
<input name="id_pu" type="hidden" value="<?php echo $_GET['id_pu']; ?>">
   <br>
   <center>
     <label>
     <input type="submit" name="submit" id="submit" value="Сохранить изменения">
     </label>
   </center>

</form>

</td>
</tr>
</table>

   
 
 автор: Slo_Nik   (04.01.2012 в 02:07)   письмо автору
 
   для: Василий   (04.01.2012 в 01:05)
 

этот код загружает изображения, но не делает ни каких записей в базу данных....
после загрузки файла Вам надо будет записать ещё его имя в базу данных, потом оттуда его брать и показывать файл пользователю.
но это уже другой вопрос и для другой ветки форума.
надеюсь, что файл у Вас загружается туда, куда Вы хотели....

   
 
 автор: Василий   (04.01.2012 в 02:09)   письмо автору
 
   для: Slo_Nik   (04.01.2012 в 02:07)
 

не грузится.
создал веткуhttp://www.softtime.ru/forum/read.php?id_forum=1&id_theme=84220

   
 
 автор: Василий   (04.01.2012 в 04:11)   письмо автору
 
   для: Василий   (04.01.2012 в 02:09)
 

Тему закрываем!

   
Rambler's Top100
вверх

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