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

Форум PHP

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

 

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

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

тема: обновление страницы
 
 автор: defi   (05.12.2010 в 12:30)   письмо автору
 
 

имеется такой скрипт файла test.php:

<?
if(isset($_GET['do'])) $do $_GET['do']; else $do '';
if(isset(
$_GET['text'])) $text $_GET['text']; else $text '';
if(isset(
$_GET['textarea'])) $textarea $_GET['textarea']; else $textarea '';

if(
$do == 'test'){
    
    if(isset(
$_POST['submit'])){
        
$text 'text';
        
$textarea 'textarea';
    }
    
$form = <<<HTML
    <form name="form" method="post" action="test.php?do=test">
      <input type="text" name="text" value="
{$text}" /><br />
      <textarea name="textarea" style="width:500px; height:200px">
{$textarea}</textarea><br />
      <input type="submit" name="submit" /><br />
    </form>
HTML;

    echo 
$form;
}

    echo 
'<a href="test.php?do=test">link</a>';
?>


Когда нажимаю на ссылку, появляется форма, в полях пока ничего нет, затем нажимаю на кнопку, в полях появляется text и textarea, после этого по нажатию F5 (обновление страницы) всё равно появляются text и textarea, как будто я нажимаю кнопку submit. Подскажите как это исправить, чтобы по нажатию F5 происходило обновление test.php?do=test без вывода текста?

  Ответить  
 
 автор: Lors   (05.12.2010 в 12:38)   письмо автору
 
   для: defi   (05.12.2010 в 12:30)
 

value="{$text}" - убрать. value=""

  Ответить  
 
 автор: neadekvat   (05.12.2010 в 12:41)   письмо автору
 
   для: Lors   (05.12.2010 в 12:38)
 

Порой люди такую х..й..ю говорят, что даже слов нет.

  Ответить  
 
 автор: neadekvat   (05.12.2010 в 12:40)   письмо автору
 
   для: defi   (05.12.2010 в 12:30)
 

Чтобы f5 не работало - надо делать переадресацию. В противном случаи при нажатии f5 браузер действительно снова как бы "нажимает кнопку".

  Ответить  
 
 автор: defi   (05.12.2010 в 13:08)   письмо автору
 
   для: neadekvat   (05.12.2010 в 12:40)
 

neadekvat, а как сделать переадресацию?

  Ответить  
 
 автор: neadekvat   (05.12.2010 в 13:19)   письмо автору
 
   для: defi   (05.12.2010 в 13:08)
 

Добавить к заголовкам параметр location:
header('location: адрес_страницы');
При этом следует отметить, что сначала отправляются заголовки, а потом тело страницы, следовательно, перед header() не может быть даже пробела или переноса строки (если вылезете headers already sent - значит что-то таки есть)

  Ответить  
 
 автор: defi   (05.12.2010 в 14:20)   письмо автору
 
   для: neadekvat   (05.12.2010 в 13:19)
 

что-то не получается, может не так прописал?
вот код:

<?
header
('locaton: test.php?do=test');

if(isset(
$_GET['do'])) $do $_GET['do']; else $do '';
if(isset(
$_GET['text'])) $text $_GET['text']; else $text '';
if(isset(
$_GET['textarea'])) $textarea $_GET['textarea']; else $textarea '';

if(
$do == 'test'){
    
    if(isset(
$_POST['submit'])){
        
$text 'text';
        
$textarea 'textarea';
    }
    
$form = <<<HTML
    <form name="form" method="post" action="test.php?do=test">
      <input type="text" name="text" value="
{$text}" /><br />
      <textarea name="textarea" style="width:500px; height:200px">
{$textarea}</textarea><br />
      <input type="submit" name="submit" /><br />
    </form>
HTML;

    echo 
$form;
}

    echo 
'<a href="test.php?do=test">link</a>';
?>

  Ответить  
 
 автор: neadekvat   (05.12.2010 в 14:32)   письмо автору
 
   для: defi   (05.12.2010 в 14:20)
 

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

  Ответить  
 
 автор: Trianon   (05.12.2010 в 14:34)   письмо автору
 
   для: defi   (05.12.2010 в 14:20)
 

после выдачи заголовка переадресации имеет смысл сразу поставить exit() , поскольку остальной код исполняется в переадресуемом скрипте.

И тогда - если поставить - сразу видно, что Вы написали чушь.

  Ответить  
 
 автор: defi   (05.12.2010 в 14:54)   письмо автору
 
   для: Trianon   (05.12.2010 в 14:34)
 

А можно готовый код?
Куда только этот header не ставлю, всё равно при нажатии F5 текст остаётся в форме.

  Ответить  
 
 автор: neadekvat   (05.12.2010 в 14:56)   письмо автору
 
   для: defi   (05.12.2010 в 14:54)
 

Я прямо представляю, как вы с глазами срущей собаки туда-сюда ставите этот код.
Зачем?
Подумайте, в какой момент должна быть переадресация, когда надо перенаправить браузер на другую страницу, чтобы при нажатии f5 форма не отправлялась еще раз?

  Ответить  
 
 автор: defi   (05.12.2010 в 15:28)   письмо автору
 
   для: neadekvat   (05.12.2010 в 14:56)
 

что-то я вообще не могу понять этот header.
возьмём простой пример:
файл test.php:

<?
if(isset($_GET['do'])) $do $_GET['do'];

if(
$do == 'test'){
header('locaton: test2.php');
}

echo 
'<a href="test.php?do=test">link</a>';
?>

сначало загружаем test.php, затем кликаем по ссылке, у нас получается если do равно test, включаем переадресацию на файл test2.php, проверил на сервере, никакой переадресации не происходит, а загружается test.php?do=test что я не так понимаю?

  Ответить  
 
 автор: neadekvat   (05.12.2010 в 15:40)   письмо автору
 
   для: defi   (05.12.2010 в 15:28)
 

location, бляха муха.

  Ответить  
 
 автор: defi   (05.12.2010 в 16:12)   письмо автору
 
   для: neadekvat   (05.12.2010 в 15:40)
 

sorry, короче я всё понял, блин бывает такое, из-за одной ошибки происходят не понятки.
thx.

  Ответить  
 
 автор: defi   (06.12.2010 в 13:02)   письмо автору
 
   для: defi   (05.12.2010 в 16:12)
 

neadekvat, запутался я окончательно, с fun. header я то разобрался, а вот внедрить в пример чёт не получается, вот пример по проще, если можно напишите plz с ответом:

<? 
header
("cache-control: no-cache");

if(isset(
$_POST['text'])) $text $_POST['text']; else $text '';

if(isset(
$_POST['submit'])){
    
$text 'text';
}
$form = <<<HTML
    <form name="form" method="post" action="test.php">
      <input type="text" name="text" value="
{$text}" /><br />
      <input type="submit" name="submit" /><br />
    </form>
HTML;

echo 
$form;
?>

  Ответить  
 
 автор: defi   (06.12.2010 в 13:15)   письмо автору
 
   для: defi   (06.12.2010 в 13:02)
 

вото то что я написал:

<?  
header
("cache-control: no-cache"); 

if(isset(
$_POST['text'])) $text $_POST['text']; else $text ''

if(isset(
$_POST['submit'])){ 
    
$text 'text'

$form = <<<HTML 
    
<form name="form" method="post" action="test.php"
      <
input type="text" name="text" value="{$text}/><br /> 
      <
input type="submit" name="submit" /><br /> 
    </
form
HTML
header('location: test.php');
echo 
$form
?>

теперь вообще текст не выводится, после вывода формы тоже нельзя ставить header, дак куда его можно ещё вставить?

  Ответить  
 
 автор: neadekvat   (06.12.2010 в 14:43)   письмо автору
 
   для: defi   (06.12.2010 в 13:15)
 

У вас с логикой скрипта проблемы.
Когда принимают некие _POST данные, то обрабатывают их и перенаправляют на другую страницу, например, с _GET параметрами о том, какое сообщение вывести пользователю.
А то, что делаете конкретно вы - вообще не имеет практического применения.

Обычно примерно так:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
// обрабатываем данные, добавляем в бд/еще что-то

    // перенаправляем пользователя
    
header('location: test.php?message=1');
    die;
}

// здесь форма

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

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