| Autor | Zpráva | ||
|---|---|---|---|
| Dexx Profil * |
#1 · Zasláno: 11. 11. 2008, 21:00:19
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 |
#2 · Zasláno: 11. 11. 2008, 21:03:15 · Upravil/a: Měsíček
$_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 |
#3 · Zasláno: 11. 11. 2008, 21:04:56
„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 |
#4 · Zasláno: 11. 11. 2008, 21:08:34
Dexx
Jak říká Alphard přesměrovat. |
||
| Dexx Profil * |
#5 · Zasláno: 11. 11. 2008, 21:39:34
Dobře, děkuji všem za odpověď
|
||
| Dexx Profil * |
#6 · Zasláno: 11. 11. 2008, 21:41:06
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 |
#7 · Zasláno: 11. 11. 2008, 21:43:51
Dexx
Session + query string samotné session je nespolehlivé. |
||
| japlavaren Profil |
#8 · Zasláno: 11. 11. 2008, 21:46:11
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 * |
#9 · Zasláno: 11. 11. 2008, 21:52:59
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 |
#10 · Zasláno: 12. 11. 2008, 11:10:48 · Upravil/a: BetaCam
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 * |
#11 · Zasláno: 14. 11. 2008, 19:11:41
BetaCam
Dobře, díky ;-) |
||
|
Časová prodleva: 17 let
|
|||
0