Редактирование материала через форму с наличаем поля file

aaachilov

Новичок
Приветствую!
Ребята такая проблема - вернее не проблема а отсутствие опята и знаний)))
Сделал сейчас все более менее удобно для себя в плане добавления редактирования и удаления материалов через формы.
Изображения и файлы тоже добавляются через формы.
Добавляется все отлично - но зашёл в тупик в вопросе редактирования фалов.
Когда загружаю форму редактирования, то выгружаю в значения value информацию из базы и если что то меняется соответственно обработчик это дело перезаписывает, но проблемы с файлами. Значение по умолчанию поставить нельзя и получается что при редактировании материала поле перезаписывается пустым - на счёт пустого поля вопрос решил таким образом что добавил в обработчике отдельные запросы для полей файлы и картинки и прогнал их через условия - но это получается что ещё два дополнительных запроса к базе...
И так же не видно в форме редактирования есть файл или нет.
Название файла я допустим вывел и ссылку на его удаления с сервера сделал но все же с полем file не могу разобраться.

Посоветуйте как можно решить данную проблемму!
Заранее спасибо!
 

fixxxer

К.О.
Партнер клуба
Если новый файл загружен, обрабатываешь загрузку как положено.
Если нет - оставляешь все как было.
В чем проблема? В операторе if?
 

Linker

Новичок
Если речь о том, как обработать ситуацию $_FILES['name']['error'] === 4
то тогда это уже к вопросу юзабилити, наверное. Тут масса вариантов. Можно в отдельную форму вынести загрузку. Можно оставить в той же форме и дополнительный контрол сделать, кнопку, чекбокс, ссылку, или ещё что-то с надписью "загрузить файл". Можно скрытый блок (слой) в котором поле <input type=file> будет спрятано по-умолчанию... Тут только фантазией разработчика или дизайнера может быть ограничено...
 

KorP

Новичок
Не вижу проблемы и не понимаю зачем там может понадобиться
два дополнительных запроса к базе
зачем файлы пытаться запихнуть в input type мне тоже не ясно
если это картинка - выводим картинку и рядом кнопку удалить, если файл какого то другого типа - ну ярлычок и так же рядом кнопку удалить, ну а ниже инпут, для загрузки новых файлов. как сказал выше fixxxer - с обработкой там нет никаких проблем
 

aaachilov

Новичок
Вот сегодня с 11 часов - уже 3 получается сижу с этим делом. Все сделал как Вы советовали - вывел картики отдельно, те которые имеются, поставил форму для добавления новой и через условие прогнал что если поле файл не заполнено то......... и вот на месте 'то' встал - в запросе к базе есть команда перезаписать поле и не заню как сделать чтоб в одном запросе это поле не перезаписывалось если оно пустое.
И ещё подскажите плиз или ссылочку какую как лучше удалять файлы,в сети множество инфорамции, которая только запутывает.
Заранее спасибо!
 

aaachilov

Новичок
Все с перезаписью решил - просто вернув имеющееся значение перменной если нет информации в поле для файла)))
осталось с удалением решить
 

KorP

Новичок
ну вообще апдейту можно указать какие поля апдейтить, а какие нет
но имхо у тебя структура не правильная как мне кажется
 

AmdY

Пью пиво
Команда форума
я делаю так
PHP:
<input type="file" name="form_ru[photo]" class="f-file ">
<input type="hidden" name="form_ru[photo]" value="<?=$data['photo']?>">
<label><input type="checkbok" onclick="$(this).prev().val('')"/>Открепить файл</label> //в реальности логика чуть сложнее& чтобы востанавливать значение обратно
соотвественно, если приходит файл, то записываю путь в $_POST['form_ru']['photo'], если его нет, то записывается то что и было, если нужно открепить то чекбоксом сбрасываю значение скрытого поля и получаю $_POST['form_ru']['photo'] пустое.
 

aaachilov

Новичок
Возможно конечно что форма не верная!
Но впринципе сейчас пока меня все устраивает и все стало заменяться.
Осталось только с удалением заменёного файла решить....

Вот форма
PHP:
<? 
include("block/db.php");/* Подключаемся к базе данных */
if (isset($_GET['id'])){
$id = $_GET['id'];
}
$resred = mysql_query("SELECT * FROM data WHERE id='$id'",$link);
if (!$resred){
$Err.="Ошибка передачи данных из таблицы data!<br>";
} else {
$red = mysql_fetch_array($resred);};
//  Задаём занчения переменных
$title = $red['title'];
$cat = $red['cat'];
$meta_d = $red['meta_d'];
$description = $red['description'];
$text = $red['text'];
$mini_img = $red['mini_img'];
$meta_k = $red['meta_k'];
$author = $red['author'];
$date = $red['date'];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Редактирование материала</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="lider">
<div id="header"><? include("block/header.php")?></div>
<div id="clr"></div>
<div id="sidmenu"><? include("block/sidmenu.php")?></div>
<div id="cont"><div id="bodyline">Редактирование материала</div>
<div id="content">

<form action="red_nm_sk.php" method="post" name="new_nm" enctype="multipart/form-data"><br>

<table width="100%" border="0">
  <tr>
    <td>Название<br><input name="title" type="text" id='new_nm' value="<?php echo $red['title']; ?>"></td>
  </tr>
  <tr>
    <td>Категория<br>
    <select name="cat" id='vals'>
<?php $categ = mysql_query("SELECT title,id FROM categories",$link);
if (!$categ){
$Err.="Ошибка передачи списка категорий!<br>";
} else {
$cats = mysql_fetch_array($categ);};
do {
	printf ("<option value='%s'>%s</option>",$cats['id'],$cats['title']);
	}
while ($cats = mysql_fetch_array($categ));   
?>      </select>
    </td>
  </tr>
  <tr>
    <td>META Описание<br><input name="meta_d" type="text" id='new_nm' value="<?php echo $red['meta_d']; ?>"></td>
  </tr>
  <tr>
      <td><br>Краткое описание материала<br><textarea name="description" cols="20" rows="6" id='new_nm' ><?php echo $red['description']; ?></textarea></td>
  </tr>
  <tr>
    <td><br>Полный текст материала<br><textarea name="text" cols="20" rows="12" id='new_nm' ><?php echo $red['text']; ?></textarea></td>
  </tr>
  <tr>
     <td>
     <span style="padding:0 10px;"><img src="<?php echo $red['mini_img']; ?>" width='60' height='60' border="0" alt="" /></span>
     </td>
  </tr>
  <tr>
   <td>Изображение<br><input name="file" type="file" id='vals'></td>
  </tr>
  <tr>
     <td>Теги<br><input name="meta_k" type="text" id='new_nm' value="<?php echo $red['meta_k']; ?>"></td>
  </tr>
  <tr>
      <td>Автор<br><input name="author" type="text" id='new_nm' value="<?php echo $red['author']; ?>"></td>
  </tr>
  </table>
  <input name="imgh" type="hidden" value="<?php echo $red['mini_img']; ?>">
 <input name="id" type="hidden" value="<?php echo $id; ?>">
<input name="sub_nm" type="submit" value="Редактировать">
</form>





</div>
</div>
<div id="clr"></div>
<div id="footer"><? include("block/footer.php")?></div>
</div>
</body>
</html>
Вот обработчик
PHP:
<?php
include("block/db.php");/* Подключаемся к базе данных */
foreach($_POST as $key => $value) {  
    //сначала делаем обработку, которая не испортит данные,  
    //если их придется выводить в форму снова, при ошибке  
    $value=trim($value); // убираем пробелы в начале и в конце переменной.  
    if (get_magic_quotes_gpc()) $value = stripslashes($value); //убираем слеши, если надо  
    $value=htmlspecialchars($value,ENT_QUOTES); //заменяем служебные символы HTML на эквиваленты  
    $_POST[$key]=$value; //все изменения записываем в массив $_POST  
    //дальше делаем изменения, которые пойдут только в файл,  
    //а в форму их выводить не нужно.  
    $value=str_replace("\r","",$value); // заменяем все переводы строк  
    $value=str_replace("\n","<br>",$value); //на <br>  
    $msg[$key]=$value; //и присваиваем новые значения элементам массива $msg.  
  } 
  // задаём значение переменных
if (isset($_POST['id'])){
$id = $_POST['id'];
}
if (isset($_POST['imgh'])){
$imgh = $_POST['imgh'];
}
if (isset($_POST['title'])){
$title = $_POST['title'];
}
if (isset($_POST['cat'])){
$cat = $_POST['cat'];
}
if (isset($_POST['meta_d'])){
$meta_d = $_POST['meta_d'];
}
if (isset($_POST['description'])){
$description = $_POST['description'];
}
if (isset($_POST['text'])){
$text = $_POST['text'];
}
if (isset($_POST['meta_k'])){
$meta_k = $_POST['meta_k'];
}
if (isset($_POST['author'])){
$author = $_POST['author'];
}
$UDate = date("Y-m-d");
// загружаем картинку на сервер
$file = $_FILES['file']['tmp_name'];
$filename = $_FILES['file']['name'];
if(!empty($file))
{
  ini_set('memory_limit', '32M'); 
  $maxsize = "100000000";
  $extentions = array( "gif","txt","tpl","jpg","jpeg","png","zip", "rar","7z","tif","psd","swf","flv","avi","mpeg","mp4","mp3","wav", "ogg","ogm","doc","xls","ppt");
  $size = filesize ($_FILES['file']['tmp_name']); 
  $type = strtolower(substr($filename, 1+strrpos($filename,".")));
  $new_name = 'file-'.time().'.'.$type; 
  if($size > $maxsize)
  { 
     echo "Файл больше 100 мб. Уменьшите размер вашего файла или загрузите другой. <br><a href='' onClick=window.close();>Закрыть окно</a>";
  } 
  elseif(!in_array($type,$extentions)) 
  { 
    echo ' <b>Файл имеет недопустимое расширение</b>. Допустимыми являются форматы изображений, видеофайлов, флэш-роликов и текстовых документов. <br>';
  } 
  else 
  { 
    if (copy($file, "../upload/articles/".$new_name)){
			$dfre = "/upload/articles/$new_name";
	 	} else{
    echo 'Файл НЕ был загружен.';
	}
  } 
}
// Выбираем какое изображение писать в базу
if (!empty($dfre)) {
	$mini_img = "$dfre";	
} else{
	$mini_img = "$imgh";
};
 ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Редактирование материала</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="lider">
<div id="header"><? include("block/header.php")?></div>
<div id="clr"></div>
<div id="sidmenu"><? include("block/sidmenu.php")?></div>
<div id="cont"><div id="bodyline">Редактирование материала</div>
<div id="content">

<?php 
$ruse = mysql_query ("UPDATE `data` SET title='$title', cat='$cat', meta_d='$meta_d', description='$description', text='$text', mini_img='$mini_img', meta_k='$meta_k', author='$author', date='$UDate' WHERE id='$id'");
if ($ruse == 'true') {
echo 'Материал успешно изменён.';
} else {
echo "Не удалось изменить материал<br><input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>";	
}
?>
<?php if ($Err) echo '<font color=red><b>'.$Err.'</b></font><br>';?>
</div>
</div>
<div id="clr"></div>
<div id="footer"><? include("block/footer.php")?></div>
</div>
</body>
</html>
 
Сверху