Загрузка файла на сервер не работает.

Vuzy

Новичок
Не могу понять в чем дело. Пишу скрипт который будет загружать картинку на сервер. Я в этом не силен. Поэтому решил опустить изменение размеров картинки и грузить как есть. Пока что. Но на стадии тестирования возникла ошибка следующего рода:
есть 2 формы которые отличаются друг от друга параметрами action. В одной sendnewfile в другой sendoldfile. Сделано для того что бы можно было загрузить новую фотку или обновить старую.
HTML:
<form enctype="multipart/form-data" action="uploadpic.php?form=sendnewfile&id=<? echo $_GET[id]; ?>" method="POST"><BR>
<!-- Поле MAX_FILE_SIZE должно быть указано до поля загрузки файла -->
<input type="hidden" name="MAX_FILE_SIZE" value="9999999999" /><BR>
<!-- Название элемента input определяет имя в массиве $_FILES -->
ЗАГРУЗИТЬ ФАЙЛ:<BR><input name="picture" type="file" /><BR>
<input type="submit" value="ЗАГРУЗИТЬ" /><BR>
</FORM>
и скрипт обработчик:
PHP:
elseif($_GET[form]==sendnewfile)
{
$t=time();
  $newname=md5($_FILES["picture"]["name"].$t);
  $typefile=explode('.', $_FILES["picture"]["name"]);
  $typefile=$typefile[1];
  $file=$newname.".".$typefile;
  if(copy($_FILES["picture"]["tmp_name"], "img/".$file))
{
//echo 'Файл загружен. обновляю информацию в БД';
$sql='UPDATE tovar SET photo="'.$file.'" Where id='.$_GET[id];
mysql_query($sql) or die (mysql_error());
//echo 'Файл добавлен в базу.';
echo '<script type="text/javascript">';
echo 'window.location.href="'.$url.'";';
echo '</script>';
}
else
{
echo 'ОШИБКА ЗАГРУЗКИ';
}
Который у меня почему то не работает.
Возвращает ошибку: copy() [function.copy]: Filename cannot be empty.
Я так понимаю файл банально не передался. Но вот я не могу понять из-за чего. может вы мне поможете разобраться.

Вторая половина скрипта где файл обновляется работает на ура. Формы индентичны скрипт тоже за исключением того что в обновлении фото удаляется старая фото с сервера.
PHP:
elseif($_GET[form]==sendoldfile)
{
  $t=time();
  $newname=md5($_FILES["picture"]["name"].$t);
  $typefile=explode('.', $_FILES["picture"]["name"]);
  $typefile=$typefile[1];
  $file=$newname.".".$typefile;
  if(copy($_FILES["picture"]["tmp_name"], "img/".$file))
{
    //echo 'новый файл загружен. Вношу информацию о новом файле и удаляю старый.';
    unlink('img/'.$b[photo]);
    $sql='UPDATE tovar SET photo="'.$file.'" WHERE id='.$_GET[id];
    mysql_query($sql) or die (mysql_error());
    //echo 'Поидее все хорошо.';
    echo '<script type="text/javascript">';
    echo 'window.location.href="'.$url.'";';
    echo '</script>';
}
else
{ echo 'ОШИБКА ЗАГРУЗКИ'; }
 

WMix

герр M:)ller
Партнер клуба
попробуй эту таблетку
не по теме но
PHP:
elseif($_GET[form]==sendnewfile)
пишется так
PHP:
elseif($_GET['form']=='sendnewfile')
. и если вначале скрипта написать
PHP:
error_reporting(E_ALL);
то можно увидеть больше проблем
 
  • Like
Реакции: Vuzy

Vuzy

Новичок
оффтоп:
Да с точки зрения синтаксиса так писать правильнее.
PHP:
elseif($_GET['form']=='sendnewfile')
Но ведь
PHP:
elseif($_GET[form]==sendoldfile)
работает, а значит всё хорошо. Кавычки нужны только если предусмотрен разделитель вроде пробела или ? & но вряд-ли у меня получится передать их с помощью $_GET[]
Почитал про POST_MAX_SIZE. не пойму. Я загружаю файл размером в 2,22М а там написано что стандартно 8М.
тем не менее уменьшил файл и о чудо он стал грузится без проблем. однако теперь перестали работать переменные $_GET. В частности не делается запрос на обновление ссылки на картинку в базе. и не удаляется старый файл. так как unlink не получила ссылки. Запрос ведется из единого поля $_GET['id'] и он передается в форму с помощью echo $_GET['id']; но я так понимабю если выключить еррор репорт все заработает?

про репрт ошибок спасибо. Отладил все кавычки.

Изначально вся проблемма с загрузкой закрылась в параметре:
upload_max_filesize2M2M
он то и не давал мне загрузить файл 2,22 несмотря на значение.
post_max_size8M8M
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
одно дело вся почта другое файл в почте.
зачем тебе и гет и пост? кидай все переменные почтой а после обработки реврайться
 

Vuzy

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

WMix

герр M:)ller
Партнер клуба
НАпример Айдишку не впихнуть в почту без формы
простые hidden поля?
можно делать и так как ты это делаешь, но меня всегда выворачивало от
Код:
action="?id=XXX" method="post"
хотя пользуюсь подобным под zend
в чем затык, ищи сам. погляди request в firebug, print_r($_REQUEST) в скрипте...
http://phpfaq.ru/debug
работает, а значит всё хорошо. Кавычки нужны только если предусмотрен разделитель вроде пробела или ? & но вряд-ли у меня получится передать их с помощью $_GET[]
до тех пор пока не напишут define('form', .... ) bzw define('sendoldfile', .... )
 
Последнее редактирование:
Сверху