Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [html]automatyczny 'wstecz' po x sekundach
plurr
post
Post #1





Grupa: Zarejestrowani
Postów: 175
Pomógł: 12
Dołączył: 28.06.2007
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.

Ten post edytował plurr 30.07.2007, 19:14:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
likedat
post
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 1.03.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Posty w temacie
- plurr   [html]automatyczny 'wstecz' po x sekundach   30.07.2007, 19:12:48
- - kosmowariat   teoretycznie da się to zrobić w JSie, praktyczniej...   30.07.2007, 19:51:49
- - TomASS   Poszukaj o JavaScript history back: Np (plik text...   30.07.2007, 20:59:22
- - plurr   @kosmowariat: to ja wybiore opcje: PHP @TomASS: c...   30.07.2007, 21:11:36
- - phpion.com   Poczytaj o setTimeout() i właśnie history.back() -...   30.07.2007, 21:16:09
- - TomASS   Cytatdokladnie o auto-wstecz No nie gadaj, że tego...   30.07.2007, 21:27:47
- - plurr   @phpion.com: dzieki, o to mi chodzilo. @TomASS: ...   30.07.2007, 21:38:09
- - kosmowariat   sugeruję jednak użycie php gdyż różne przeglądarki...   30.07.2007, 21:53:32
|- - plurr   Cytat(kosmowariat @ 30.07.2007, 22:53...   30.07.2007, 22:04:46
- - TomASS   CytatPrzykladu nie musialem sprawdzac, pisze o aut...   30.07.2007, 23:08:59
- - Neojawor   sprawa jest prosta - na stronie z której masz się ...   31.07.2007, 01:07:29
- - plurr   TomASS: skoro dziala na tych podstawowych przeglad...   31.07.2007, 10:05:22
- - kosmowariat   @tomASS - Neojawor właśnie pokazał jak to zrobić @...   31.07.2007, 11:02:49
- - plurr   zabraklo by mi miejsca w pasku adresu ale dobrze ...   31.07.2007, 15:15:44
- - pe_te   Witam, Odświeżam temat... może ktoś raz jeszcze w ...   2.03.2008, 11:47:28
- - hondek   IMHO lepiej po prostu javascriptem sprawdzic czy w...   2.03.2008, 11:56:00
- - likedat   RE: [html]automatyczny 'wstecz' po x sekundach   2.03.2008, 13:39:08
- - gutek84   Zawsze dane mozna wrzucic do sesji. np $_SESS...   2.03.2008, 14:03:00


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.06.2026 - 06:11