Autor Zpráva
Dexx
Profil *
Po úspěšném odeslání $_POST polí byl potřeboval ošetřit, aby se po znovuobnovení stránky znovu data neodeslala, aniž bych musel stránku přesměrovat někam jinam a zpátky.
Zkoušel jsem unset($_POST);
ovšem to nefunguje, nemáte někdo nějaké funkční řešení? Existuje vůbec něco? Děkuji
Měsíček
Profil
$_POST=array(); // IMHO to nepůjde - je to totiž záležitost prohlížeče .. s tím PHP nic neudělá. Můžeš vyzkoušet .. ať při odeslání klikne na tlačítko "Odeslat" 2x.

EDIT://
Alphard
Profil
aniž bych musel stránku přesměrovat
nelze, unset nepomůže, a nic jiného také ne, $_POST se smaže při aktuálním provádění scriptu, ale při obnovení prohlížeč znovu odešle data a jsme tam, kde jsme byli
ale když přesměrujete na sebe sama, tak to snad ničemu nevadí

Měsíček
stejný problém, na F5 je to krátké
BetaCam
Profil
Dexx

Jak říká Alphard přesměrovat.
Dexx
Profil *
Dobře, děkuji všem za odpověď
Dexx
Profil *
Ještě bych měl ale otázku, která se tohoto také týče.
Jak řešíte např. zobrazování hlášek typu Registrace proběhla v pořádku, Heslo je příliš krátké?
uložíte si je do session, které po přesměrování zobrazíte?
BetaCam
Profil
Dexx
Session + query string samotné session je nespolehlivé.
japlavaren
Profil
ja presmerovavam az ked sa form ulozi..

aby sa mi zobrazili povodne hodnoty to riesim:

<input type='text' name='name' value='$_POST[name]' />


pripadne okopirujem post do pola
Dexx
Profil *
BetaCam
V tom případě stačí pouze query string ne?
Např. registrace?strana=chyba1
registrace?strana=chyba2
...

a poté

if($_GET['strana'] == 'chyba1'){
echo 'blabla';
}elseif($_GET['strana'] == 'chyba2'){
echo 'blabla2';
}
BetaCam
Profil
Dexx
V tom případě stačí pouze query string ne?

Teoreticky samozdřejmě stačí, ale použití session za podpory query stringu má své výhody oproti samotnému query stringu. Takovej primitivní příklad :

<?php
session_start();

if (isset($_POST['odeslat'])) {
	$token = sha1(time());
	if (strlen($_POST['nick'])< 3) {
		$_SESSION['errors'][$token][] = 'Kratky nick';
	}
	if(strlen($_POST['nick'])> 10){
		$_SESSION['errors'][$token][] = 'Dlouhy nick';
	}
	if (preg_match('/^Admin$|^Guest$/', $_POST['nick'])) {
		$_SESSION['errors'][$token][] = 'Vyhrazeny nick';
	}
		
	if (strlen($_POST['pass'])< 6) {
		$_SESSION['errors'][$token][] = 'Kratke heslo';
	}
	if(strlen($_POST['pass'])> 20){
		$_SESSION['errors'][$token][] = 'Dlouhe heslo';
	}

	if (isset($_SESSION['errors'][$token])) {
		header('Location: index.php?token='.$token);
		exit();
	}else{
		//Nejakej kód
	}
}
echo '<div>';
	var_dump($_SESSION['errors'][$_GET['token']]);
	unset($_SESSION['errors'][$_GET['token']]);
echo '</div>';
echo '<form action="index.php" method="POST">';
echo 'Nick <input type="text" name="nick"><br />';
echo 'Pass <input type="text" name="pass"><br />';
echo '<input type="submit" name="odeslat" value="Odeslat">';
echo '</form>';
?>


Neni to samozdřejmě napsané úplně tak jak by se to běžne používalo, ale je to napsané tak, aby z toho bylo znát v čem je to výhodnější.
Dexx
Profil *
BetaCam
Dobře, díky ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0