IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Снова Php: работа с формами. (https://www.imho.ws/showthread.php?t=61200)

CaptainFlint 08.06.2004 15:34

Снова Php: работа с формами.
 
1. При нажатии кнопки <input type=submit ...> происходит переход по дикому адресу вида httр://.../что-то.php?msg= и дальше длиннющая строка, в основном из процентиков и чисел, т.к. тект засабмиттил русский. И вся эта длиннющая строка отображается в строке адреса. Можно ли этого избежать? Разумеется, чтобы данные всё же передавались :biggrin:
2. Всё в той же формочке, после нажатия submit грузится та же самая форма, но уже содержащая обновлённые данные. Предположим, я что-то меняю извне скрипта (нехорошо, знаю, но бывает надо :)). Хочется обновить. Жму F5... Ага, а адрес-то содержит всякие поля дополнительные, и скрипт считает, что надо снова сделать те же действия, что и при нажатии submit'а. Что не есть хорошо, ибо вместо обновления экрана я получаю просто-напросто откат моих изменений :( Тот же вопрос: что делать? Пока что повесил доп. ссылку "Обновить страницу", ссылающуюся на сам скрипт без всяких submit'ов, но это как-то некрасиво... :)

ГеныЧ 08.06.2004 15:50

1) Юзай метод на Get, а Post

ivahaev 08.06.2004 15:59

Цитата:

CaptainFlint:
Ага, а адрес-то содержит всякие поля дополнительные, и скрипт считает, что надо снова сделать те же действия, что и при нажатии submit'а. Что не есть хорошо, ибо вместо обновления экрана я получаю просто-напросто откат моих изменений Тот же вопрос: что делать?
Когда браузер спросит по кнопке обновить "Отправить данные снова?", или что-то типа того, ответить нет :).

EvroStandart 08.06.2004 16:26

Цитата:

Сообщение от ГеныЧ
1) Юзай метод на Get, а Post

А потом свои переменные получиш так:
$Var1 = $HTTP_POST_VARS["Var1"];

CaptainFlint 08.06.2004 16:31

ivahaev
Никто ничего не спрашивает, просто отсылает :) Я Оперу юзаю, может из-за этого...
ГеныЧ
В смысле, в скрипте писать не $txt=$_GET['msg'], а $txt=$_POST['msg']? Такое не прокатывает... isset($_POST['msg'])==false.

Добавлено:
Пока писал, не видел сообщения от SamJa...
Кажись, понял... Имелось в виду, сделать так?
<form action=admin.php method=\"post\" ...

Ещё добавлено:
Отлично, сработало! Спасибо! С меня плюсик :)

Тогда остаётся второй вопрос: как избежать повторного внесения изменений при обновлении страницы?

EvroStandart 08.06.2004 16:55

правильно понял :)

Если я правильно понял, форма переходин на свою страницу. То есть таже страница загружается снова.
Тогда делаеш ещё одну переменную, добавляеш её на форму в спрятанный элемент. Или можно просто проверять передан ли какой-то параметр.

Примерно так:
if (!$var1)
{
//esli peremennie nebili peredani
}

else
{
//esli peredani
}

А вообще, я немного недогнал как у тебя это сделано. Проще будет сделать два разных php файла. Тогда при обновлении всё должно остаться.

CaptainFlint 08.06.2004 17:19

SamJa
Тут не совсем то... Сейчас опишу поподробнее.
Сам скрипт в целом выглядит примерно так:
PHP код:

// admin.php
<?php
if (isset($action) and $action="Сохранить")
{
  
// Сохраняем модифицированную запись $msg
  
fopen(...);fwrite(...);fclose(...);
}
// Читаем то, что сейчас записано в файле в переменную $msg
fopen(...);fread(...);fclose(...);
// Теперь выводим форму со считанным текстом:
print "<form action=admin.php method=\"post\">";
print 
"<textarea name=msg>$msg</textarea>";
print 
"<input type=submit name=action value=\"Сохранить\"></form>";
?>

Все переменные из формы определяются через $_POST (можно и register_globals, но он мне не нравится почему-то...).
Т.о., если скрипт запущен сам по себе, то просто отображается форма с текстом из файла. Если же он был вызван через POST, то новый текст сохраняется в файл, и рисуется та же форма с уже модифицированным текстом. В этом втором случае если я жму F5, то происходит то же самое, как если бы я нажал "Сохранить".

EvroStandart 08.06.2004 17:31

Ну правильно. Если скрипт пишет в файл, нажатием F5 ты его запускаеш снова и он соответственно пишет по второму кругу.
Я всегда делаю отдельные скрипты для записи и просмотра. Скрипт для записи ничего не выводит (если только нет ошибок) и перенаправляет броузер на скрипт просмотра. Тогда можеш обновлять сколько хочеш.

ГеныЧ 08.06.2004 17:52

Кэп, лично я чтобы избежать повторного внесения данных, после обработки делаю в скрипте редирект на обычную страницу с текстом, что данные занесены и т.д. и т.п. ... :)

CaptainFlint 08.06.2004 18:21

SamJa,
ГеныЧ
Хорошо, сделал редирект: внутри того if'а, где делается модификация файла, вставил в конце доп. строчки header("location: admin.php");exit; Вроде, работает. Спасибо всем!


Часовой пояс GMT +4, время: 18:51.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.