[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление фото
Саньчес
Здравствуйте !
Написал код на загрузку и удаление фотографий в папку и в результате удаление фото не работает. Код писал по книжке "100" раз перечитал, перепроверил всё правильно - по книжке, облазил пол интернета, и не могу понять что не так. Помогите разобраться, мне кажется что запрос echo не правильно составлен
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1$name".$file."\">Удалить </a><br>";
Вот такие ошибки выдаёт в браузере :
Undefined index: sent ... on line 11
Undefined variable: name ... on line 71
После загрузки фото при удалении выдаёт
Undefined index: sent ... on line 58
Вот полностью код.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Загрузка и удаление изображения на сервер</title>
</
head>
<
body>
<?php
// имя папки для сохранения записываеться в переменную.
$folder="img";
if($_POST['sent'])
{
// если папка не существует то она создаёться.
if(!file_exists($folder))
{ mkdir($folder,0755); }
// проверка размера файла
if($_FILES['foto']['size']> 10000000)
{ $size="<br>Фаил слишком велик"; }
// проверка допустимого ли типа фаил.
if(!(
$_FILES['foto']['type'] == 'image/pjpeg' ||
$_FILES['foto']['type'] == 'image/jpeg' ||
$_FILES['foto']['type'] == 'image/jpg' ||
$_FILES['foto']['type'] == 'image/png' ||
$_FILES['foto']['type'] == 'image/gif' ))
{ $size.="<br>Фаил имеет не разрешённый тип.<br>"; }
// сохранение файла при отсуцтвии ошибок
if(!$size)
{
// генерация уникального имени
$name=uniqid("");
// добавление расширения к имени файла
switch($_FILES['foto']['type'])
{
case 'image/pjpeg' :$name.=".jpg";
break;
case 'image/jpeg' :$name.=".jpg";
break;
case 'image/jpg' :$name.=".jpg";
break;
case 'image/png' :$name.=".png";
break;
case 'image/gif' :$name.=".gif";
break;
}
// добавление имени папки к имени файла
$name=$folder."/".$name;
// копирование загруженного файла в папку для храниния
copy($_FILES['foto']['tmp_name'], $name);
}
else
{ echo "<h2><font color=red>".$size."</font></h2>"; }
}

// удаление файла
$folder="img";
if($_GET['sent']==1)
{
$name=urldecode($_GET['name']);
$del=$folder."/".$name;
@unlink($del);
}
// отображение геперссылок на хранящиеся в папке файлы
echo "<h2>Ранее загруженные файлы</h2>";
$i=1;
$desclist=opendir($folder);
while ($file = readdir($desclist))
{
if(is_file($folder."/".$file))
{ echo "<a href=\"".$folder."/".$file."\" target=\"_blank\">Фото_".$i."</a> - ";
$file=urlencode($file);
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1$name".$file."\">Удалить </a><br>";
$i++; }
}

closedir($desclist);
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<
input type="hidden" name="sent" value="1" />
<
input type="file" name="foto" /> <br /><br />
<
input type="submit" value="Загрузить " />
<
input type="reset" value="Сброс" />
</
form>
</
body>
</
html>

Заранее большое спасибо !



Спустя 3 минуты, 25 секунд (10.02.2012 - 16:25) inpost написал(а):
if($_POST['sent']) - проверка на Буллеан. То есть переменная обязана существовать, чтобы её проверять. Если так было в книге, то книгу в мусорку smile.gif
В твоём случае проверку надо делать на то, что существует ли $_POST, то есть
if(isset($_POST['sent']))

Спустя 37 секунд (10.02.2012 - 16:25) nugle написал(а):
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1$name".$file."\">Удалить </a><br>";

поменяй на
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1&name=".$file."\">Удалить </a><br>";



Спустя 28 минут, 59 секунд (10.02.2012 - 16:54) Саньчес написал(а):
Цитата
if($_POST['sent']) - проверка на Буллеан. То есть переменная обязана существовать, чтобы её проверять. Если так было в книге, то книгу в мусорку smile.gif
В твоём случае проверку надо делать на то, что существует ли $_POST, то есть
if(isset($_POST['sent']))
- Здесь мне всё понятно, а вот книжку выкидывать жалко unsure.gif
А вот здесь не совсем понятно -
Цитата
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1&name=".$file."\">Удалить </a><br>";
разница в чём &name - $name почему то мне кажется что это одно и тоже .. или я ошибаюсь.

Спустя 2 минуты, 41 секунда (10.02.2012 - 16:57) inpost написал(а):
$name - это переменная, и выведется только то, что в ней.
А тебе надо не переменную вывести, а имя для $_GET подставить.

Спустя 4 минуты, 23 секунды (10.02.2012 - 17:02) walerus написал(а):
Цитата
разница в чём &name - $name почему то мне кажется что это одно и тоже .. или я ошибаюсь.


Поиграем в игру - найди отличия.

&name
$name

wink.gif

Спустя 1 минута, 29 секунд (10.02.2012 - 17:03) Саньчес написал(а):
Только что обнаружил что после загрузки фото если обновить страницу то фото ещё раз загружается ... rolleyes.gif, не вот эту ли переменную $i++ надо отчистить и как это сделать. Извините что откланяюсь от темы, но пока удаление не работает ...

Спустя 37 минут, 19 секунд (10.02.2012 - 17:40) walerus написал(а):
Цитата (Саньчес @ 10.02.2012 - 14:03)
Только что обнаружил что после загрузки фото если обновить страницу то фото ещё раз загружается ... rolleyes.gif, не вот эту ли переменную $i++ надо отчистить и как это сделать. Извините что откланяюсь от темы, но пока удаление не работает ...

Обновить страницу - можно разными способами.
Если CTRL + R или CTRL + F5, нажать, то естественно, форма еще раз засабмитится, а если тыцнуть мышкой, в адресную строку и нажать Enter, то еще раз ничего не отправится.

Где то натыкался на защиту от второй отправки, но сейчас не вспомню (, буду тоже благодарен если кто то напомнит примером rolleyes.gif

Спустя 34 минуты, 15 секунд (10.02.2012 - 18:15) Саньчес написал(а):
Цитата
$name - это переменная, и выведется только то, что в ней.
А тебе надо не переменную вывести, а имя для $_GET подставить.

Объясните пожалуйста на примере как правильно подставить имя.
<?php 
// имя папки для сохранения записывается в переменную.
$folder="img";
if(isset($_GET['sent'])==1)
{
$name=urldecode(isset($_GET['name']));
$del=$folder."/".$name;
@unlink($del);
}
// отображение гиперссылок на хранящиеся в папке файлы
echo "<h2>Ранее загруженные файлы</h2>";
$i=1;
$desclist=opendir($folder);
while ($file = readdir($desclist))
{
if(is_file($folder."/".$file))
{ echo "<a href=\"".$folder."/".$file."\" target=\"_blank\">Фото_".$i."</a> - ";
$file=urlencode($file);
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1$name=".$file."\">Удалить </a><br>";
$i++; }
}

closedir($desclist);
?>

В книге написано что эта функция как раз этим и занимается, вставкой имени для $_GET ну и потом декодирует$_GET['name'] и помещает в $del
$name=urldecode(isset($_GET['name']));
$del=$folder."/".$name;
@unlink($del);

не чего не понимаю ... :huh:

Спустя 21 секунда (10.02.2012 - 18:15) nugle написал(а):
walerus
путем возврата на предыдущую страницу

Так
$name=urldecode($_GET['name']);
$del=$folder."/".$name;
unlink($del);

Спустя 31 минута, 37 секунд (10.02.2012 - 18:47) inpost написал(а):
Методом GET ты должен передать ссылку на изображение.
А потом в unlink подставляешь эту ссылку.

Спустя 2 минуты, 46 секунд (10.02.2012 - 18:49) nugle написал(а):
Саньчес
твоя книжечка меня немного в ужас приводит, если ты в точности все по ней делаешь

Спустя 25 минут, 42 секунды (10.02.2012 - 19:15) Саньчес написал(а):
Цитата (inpost @ 10.02.2012 - 15:47)
Методом GET ты должен передать ссылку на изображение.
А потом в unlink подставляешь эту ссылку.

Вот эта функция разве не определяет ссылку на изображение

$folder="img";
if(isset($_GET['sent'])==1)
{
$name=urldecode($_GET['name']);
$del=$folder."/".$name;
@unlink($del);
}

ну и потом на удаление
@unlink($del);

Спустя 6 минут, 10 секунд (10.02.2012 - 19:21) nugle написал(а):
Саньчес
ну работает сейчас или нет?

Спустя 6 минут, 25 секунд (10.02.2012 - 19:28) Саньчес написал(а):
Цитата
nugle

Ну да весь код написан по примерам с книжки, ну и интернет ресурсы.

Спустя 30 минут, 44 секунды (10.02.2012 - 19:58) inpost написал(а):
Саньчес
Книга для того, чтобы научить тебя, а не для того, чтобы ты копи-пастил примеры с книжки. Примеры для того, чтобы тебе легче было понять суть того, о чём говорится в содержании.

Спустя 2 минуты, 42 секунды (10.02.2012 - 20:01) nugle написал(а):
inpost
меня больше всего поразило, что он уже работает с файлами, а не знает различия $ и &.
Саньчес, я бы посоветовал начать читать с начала и по внимательнее

Спустя 1 минута, 51 секунда (10.02.2012 - 20:03) inpost написал(а):
nugle
Ну не все могут нормально вникать в суть книжки... и тут приходит Попов! smile.gif
Видео-курсы от Попова.

Спустя 2 минуты, 2 секунды (10.02.2012 - 20:05) Саньчес написал(а):
Цитата (inpost @ 10.02.2012 - 16:58)
Саньчес
Книга для того, чтобы научить тебя, а не для того, чтобы ты копи-пастил примеры с книжки. Примеры для того, чтобы тебе легче было понять суть того, о чём говорится в содержании.

Так я и делаю, целиком коды не копирую а только сравниваю свой исходник с ихним примером.

Спустя 1 минута (10.02.2012 - 20:06) nugle написал(а):
Свернутый текст
ах, ну да, как же иначе то)

Извиняюсь, ну просто не удержался biggrin.gif biggrin.gif biggrin.gif

Спустя 1 минута, 28 секунд (10.02.2012 - 20:07) inpost написал(а):
Саньчес
Почему-то мне кажется, что работа с адресной строкой говорится в уроке этак 5-ом или 6-ом. А работа с файлами - уже в 10-12, может в 15. А ты с адресной строкой ещё не разобрался.

Спустя 11 минут, 58 секунд (10.02.2012 - 20:19) Саньчес написал(а):
Цитата
меня больше всего поразило, что он уже работает с файлами, а не знает различия $ и &.
Саньчес, я бы посоветовал начать читать с начала и по внимательнее

& - ссылка на переменную
$ - обозначение переменной
как я понимаю, но скорей всего не понимаю... unsure.gif

Спустя 7 минут, 58 секунд (10.02.2012 - 20:27) nugle написал(а):
Саньчес
& - амперсант, обозначает букву и (and), в строке url служит для соединения передаваемых гет переменных, т.е. так же как и в условие if, и остальных
$ - обозначение переменной

Спустя 16 часов, 21 минута, 7 секунд (11.02.2012 - 12:48) Саньчес написал(а):
Всем большое спасибо за помощь ! удаление заработало ! и всё благодаря & - амперсанту в
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1&name=".$file."\">Удалить </a><br>";
хотя до этого не работало... так что nugle вы были правы с самого начала ! теперь я на 100% знаю разницу между $ - & :)
вот 100% работающий код.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Загрузка изображения на сервер</title>
</
head>
<
body>
<?php
// имя папки для сохранения записываеться в переменную.
$folder="img";
if(isset($_POST['sent']))
{
// если папка не существует то она создаёться.
if(!file_exists($folder))
{ mkdir($folder,0755); }
// проверка размера файла
if($_FILES['foto']['size']> 10000000)
{ $size="<br>Фаил слишком велик"; }
// проверка допустимого ли типа фаил.
if(!(
$_FILES['foto']['type'] == 'image/pjpeg' ||
$_FILES['foto']['type'] == 'image/jpeg' ||
$_FILES['foto']['type'] == 'image/jpg' ||
$_FILES['foto']['type'] == 'image/png' ||
$_FILES['foto']['type'] == 'image/gif' ))
{ $size.="<br>Фаил имеет не разрешённый тип.<br>"; }
// сохранение файла при отсуцтвии ошибок
if(!$size)
{
// генерация уникального имени
$name=uniqid("");
// добавление расширения к имени файла
switch($_FILES['foto']['type'])
{
case 'image/pjpeg' :$name.=".jpg";
break;
case 'image/jpeg' :$name.=".jpg";
break;
case 'image/jpg' :$name.=".jpg";
break;
case 'image/png' :$name.=".png";
break;
case 'image/gif' :$name.=".gif";
break;
}
// добавление имени папки к имени файла
$name=$folder."/".$name;
// копирование загруженного файла в папку для храниния
copy($_FILES['foto']['tmp_name'], $name);
}
else
{ echo "<h2><font color=red>".$size."</font></h2>"; }
}

// удаление файла
$folder="img";
if(isset($_GET['sent'])==1)
{
$name=urldecode($_GET['name']);
$del=$folder."/".$name;
@unlink($del);
}
// отображение геперссылок на хранящиеся в папке файлы
echo "<h2>Ранее загруженные файлы</h2>";
$i=1;
$desclist=opendir($folder);
while ($file = readdir($desclist))
{
if(is_file($folder."/".$file))
{ echo "<a href=\"".$folder."/".$file."\" target=\"_blank\">Фото_".$i."</a> - ";
$file=urlencode($file);
echo "<a href=\"".$_SERVER['PHP_SELF']."?sent=1&name=".$file."\">Удалить </a><br>";
$i++; }
}

closedir($desclist);
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<
input type="hidden" name="sent" value="1" />
<
input type="file" name="foto" /> <br /><br />
<
input type="submit" value="Загрузить " />
<
input type="reset" value="Сброс" />
</
form>
</
body>
</
html>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.