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

Форум PHP

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

 

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

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

тема: Не добавляет картинку при редактировании
 
 автор: scva   (10.07.2009 в 10:12)   письмо автору
 
 

Код формы

<?php 
 
if (!isset($id))
{
$result=mysql_query("select * from brand");
      
$res=mysql_fetch_assoc($result);

do

{
printf (''.$res ['brand'].'  ( <a href="'.$_SERVER['PHP_SELF'].'?id='.$res ['id'].'" class="edit">ред</a> )<br>',$res["brand"], $res["id"]);
}
while  (
$res=mysql_fetch_assoc($result));
}
else 
{
$result=mysql_query("select * from brand WHERE id=$id");
$res=mysql_fetch_assoc($result);
printf ('
<form action="edit1.php" method="post" enctype="multipart/form-data">
<p>Название<br>  
<input name="brand" type="text" size="60" value="'
.$res ['brand'].'"></p>
<p>Новость<br> 
<textarea name="des" cols="60" rows="10">'
.$res ['des'].'</textarea></p><br>
Картинка
<input name="filename" type="file">
<input name="id" type="hidden" value="'
.$res ['id'].'">
<input name="submit" type="submit" value="Редактировать" class="text">
</form>'
);
}  
?>


Обработчик

<?php 

if (isset ($_GET['id'])) {$id=$_GET['id'];} 
if(isset(
$_FILES['filename']) && !$_FILES['filename']['error'] && isset($_POST['brand']) && isset($_POST['des']))
{
  
$result mysql_query ("UPDATE  brand SET brand='{$_POST['brand']}', des='{$_POST['des']}' WHERE id='{$_POST['id']}'")  or die("error");
   if (isset(
$_POST['filename']) && move_uploaded_file($_FILES['filename']['tmp_name'], "/home/e-toy.su/www/img/b{$_POST['id']}.jpg") )
   {
    echo 
"Добавлено";
    }
    else { echo 
"Не добавлено";}
  }
    
?>


  Ответить  
 
 автор: Николай2357   (10.07.2009 в 10:21)   письмо автору
 
   для: scva   (10.07.2009 в 10:12)
 

>Код формы
>Обработчик
Мануал
while()
printf()
move_uploaded_file()

  Ответить  
 
 автор: scva   (10.07.2009 в 11:11)   письмо автору
 
   для: Николай2357   (10.07.2009 в 10:21)
 

супер, я все понял))))

Укажите мне ошибки и если можно русскими словами объясните

  Ответить  
 
 автор: Николай2357   (10.07.2009 в 12:15)   письмо автору
 
   для: scva   (10.07.2009 в 11:11)
 

По первому пункту использовать while. Если любопытно почему, тут есть поиск и куча тем, где разбираются подобные ляпы. После выхода в свет суперпупервидеокурса г-на Попова это стало притчей воязыце.

По второму пункту. Тут совершенно не нужна конструкция printf(), к тому же совершенно неверно использованная. Сделайте проще:
<?
echo 
<form action="edit1.php" method="post" enctype="multipart/form-data"> 
<p>Название<br>   
<input name="brand" type="text" size="60" value="'
.$res ['brand'].'"></p> 
<p>Новость<br>  
<textarea name="des" cols="60" rows="10">'
.$res ['des'].'</textarea></p><br> 
Картинка 
<input name="filename" type="file"> 
<input name="id" type="hidden" value="'
.$res ['id'].'"> 
<input name="submit" type="submit" value="Редактировать" class="text"> 
</form>' 


По третьему.
Проверка никуда не годится. Вот это что?
!$_FILES['filename']['error']

Напишите в начало обработчика

<pre>
<?
print_r
($_FILES);
?>
</pre>

и поэксперементируйте. Посмотрите что в этом массиве и как Вы это пытаетесь использовать.

  Ответить  
 
 автор: Петр   (10.07.2009 в 12:37)   письмо автору
 
   для: Николай2357   (10.07.2009 в 12:15)
 

!$_FILES['filename']['error'] - это самая оптимальная проверка, во всех других случаях это поле будет содержать какую-либо информацию (если файл не подгружали или произошла ошибка) и только если все ОК, то это поле равно 0.

  Ответить  
 
 автор: Николай2357   (10.07.2009 в 16:04)   письмо автору
 
   для: Петр   (10.07.2009 в 12:37)
 

>!$_FILES['filename']['error'] - это самая оптимальная проверка
И всё?? Ну если Вам нужна куча всякого д... непонятно чего под флагом gif, то можно конечно посчитать её оптимальной. А Вы в курсе, что IE исполняет js из текстовых файлов?
Напишите это
<script type="text/javascript" language="javascript">
alert(document.cookie)
</script> 
сохраните с расширением.gif (как этот скрипт делает) и запустите в Эксплорере.
Вот это оптимально.

  Ответить  
 
 автор: sim5   (10.07.2009 в 16:09)   письмо автору
 
   для: Николай2357   (10.07.2009 в 16:04)
 

Если сохранить как gif, и вставить как картинку, то IE ничего не выполнит.

  Ответить  
 
 автор: Николай2357   (10.07.2009 в 16:51)   письмо автору
 
   для: sim5   (10.07.2009 в 16:09)
 

Это понятно, но напрямую то выполняет. А вообще это просто для примера.
Согласитесь, проверка ведь действительно никудышняя.

  Ответить  
 
 автор: Trianon   (10.07.2009 в 17:03)   письмо автору
 
   для: Петр   (10.07.2009 в 12:37)
 

оптимальной она станет лишь в случае $_FILES['filename']['error'] === 0
Можете объяснить, почему именно.

  Ответить  
 
 автор: scva   (10.07.2009 в 14:00)   письмо автору
 
   для: Николай2357   (10.07.2009 в 12:15)
 

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

при добавлении

<pre>
<?
print_r
($_FILES);
?>
</pre> 


выводит

Array
(
)

  Ответить  
 
 автор: sim5   (10.07.2009 в 14:04)   письмо автору
 
   для: scva   (10.07.2009 в 14:00)
 

Если при выборе и загрузке файла вы получаете пустой массив $_FILES, то проверьте, разрешена ли у вас вообще загрузка файлов на сервер.

  Ответить  
 
 автор: scva   (10.07.2009 в 14:46)   письмо автору
 
   для: sim5   (10.07.2009 в 14:04)
 

Загрузка на сервер разрешена, вообщем выкладываю весь код, если кто поможет, тому огромное человеческое спасибо скажу

<? 
if (isset ($_GET['id'])) {$id=$_GET['id'];} 
if (!isset(
$id))
{
$result=mysql_query("select * from `tovar`");
      
$res=mysql_fetch_assoc($result);

do

{
printf ('<tr><td><h4>'.$res ['title'].'</h4> бренд - <strong> '.$res ['brand'].'</strong> </td><td> ( <a href="'.$_SERVER['PHP_SELF'].'?id='.$res ['id'].'" class="edit">ред</a> )<br>

</td></tr> <tr bgcolor="F9E8E9">
<td colspan="2"></td>
</tr>'
,$res["id"], $res["category"], $res["title"]);
}
while  (
$res=mysql_fetch_assoc($result));
}
else 
{
$result=mysql_query("select * from tovar WHERE id=$id");
      
$res=mysql_fetch_assoc($result);
echo 
'
<form action="edit_tovar1.php" method="post">
<p>Назание товара<br>  
<input name="title" type="text" size="60" value="'
.$res ['title'].'"></p>

<p>Артикул<br>  
<input name="articul" type="text" size="60" value="'
.$res ['articul'].'"></p>

<p>Категория<br>  
<input name="category" type="text" size="60" value="'
.$res ['category'].'">
</p>


<p>Фирма производитель<br>  
<input name="brand" type="text" size="60" value="'
.$res ['brand'].'">
</p>

<p>Цена <br>  
<input name="price" type="text" size="60" value="'
.$res ['price'].'">
</p>
<p>
Картинка 
<input name="filename" type="file"> 
<input name="filename" type="hidden" value="'
.$res ['id'].'"> 
</p>
<p>Краткое описание (META description)<br> 
<input name="des" type="text" size="110" value="'
.$res ['des'].'">
<p>

<p>Полное описание<br> 
<textarea name="description" cols="60" rows="10">'
.$res ['description'].'</textarea></p>
<p>

<p>Есть в наличии<br>
<input name="yamarket" type="text" size="10" value="'
.$res ['yamarket'].'">
<p>

<p>Market-приоритетное размещение <br> 
<input name="spec_ya" type="text" size="10" value="'
.$res ['spec_ya'].'">
<p>

<p>Yandex-market наличие <br> 
<input name="nal_ya" type="text" size="10" value="'
.$res ['nal_ya'].'">
<p>

<p>Спецразмещение<br> 
<input name="spec" type="text" size="10" value="'
.$res ['spec'].'">
<p>


<input name="id" type="hidden" value="'
.$res ['id'].'">
<input name="submit" type="submit" value="Редактировать" class="text">


</form>'
;
}  
?>


обработчик


<pre> 
<?
print_r
($_FILES);
?>
</pre> 

<? 
if (isset($_POST['title']))          {$title $_POST['title'];}
if (isset(
$_POST['articul']))          {$articul $_POST['articul'];}
if (isset(
$_POST['category']))          {$category $_POST['category'];}
if (isset(
$_POST['brand']))          {$brand $_POST['brand'];}
if (isset(
$_POST['price']))          {$price $_POST['price'];}
if (isset(
$_POST['des']))          {$des $_POST['des'];}
if (isset(
$_POST['description']))          {$description $_POST['description'];}
if (isset(
$_POST['yamarket']))          {$yamarket $_POST['yamarket'];}
if (isset(
$_POST['spec_ya']))          {$spec_ya $_POST['spec_ya'];}
if (isset(
$_POST['nal_ya']))          {$nal_ya $_POST['nal_ya'];}
if (isset(
$_POST['spec']))          {$spec $_POST['spec'];}
if (isset(
$_POST['id']))          {$id $_POST['id'];}
if (isset(
$_POST['filename']))          {$filename $_POST['filename'];}

if (isset(
$_FILES['filename']) && !$_FILES['filename']['error'] && isset($title) && isset($articul) && isset($category) && isset($brand) && isset($price) && isset($des) && isset($description) && isset($yamarket) && isset($spec_ya) && isset($nal_ya) && isset($spec) )
  {
$result mysql_query ("UPDATE  tovar SET title='$title', articul='$articul', category='$category', brand='$brand', price='$price', des='$des', description='$description', yamarket='$yamarket', spec_ya='$spec_ya', nal_ya='$nal_ya', spec='$spec' WHERE id='{$_POST['id']}'")  or die("error");

  if (isset(
$_POST['filename']) && move_uploaded_file($_FILES['filename']['tmp_name'], "../tovar/b{$_POST['id']}.jpg") )
   {
echo(
"<font style=\"font-size:8px;\">Картинка успешно загружена</font> <br>");
new_img_resizeb ("../tovar/b$id.jpg"500500$mid'tovar');
new_img_resize ("../tovar/b$id.jpg"150,150$mid'tovar');
    }
    else { echo 
"Не добавлено";}
  } 
    
?>


new_img_resizeb - функция ресайза картинок

  Ответить  
 
 автор: sim5   (10.07.2009 в 15:33)   письмо автору
 
   для: scva   (10.07.2009 в 14:46)
 

Вы читаете о том, что вам говорят? Вам уже указывали на do...while, и проку? Вам уже говорили о enctype="multipart/form-data", и где оно у вас в форме? И нельзя вот так:
$id=$_GET['id']
а потом использовать этот $id в запросе, это БОООООЛЬШАЯ ДЫРА!
В общем для начала:
<?
$id 
= isset($_GET['id']) ? intval($_GET['id']) : NULL;
if (!
$id) { 
  
$result=mysql_query("select * from `tovar`"); 
  while  (
$res=mysql_fetch_assoc($result))
  print 
'<tr><td><h4>'.$res ['title'].'</h4> бренд - <strong> '.$res ['brand'].'</strong> </td><td> 
        ( <a href="'
.$_SERVER['PHP_SELF'].'?id='.$res ['id'].'" class="edit">ред</a> )<br> 
         </td></tr> <tr bgcolor="F9E8E9"><td colspan="2"></td> 
         </tr>'
,$res["id"], $res["category"], $res["title"]); 
} else { 
  
$result=mysql_query("select * from tovar WHERE id=$id");
//......

А в форме: <form action="edit_tovar1.php" method="post" enctype="multipart/form-data">

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

  Ответить  
 
 автор: scva   (10.07.2009 в 17:39)   письмо автору
 
   для: sim5   (10.07.2009 в 15:33)
 

Спасибо проблему решил, картинки добавляются, но возникла другая проблема, теперь не редактируется просто текст, добавляются только картинки, а вот данные не меняются


<? 
if (isset($_POST['title']))          {$title $_POST['title'];}
if (isset(
$_POST['articul']))          {$articul $_POST['articul'];}
if (isset(
$_POST['category']))          {$category $_POST['category'];}
if (isset(
$_POST['brand']))          {$brand $_POST['brand'];}
if (isset(
$_POST['price']))          {$price $_POST['price'];}
if (isset(
$_POST['des']))          {$des $_POST['des'];}
if (isset(
$_POST['description']))          {$description $_POST['description'];}
if (isset(
$_POST['yamarket']))          {$yamarket $_POST['yamarket'];}
if (isset(
$_POST['spec_ya']))          {$spec_ya $_POST['spec_ya'];}
if (isset(
$_POST['nal_ya']))          {$nal_ya $_POST['nal_ya'];}
if (isset(
$_POST['spec']))          {$spec $_POST['spec'];}
if (isset(
$_POST['id']))          {$id $_POST['id'];}
if (isset(
$_POST['filename']))          {$filename $_POST['filename'];}
if (isset(
$_POST['opisanie']))          {$opisanie $_POST['opisanie'];}

if (isset(
$_FILES['filename']) && !$_FILES['filename']['error'] && isset($title
&& isset(
$articul) && isset($category) && isset($brand
&& isset(
$price) && isset($des) && isset($description
&& isset(
$yamarket) && isset($spec_ya) && isset($nal_ya) && isset($spec
&& isset(
$opisanie) )
  {
$result mysql_query ("UPDATE  tovar SET title='$title', articul='$articul', 
category='
$category', brand='$brand', price='$price', des='$des', 
description='
$description', opisanie='$opisanie', 
yamarket='
$yamarket', spec_ya='$spec_ya', nal_ya='$nal_ya', 
spec='
$spec' WHERE id='{$_POST['id']}'")  or die("error");


$res mysql_query("SELECT max(id) AS mid FROM tovar WHERE title='$title';");
  
$l mysql_fetch_assoc($res);
  
$mid $l['mid'];
  
mysql_free_result($res);
  
  if (isset(
$_POST['filename']) && move_uploaded_file($_FILES['filename']['tmp_name'], "../tovar/b{$_POST['id']}.jpg") )
   if(
file_exists("../tovar/b$mid.jpg"))
{
echo(
"<font style=\"font-size:10px;\">Картинка успешно загружена</font><br><br>
<a href='edit_tovar.php'>Добавить еще</a><br><br>
<a href='manager.php'>На администраторскую</a>"
);
new_img_resizeb ("../tovar/b$mid.jpg"500500$mid'tovar');
new_img_resize ("../tovar/b$mid.jpg"150,150$mid'tovar');
}
    else { echo 
"Не добавлено";}
  } 
    
?>


  Ответить  
 
 автор: sim5   (10.07.2009 в 17:46)   письмо автору
 
   для: scva   (10.07.2009 в 17:39)
 

$_POST['filename'] - от куда это? Вам уже говорили об этом, не будет такого в $_POST массиве! Элемент формы типа file будет только в массиве $_FILES! Зачем вы ставите в условие то, чего не существует в природе?
У вас обязательно условие, что все поля формы должны быть заполнены, а если не заполнены, тогда что? Где логика у вас?

PS. Так у вас так скрытое поле называется, как поле tile. Зачем? Вообще зачем оно нужно?

  Ответить  
 
 автор: scva   (10.07.2009 в 18:04)   письмо автору
 
   для: sim5   (10.07.2009 в 17:46)
 

Спасибо, что помогаете!!!
Но запутался я окончательно

Пробывал так, тоже никаких изменений

$res = mysql_query("SELECT max(id) AS mid FROM tovar");
  $l = mysql_fetch_assoc($res);
  $mid = $l['mid'];
  mysql_free_result($res);
  
  if (move_uploaded_file($_FILES['filename']['tmp_name'], "../tovar/b{$_POST['id']}.jpg") )
   if(file_exists("../tovar/b$mid.jpg"))

  Ответить  
 
 автор: sim5   (10.07.2009 в 18:17)   письмо автору
 
   для: scva   (10.07.2009 в 18:04)
 

Я не об этом, бог с ней с картинкой, загружается и слава богу, вот только обязательно нужно проверять, что вам загружают, если конечно это не админ часть и админом является хозяин, который себе же вредить не будет.
Зачем у вас это скрытое поле? Если ваше условие, это заполнение всех полей формы, то значит даже одно незаполненное поле уже причина возврата формы назад пользователю, для его заполнения. Где у вас это?
У вас весь скрипт не имеет логической структуры.

  Ответить  
 
 автор: scva   (10.07.2009 в 22:26)   письмо автору
 
   для: sim5   (10.07.2009 в 18:17)
 

Вообщем ничего не получилось

  Ответить  
 
 автор: sim5   (10.07.2009 в 22:47)   письмо автору
 
   для: scva   (10.07.2009 в 22:26)
 

К примеру. Вы пишите этот магазин для себя, вы будете его владельцем, и администратором, либо пишите его кому-то, и он будет единственным администратором своего магазина.
Тогда прверки на сервере: isset($title) && isset($articul) && isset($category) && isset($brand).... и т.д. можно не делать, а возложить этот "сервис" на сторону клиента - на JavaScript. То есть, заполняемость полей, их корректность при заполнении, все делать на стороне клиента, а на сервере получать уже корректные данные. Кстати, isset(переменная) не проверяет пуста ли она, она проверяет установлена ли таковая, более ничего. А объявленная переменная, даже с пустым значением вернет вам при такой проверке true.
Если же иначе, то принимаемые данные от формы нужно обязательно проверять на сервере, чего вы вообще не делаете. К тому же, вы пытаетесь проверить (как я уже говорил не правильно) все ли данные заполнены, а значит надо полагать, что условием является заполнение всех полей. В таком случае даже одно не заполненное поле формы, это ошибка, а значит нужно вернуть клиенту форму назад, с соответствующим сообщением. Проверка полей формы, это значит проверка на допустимость вводимых данных, например, цена не может быть символом, а только числом, и если это символы (все мы можем ошибаться при вводе), значит опять ошибка, опять возврат формы.... И так далее.
Таким образом должно все работать. У вас же этого нет. Да и изображение вы не задумываясь отправляете в каталог, а лишь только затем делаете его ресайз, почему?
И всю эту работу можно описать одним скриптом, кстати это будет удобнее, не зачем разбивать его на два, как у вас.
В общем подумайте сначала над логикой работы вашей задачи, а уж затем задавайтесь более мелкими решениями в ней.

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

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