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

Форум PHP

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

 

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

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

тема: Замена уже загруженного ранее логотипа
 
 автор: Василий   (04.01.2012 в 19:23)   письмо автору
 
 

Пользователь грузит логотип, записываем в базу

   <td width="200" valign="top"><b>Logotip:</b></td>
    <td><input type="file" name="userfile"> загрузить</td>

Далее в обработчике
$logo = mysql_escape_string($_FILES['userfile']['name']); 
и запись в БД
$result = mysql_query ("insert bd SET logo ='$logo ',


Теперь же будем рассчитывать на то что пользователь уже имеет логотип или он хочет загрузить новый логотип или же удалить
<?php  
$path 
"img/logo_pu/";
$image $_GET['logo']; 
if (!empty(
$_GET['logo'])) {
echo 
"<td><input type='radio' name='logo' value='old'> оставить старый логотип<br></td> 
  <td><img src='"
.$path.$image."'  alt=''></td>
  </tr><tr> 
  <td><input type='radio' name='logo' value='new'> загрузить новый логотип<br> </td> 
  <td> <input type='file' name='userfile'></td> 
</tr><tr>
 <td><input type='radio' name='logo' value='no_im'> нет логотипа</td>
<td></td>"
; }
else{
echo 
"<td><input type='radio' name='logo' value='new'> загрузить логотип<br> </td> 
  <td> <input type='file' name='userfile'></td> 
</tr><tr>
 <td><input type='radio' name='logo' value='no_im'> нет логотипа</td>
<td></td>"
;

?>

Как должен выглядеть нынешний обработчик в этом случае?

  Ответить  
 
 автор: cheops   (04.01.2012 в 19:30)   письмо автору
 
   для: Василий   (04.01.2012 в 19:23)
 

Слишком сложно и тяжеловесно получается с радио-кнопками, введите лучше checkbox "Удалить", который появляется только в том случае, если поле logo в таблице db не пустое.

  Ответить  
 
 автор: Василий   (04.01.2012 в 19:39)   письмо автору
 
   для: cheops   (04.01.2012 в 19:30)
 

Вы имеете ввиду вот так?
<?php  
$path 
"img/logo_pu/";
$image $_GET['logo']; 
if (!empty(
$_GET['logo'])) {
echo 
"<td><input type='radio' name='logo' value='old'> оставить старый логотип<br></td> 
  <td><img src='"
.$path.$image."'  alt=''></td>
  </tr><tr> 
  <td><input type='radio' name='logo' value='new'> загрузить новый логотип<br> </td> 
  <td> <input type='file' name='userfile'></td> 
</tr><tr>
 <td><input type='radio' name='logo' value='no_im'> нет логотипа</td>
<td></td>"
; }
else{
echo 
"<td><input type='radio' name='logo' value='new'> загрузить логотип<br> </td> 
  <td> <input type='file' name='userfile'></td> 
</tr><tr>
 <td><input type="
checkbox" name="checkme" checked="checked" /> Удалить логотип</td>
<td></td>"
;

?> 

  Ответить  
 
 автор: cheops   (04.01.2012 в 19:50)   письмо автору
 
   для: Василий   (04.01.2012 в 19:39)
 

Нет, я предлагаю вообще не заставлять пользователя думать над большим количеством вопросов. Лучше оставить поле загрузки, логотипа и возможность его удаления, если он ранее загружался. Если пользователь захочет оставить логотип - он просто не будет загружать новый, если он захочет его заменить - он просто его загрузит. Вот схема (за минусом разметки).
<?php   
$path 
"img/logo_pu/"
$image $_GET['logo'];  

echo 
"<td> <input type='file' name='userfile'></td>";
if (!empty(
$_GET['logo'])) { 
  
// Логотип ранее загружался - показываем его и выводим
  // флажок, позволяющий его удалить
  
echo "<td><img src='".$path.$image."'  alt=''></td>";
  echo 
"<td><input type="checkbox" name="checkme" checked="checked" /> Удалить логотип</td>";

?> 

  Ответить  
 
 автор: Василий   (04.01.2012 в 20:01)   письмо автору
 
   для: cheops   (04.01.2012 в 19:50)
 

если выделить чексбокс на удаление
то выходит надпись "Не был выбран файл для загрузки"

  Ответить  
 
 автор: cheops   (04.01.2012 в 20:10)   письмо автору
 
   для: Василий   (04.01.2012 в 20:01)
 

При замене логотипа, не следует осуществлять проверку того факта, загружен файл или нет. Вернее проверять нужно, но от пользователя ничего дополнительно требовать не надо. Если файл загружен - запускайте механизм замены, если нет - просто заменяйте остальные поля таблицы, не трогая logo вообще.

  Ответить  
 
 автор: Василий   (04.01.2012 в 20:10)   письмо автору
 
   для: Василий   (04.01.2012 в 20:01)
 

вернее, просит загрузить файл в любом случае.
Иначе "Не был выбран файл для загрузки"

  Ответить  
 
 автор: Василий   (04.01.2012 в 21:37)   письмо автору
 
   для: Василий   (04.01.2012 в 20:10)
 

так не получается удалить логотип.
если не грузить файл
выдает ошибку - Не был выбран файл для загрузки"

  Ответить  
 
 автор: Василий   (04.01.2012 в 22:01)   письмо автору
 
   для: Василий   (04.01.2012 в 21:37)
 

когда выбираем "удалить логотип" - логтип удаляется - но надпись выходит "Не был выбран файл для загрузки"
<?php 
   
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'];  
    } 
?>  

  Ответить  
 
 автор: cheops   (04.01.2012 в 22:51)   письмо автору
 
   для: Василий   (04.01.2012 в 22:01)
 

Потому что функция годиться только для загрузки свежего файла и не годиться для обновления... теоретически её можно модифицировать, например, передать четвертый необязательный параметр, равный по умолчанию $update = false, если он будет принимать значение true, значит в системе идет процесс обновления и ошибку "Не был выбран файл для загрузки" выводить не надо.

  Ответить  
 
 автор: Василий   (04.01.2012 в 22:58)   письмо автору
 
   для: cheops   (04.01.2012 в 22:51)
 

так функция загрузки включается при нажатии кнопки "Сохранить изменения"
Функция же прописана в обработчике

  Ответить  
 
 автор: Slo_Nik   (04.01.2012 в 23:05)   письмо автору
 
   для: Василий   (04.01.2012 в 22:58)
 

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

  Ответить  
 
 автор: Василий   (04.01.2012 в 23:29)   письмо автору
 
   для: Slo_Nik   (04.01.2012 в 23:05)
 

так писали что функция не должна срабатывать когда удаляется файл.
она сработает в любом случае

  Ответить  
 
 автор: Василий   (05.01.2012 в 01:26)   письмо автору
 
   для: Василий   (04.01.2012 в 23:29)
 

помогите доработать функцию

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

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