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

Форум PHP

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

 

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

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

тема: Выполнение функции при обновлении страницы
 
 автор: yuk   (22.04.2007 в 22:36)   письмо автору
 
 

Написал небольшой скрипт, который загружает файл на сервер. Выбираю файл в форме, нажимаю submit, файл отправляется. Если после этого страницу обновить, то файл снова отправляется. Сделал в скрипте переадресацию на начальную страницу с формой, но теперь можно в браузере нажать "Назад" и "Обновить", что опять же, приводит к повторной загрузке. Как сделать, чтобы файл грузился только при нажатии submit? Меня больше интересует не готовое решение, а сама идея, так сказать, алгоритм. Хотя и от примера не откажусь :)

   
 
 автор: Valick   (22.04.2007 в 22:40)   письмо автору
 
   для: yuk   (22.04.2007 в 22:36)
 

Лишнее выкинешь)

<?php 
// Проверяем директорию загрузки 
if(!$_REQUST['dir']) $dir=getcwd(); 
?> 

<body> 
    <h2><p><b> Форма для загрузки файлов на сервер</b></p></h2> 
    Максимальный размер загружаемого файла : 2Мб<br> 
    Загрузочная директория по умолчанию :  <?php echo($dir);?> 
    <form     aсtion="<?php echo $_SERVER['SCRIPT_NAME'];?>
        method="POST" 
        enctype="multipart/form-data"> 
    <table width=100% border=0 cellpadding=5 cellspacing=2> 
        <tr valign=top> 
            <td><input type="file" name="filename"></td> 
        </tr> 
        <tr valign=top> 
            <td><input type="submit" value="Загрузить"></td> 
        </tr> 
    </table> 
<br> 
    </form>
</body>

<?php
// Проверяем была загрузка или нет
if (!$_FILES['filename']['name'])
    {
    echo(
"Ожидание ввода загружаемого файла");
    }
else
    {
// Если загрузка была, то
// Проверяем размер загружаемого файла
    
if ($_FILES['filename']['size'] > 1024*2*1024
        { 
        echo(
"Размер файла превышает 2Мб"); 
        exit; 
        }
// Из соображений безопасности проверяем загрузку по HTTP
    
if (is_uploaded_file($_FILES['filename']['tmp_name']))
        {
// Если файл загружен средствами РНР, то переносим файл из временной директории
        
if (move_uploaded_file($_FILES['filename']['tmp_name'],
                    
"$dir/".$_FILES['filename']['name']))
            {
            echo(
"Запрос обработан файлом : ".$_SERVER['SCRIPT_NAME']." <br>"); 
            echo(
"Имя файла : ".$_FILES['filename']['name']." <br>"); 
            echo(
"Размер файла : ".$_FILES['filename']['size']." <br>"); 
            echo(
"Тип файла : ".$_FILES['filename']['type']." <br>");
            echo(
"Файл успешно загружен в директорию : $dir <br>");
            }
        else
            {
            echo(
"Ошибка загрузки файла");
            }
        }
    else
        {
        echo(
"Вниманмие: \"левый\" файл!!!");
        }
    }
?>

   
 
 автор: yuk   (22.04.2007 в 22:56)   письмо автору
 
   для: Valick   (22.04.2007 в 22:40)
 

Здесь та же самая проблема. Файл загружается, выдается вся информация. Но опять же, при обновлении страницы файл грузится повторно.

   
 
 автор: Valick   (22.04.2007 в 23:06)   письмо автору
 
   для: yuk   (22.04.2007 в 22:56)
 

Извиняюсь, не проверил (в Ослике в ифрейме у меня работало)

   
 
 автор: bronenos   (22.04.2007 в 22:58)   письмо автору
 
   для: yuk   (22.04.2007 в 22:36)
 

при загрузке сделай
setcookie ('uploaded', 1);
и потом смотри, есть такая кука или нет

   
 
 автор: yuk   (22.04.2007 в 23:04)   письмо автору
 
   для: bronenos   (22.04.2007 в 22:58)
 

А если после этого отправить еще файл (по submit-у)? Он, похоже, не отправится. Или я ошибаюсь?

   
 
 автор: Valick   (22.04.2007 в 23:09)   письмо автору
 
   для: yuk   (22.04.2007 в 23:04)
 

Всё верно, не отправиться, записывай в куку имя файла, и проверяй.

   
 
 автор: Valick   (22.04.2007 в 23:13)   письмо автору
 
   для: Valick   (22.04.2007 в 23:09)
 

А вообще зачем вам это?
Если юзер загрузил файл, а потом изменил и хочет загрузить снова, это надо закрыть браузер, потом опять открыть (смотря на скока кукисы установите)...

   
 
 автор: Valick   (22.04.2007 в 23:18)   письмо автору
 
   для: yuk   (22.04.2007 в 23:04)
 

Кстати когда я скинул вам свой файл, я убрал одну строчку
Скрытое поле формы, щас попробую одну идею

   
 
 автор: yuk   (22.04.2007 в 23:27)   письмо автору
 
   для: Valick   (22.04.2007 в 23:18)
 

>А вообще зачем вам это?
Разрабатываю небольшую страничку с полем загрузки файла, и заметил такую особенность. На сервере файлы сохраняются с оригинальными именами, и получается, что вдруг пользователю стукнет в голову понажимать F5 - сервер начнет мусорится.

   
 
 автор: Valick   (22.04.2007 в 23:32)   письмо автору
 
   для: yuk   (22.04.2007 в 23:27)
 

понажимать F5 - сервер начнет мусорится
а мне кажеться будет перезаписываться один и тот же файл.

   
 
 автор: Valick   (22.04.2007 в 23:30)   письмо автору
 
   для: Valick   (22.04.2007 в 23:18)
 


<?php
// Проверяем директорию загрузки
if(!$_REQUST['dir']) $dir=getcwd();
?>

<body>
    <h2><p><b> Форма для загрузки файлов на сервер</b></p></h2>
    Максимальный размер загружаемого файла : 2Мб<br>
    Загрузочная директория по умолчанию :  <?php echo($dir);?>
    <form     aсtion="<?php echo $_SERVER['SCRIPT_NAME'];?>"
        method="POST"
        enctype="multipart/form-data">
    <input type="hidden" name="action" value="go">
    <table width=100% border=0 cellpadding=5 cellspacing=2>
        <tr valign=top>
            <td><input type="file" name="filename"></td>
        </tr>
        <tr valign=top>
            <td><input type="submit" value="Загрузить"></td>
        </tr>
    </table>
<br>
    </form>
</body>

<?php
if (isset($_REQUEST['action']))
{
// Проверяем была загрузка или нет
if (!$_FILES['filename']['name'])
    {
    echo(
"Ожидание ввода загружаемого файла");
    }
else
    {
// Если загрузка была, то
// Проверяем размер загружаемого файла
    
if ($_FILES['filename']['size'] > 1024*2*1024)
        {
        echo(
"Размер файла превышает 2Мб");
        exit;
        }
// Из соображений безопасности проверяем загрузку по HTTP
    
if (is_uploaded_file($_FILES['filename']['tmp_name']))
        {
// Если файл загружен средствами РНР, то переносим файл из временной директории
        
if (move_uploaded_file($_FILES['filename']['tmp_name'],
                    
"$dir/".$_FILES['filename']['name']))
            {
            echo(
"Запрос обработан файлом : ".$_SERVER['SCRIPT_NAME']." <br>");
            echo(
"Имя файла : ".$_FILES['filename']['name']." <br>");
            echo(
"Размер файла : ".$_FILES['filename']['size']." <br>");
            echo(
"Тип файла : ".$_FILES['filename']['type']." <br>");
            echo(
"Файл успешно загружен в директорию : $dir <br>");
            }
        else
            {
            echo(
"Ошибка загрузки файла");
            }
        }
    else
        {
        echo(
"Вниманмие: \"левый\" файл!!!");
        }
    }
}
?>


Вот так на обновление страницы не реагирует, только на submit.
А если нажать назад, то в Ослике всё ровно, а в опере остаётся имя файла, наверное нужен ЯваСкрипт))

   
 
 автор: yuk   (23.04.2007 в 00:03)   письмо автору
 
   для: Valick   (22.04.2007 в 23:30)
 

Этот пример у меня на обновление тоже реагирует. А на счет перезаписи - наверно я не так выразился. Оригинальное имя файла - я имел ввиду не как у юзера он называется. Это имя генерируется на сервере типа как по счетчику (на случай, если вдруг с нескольких мест придут файлы с одинаковымы именами).
Ну да ладно, может и не стоит из этого делать проблему. Но интерес остался.
Появилась мысль генерировать имена исходя из исходного имени файла и времени его создания. Пусть тогда перезаписываются.

   
 
 автор: Valick   (23.04.2007 в 00:20)   письмо автору
 
   для: yuk   (23.04.2007 в 00:03)
 

Этот пример у меня на обновление тоже реагирует
Странно, ну да ладна значит мне уже пора спать, а то котелок не варит)
У вас браузер какой? Сейчас проверил в Мозиле, действительно реакция на обновление положительная.

   
 
 автор: Trianon   (23.04.2007 в 09:45)   письмо автору
 
   для: yuk   (23.04.2007 в 00:03)
 

чтобы исключить передачу данных post-формы при обновлении страницы, нужно при приеме данных сделать переадресацию на страницу методом GET. header("Location: http://сайт/путь/файл");

   
Rambler's Top100
вверх

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