Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [html]automatyczny 'wstecz' po x sekundach
Forum PHP.pl > Forum > Przedszkole
plurr
zwykle mialem np "<meta http-equiv=refresh content=\"2; URL=...>" ale tu chodzi o konkretny przypadek.

Mam formularz w ktorym wpisuje dosc sporo danych, jesli ktores pole jest puste, trzeba to poprawic. W przypadku opcji refresh pola formularza sie automatycznie czyszcza, jesli zas klikne wstecz na przegladarce pola formularza ktore juz wpisalem dalej sa wypelnione.

Chcialbym wiec sie dowiedizec czy jest jakas opcja zamiast refresh to wstecz, aby po tych paru sekundach bylo automatyczne przekierowanie. Szukalem na google i tutaj w archiwum, ale nie znalazlem, probowalem tez wpisywac back i previous, jednak nie dzialaja.
kosmowariat
teoretycznie da się to zrobić w JSie, praktyczniej to zrobić w JSie i używając cookies. Można to również bardzo prosto zrobić w PHP. Którą bramkę wybierasz questionmark.gif
TomASS
Poszukaj o JavaScript history back:

Np (plik text.html):
  1. <form action="test.html">
  2. <textarea name="raz"></textarea>
  3. <input name="dwa"/>
  4. <input type="submit"/>
  5. </form>
  6. <button onclick="history.back()";>Powrot</button>
plurr
@kosmowariat: to ja wybiore opcje: PHP

@TomASS: chodzi mi dokladnie o auto-wstecz, tak jak to moglem robic w metatagu, jednak przy refresh pola formularza sie resetują, potrzebna mi wiec opcja wstecz ktora zostawia poprzednio wypelnione pola. JS z tego co wdize, oferuje jedynie wlasnoreczne klikanie - dalej, wstecz, przeladuj, nie widze nic o 'samoistnym powrocie' w przypadku np 'pustych pol' - bo o to mi chodzi smile.gif
phpion
Poczytaj o setTimeout() i właśnie history.back() - połączenie tych dwóch powinno zrealizować to, o co Ci chodzi.
TomASS
Cytat
dokladnie o auto-wstecz

No nie gadaj, że tego nie mogłeś znaleźć: wywoływanie skrytpu java co x sekund tongue.gif

Cytat
, tak jak to moglem robic w metatagu, jednak przy refresh pola formularza sie resetują, potrzebna mi wiec opcja wstecz ktora zostawia poprzednio wypelnione pola. JS z tego co wdize, oferuje jedynie wlasnoreczne klikanie - dalej, wstecz,

To Ci przecież piszę, że history back robi tak jak chcesz - sprawdzałeś w ogóle mój przykład?


P.S. Możesz pisać bardziej "po polsku"? - proszę smile.gif
plurr
@phpion.com: dzieki, o to mi chodzilo.

@TomASS: oj google to ja non stop mam uzywane tongue.gif Przykladu nie musialem sprawdzac, pisze o auto-wstecz po x sekundach, a Ty podales 'onclick="history.back()"'.
kosmowariat
sugeruję jednak użycie php gdyż różne przeglądarki mogą różnie się zachowywać. jedne moga wyświetlać po cofnięciu dane, inne nie. PHP gwarantuje to na 101%
plurr
Cytat(kosmowariat @ 30.07.2007, 22:53:32 ) *
sugeruję jednak użycie php gdyż różne przeglądarki mogą różnie się zachowywać. jedne moga wyświetlać po cofnięciu dane, inne nie. PHP gwarantuje to na 101%


a czy moglbys napisac cos wiecej o tym jak to zrobic w php? Jesli chodzi o header() to dziala tak samo jak wczesniejszy metatag (chyba ze jestem niedoinformowany). Zrobilem wiec setTimeout("window.history.back()",3000); i ladnie dziala, tylko faktycznie kiepsko bedzie jesli na innych przegladarkach pola beda puste. Chociaz jestem 100% przekonany, ze ludzie dla ktorych bedzie ta strona uzywaja wylacznie ie.
TomASS
Cytat
Przykladu nie musialem sprawdzac, pisze o auto-wstecz po x sekundach, a Ty podales 'onclick="history.back()"'.

Pokazałem Ci funkcję JS która cofa stronę w historii do tyłu, dodatkowo jak wpiszesz w google to co chciałeś to masz komplet informacji - widzisz, zrobiłeś tak jak pisałem i wyszło ok, o to że jedne przeglądarki mogą wyświetlać a inne nie to się nie martw FF, IE i Op działa, także jest git, moim zdaniem nie ma co wyciągać armaty (PHP) na muchy smile.gif

Cytat
sugeruję jednak użycie php gdyż różne przeglądarki mogą różnie się zachowywać. jedne moga wyświetlać po cofnięciu dane, inne nie. PHP gwarantuje to na 101%

A możesz pokazać jak ? dry.gif
Neojawor
sprawa jest prosta - na stronie z której masz się cofnąć pobierasz dane z formularza POST-em i wpisujesz
  1. <meta http-equiv=refresh...>

przesyłając te dane metodą GET z powrotem na stronę na której jest formularz. Dajesz tam if-a sprawdzającego, czy GET-em coś przyszło i jeśli tak, to do INPUT-ów wstawiasz
  1. <?php
  2. echo '<INPUT name="imie" value="' . $_GET['stare_imie'] . '" />';
  3. ?>

może trochę więcej pisania niż w JS, ale masz 100%, że dane zostaną w formularzu
plurr
TomASS: skoro dziala na tych podstawowych przegladarkach to gitara guitar.gif

Neojawor: metoda ktora podales przydaje sie w edycji danych, wtedy pola sa defaultowo wypelnione, jednak nie sprawdzi sie w przypadku tworzenia nowego pracownika, bo danych takowych nie ma jeszcze w bazie smile.gif Chyba ze cos zle zrozumialem, z rana nie kumaty jestem biggrin.gif
kosmowariat
@tomASS - Neojawor właśnie pokazał jak to zrobić
@plurr - coś nie kumaty jesteś aaevil.gif dane wstawiane jako wartości brane są $_POST'a lub $_GET'a (tak jak w przykładzie) i nikt nie zaczepia o bazy. jeśli poraz pierwszy wyświetlasz formularz zmienne nie są ustawione. dajesz tylko tłumienie błędów i jest git

  1. <INPUT name="imie" value=" <?=@$_GET['stare_imie'];?>" />
plurr
zabraklo by mi miejsca w pasku adresu biggrin.gif ale dobrze znac.. smile.gif
pe_te
Witam,
Odświeżam temat... może ktoś raz jeszcze w miare prosto rozpisać automatyczne odświeżanie ale kodem PHP??
hondek
IMHO lepiej po prostu javascriptem sprawdzic czy wszystkie pola formularza zostaly wypelnione, a jezeli nie zostaly to zwrocic false i alert z komunikatem smile.gif po co motac sie z php?
likedat
Kiedys napisałem klasę obsługującą formularze, może nie jest za długa na to forum [;

CODE

<?php
class FormGenerator {

private $fields;
private $action;
private $method;
private $name;
private $error = false;

private $email;
private $vcode;

private $update;
private $userId;

function __construct($name,$action,$method,$update=false,$userId=0) {
$this->name = $name;
$this->action = $action;
$this->method = $method;

$this->update = $update;
$this->userId = $userId;
}

function addField($label, $name, $type, $value, $style, $required ,$separator = "") {
$this->fields[$label][$name]['name'] = $name;
$this->fields[$label][$name]['type'] = $type;
$this->fields[$label][$name]['value'] = $value;
$this->fields[$label][$name]['style'] = $style;
$this->fields[$label][$name]['separator'] = $separator;
$this->fields[$label][$name]['required'] = $required;
}

function getSqlQuery($tableName,$vcode = true) {
$query = "INSERT INTO ".$tableName." SET ";
$password = "";

if (!isset($_POST[$this->name]))
$postData = $_SESSION[$this->name];
else
$postData = $_POST[$this->name];

foreach ($this->fields as $description => $fields) {
foreach ($fields as $fieldName => $value) {
if ($value['type'] == "password") {
if (!empty($password))
continue;
else {
$postData[$value['name']] = md5($postData[$value['name']]);
$password = "set";
}
}
if ($value['name'] == 'email') {
$this->email = $postData[$value['name']];
$this->vcode = md5(time());
if ($vcode == true)
$parameters[] = 'vcode="'.$this->vcode.'"';
}

$parameters[] = $value['name']."=\"".htmlspecialchars(trim($postData[$value['name']]))."\"";
}
}

$query .= implode(", ",$parameters);

return $query;
}

function verifyData() {

$emptyFields = false;

$formData = $_POST[$this->name];
foreach ($formData as $field => $value) {
if (empty($value))
$emptyFields[]=$field;
}

if ($emptyFields != false)
$this->modifyFields($emptyFields);
}

function modifyFields($emptyFields) {
$password = '';

foreach($this->fields as $description => &$row) {
foreach ($row as $field => &$value) {
if (in_array($value['name'],$emptyFields) && $value['required'] == true) {
$value['style'] .= "; border: 1px solid #ff0000;";

if ($this->error == false)
$this->error = "";

$this->error[] = '<b>Błąd:</b> Nie wszystkie wymagane pola zostały wypełnione.<br />';
} else {
if ($value['name'] == 'email') {
$database = new Database(DATABASE_NAME);
$database->executeQuery("select userId from users where email=\"".$_POST[$this->name]['email']."\"");
if ($database->getNumRows() > 0)
$this->error[] = "<b>Błąd:</b> wpisany adres istnieje w naszej bazie danych.<br />";
}
if ($value['type'] != 'password')
$value['value'] = htmlspecialchars(trim($_POST[$this->name][$value['name']]));
else {
if (!empty($password)) {
if ($password != $_POST[$this->name][$value['name']])
$this->error[] = "<b>Błąd:</b> Wpisane hasła się nie zgadzają.<br />";
if (strlen($password) < 5)
$this->error[] = "<b>Błąd:</b> Hasło jest krótsze, niż 5 znaków.<br />";
} else {
$password = $_POST[$this->name][$value['name']];
}
}
}
}
}

if (is_array($this->error))
$this->error = array_unique($this->error);
}

function isError() {
if (!isset($_POST["formSent"]))
return true;
elseif ($this->error == false)
return false;
else
return true;
}

function getError() {
if ($this->error == false)
return false;
else {
$this->error = "<p class='error'>".implode("",$this->error)."</p>";
return $this->error;
}
}

function getName() {
return $this->name;
}

function getEmail() {
return $this->email;
}

function getVcode() {
return $this->vcode;
}

function printForm() {
echo("<form action='".$this->action."' method='".$this->method."'>\n");
echo("<table border='0' cellspacing='2' cellpadding='0' width='500'>\n");
echo("<input type='hidden' name='formSent' value='true'>");

foreach ($this->fields as $key => $value) {
echo("<tr>\n");
echo("<td align='right'>".$key."</td>\n");
echo("<td>\n");

foreach($value as $field => $options) {
echo("<input type='".$options['type']."' name='".$this->name."[".$options['name']."]' value=\"".$options['value']."\" style='".$options['style']."'>".$options['separator']."\n");
}

echo("</td>\n");
echo("</tr>\n");
}
echo("<tr><td></td><td align='left'><input type='submit' value='Wyślij' style='background-color: #000;color: #fff;font-weight: 700;border: 3px solid #000;'></td></tr>\n");
echo("</table>\n");
echo("</form>\n");
}
}
?>


Wykorzystywałem ją tak:
Kod
   $form = new FormGenerator("createaccount","create_account.php","POST");
   $form->addField("Imię","fname","text","","width: 300px", true);

a później:
Kod
   if (isset($_POST['formSent'])) {
       $form->verifyData();
   }
   if ($form->isError() != false) {
   echo($form->getError());
   $form->printForm();
   }


Nie jest to może dzieło, ale powinno zadziałać [;
Jeśli chodzi o JS, to zbyt łatwo go wyłączyć, aby móc na nim polegać, akurat w tym przypadku.
gutek84
Zawsze dane mozna wrzucic do sesji. np $_SESSION['imie']="jakies_imie" itp. i formularzu <input type="text" name="imie" value="$_SESSION['imie']"> i jezeli nie wypelnisz sesji to na poczatku bedziesz mial zawsze puste pole. Potem tradycyjnie formularzem wysylasz do pliku php i odbierasz $_SESSION['imie']=$_GET['imie]; i jak bedziesz robil np inserty w bazie to tez odwolujesz sie do zmiennej sesyjnej i po klopocie. A z cofaniem to sprobuj <meta http-equiv=refresh content=\"2; URL=java script:history.go(-1)"> - u mnie dzialalo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.