|
|
|
| Пользователь грузит логотип, записываем в базу
<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>";
}
?>
|
Как должен выглядеть нынешний обработчик в этом случае? | |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 19:23)
| | Слишком сложно и тяжеловесно получается с радио-кнопками, введите лучше checkbox "Удалить", который появляется только в том случае, если поле logo в таблице db не пустое. | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Василий
(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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.01.2012 в 19:50)
| | если выделить чексбокс на удаление
то выходит надпись "Не был выбран файл для загрузки" | |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 20:01)
| | При замене логотипа, не следует осуществлять проверку того факта, загружен файл или нет. Вернее проверять нужно, но от пользователя ничего дополнительно требовать не надо. Если файл загружен - запускайте механизм замены, если нет - просто заменяйте остальные поля таблицы, не трогая logo вообще. | |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 20:01)
| | вернее, просит загрузить файл в любом случае.
Иначе "Не был выбран файл для загрузки" | |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 20:10)
| | так не получается удалить логотип.
если не грузить файл
выдает ошибку - Не был выбран файл для загрузки" | |
|
|
|
|
|
|
|
для: Василий
(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'];
}
?>
|
| |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 22:01)
| | Потому что функция годиться только для загрузки свежего файла и не годиться для обновления... теоретически её можно модифицировать, например, передать четвертый необязательный параметр, равный по умолчанию $update = false, если он будет принимать значение true, значит в системе идет процесс обновления и ошибку "Не был выбран файл для загрузки" выводить не надо. | |
|
|
|
|
|
|
|
для: cheops
(04.01.2012 в 22:51)
| | так функция загрузки включается при нажатии кнопки "Сохранить изменения"
Функция же прописана в обработчике | |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 22:58)
| | Вам написал Cheops, что в Вашем случае эту функцию надо доработать до Ваших нужд.
Всё правильно, Вы нажали кнопку, данные формы ушли, функция сработала | |
|
|
|
|
|
|
|
для: Slo_Nik
(04.01.2012 в 23:05)
| | так писали что функция не должна срабатывать когда удаляется файл.
она сработает в любом случае | |
|
|
|
|
|
|
|
для: Василий
(04.01.2012 в 23:29)
| | помогите доработать функцию | |
|
|
|