Autor Zpráva
Brouzdalek
Profil
Ahoj,
mám tenhle příkaz:


$sql1 = "SELECT kod FROM ".$prefix."zadost WHERE kod=".$kod;


Má za úkol vyhledat kód z databáze podle $kod. U každýho formuláře generuju kód, aby se nemohl form. znovu odeslat (ochrana pře ZPĚT), tzn. že ve skutečnosti tento příkaz ohlásí chybu a nic nenalezne (pokud byl formulář odeslán poprvé), po opakovaném odeslání se stejným kódem by se měla stránka přesměrovat, nebo vypsat chybu..
Bohužel, zkoušel jsem x pokusů ( i s if), ale výsledek se nedostavil, viz:


<? // ověření existence stejného kódu
$sql1 = "SELECT kod FROM ".$prefix."zadost WHERE kod=".$kod;
if (($sql2 = MySQL_Query($sql1)) && ($sql3 = MySQL_Fetch_Array($sql2))) {
Header("Location: index.php");}
else {
?>
... následuje kód, pokud byl form. odeslán poprvé..


Předem dík všem za rady, uvítám i nápady na lepší řešení :)
Mastodont
Profil
Brouzdalek
Ty máš formulář pro vyhledávání a z něj posíláš ten kód. Můžeš ho posílat buď metodou GET nebo POST.

GET se používá právě třeba u vyhledávání - parametry jsou předávány přímo v adrese a taková adresa se dá přidat i do záložek. U GET ale není - IMHO - důvod k přesměrování, protože když dáš zpět a form znovu odešleš, tak se nic hrozného nestane, jen znovu vyhledáš to samé.

POST se používá třeba při přihlašování nebo destrukčních operacích (mazání apod.) a u něj se využívá přesměrování. Když přijde POST požadavek, tak ho okamžitě zpracuješ a přesměruješ na nějakou neutrální adresu.

Čili v tvém případě je to dvojí odesílání naprosto zbytečné.
Taps
Profil
Brouzdalek
a nezkoušel jsi to třeba takto:

$sql1 = "SELECT kod FROM ".$prefix."zadost WHERE kod=".$kod.";
Brouzdalek
Profil
No já sem o asi blbě vysvětlil. Odesílám ke zpracování formulář (je to taková žádost, má asi 10 polí). Součástí je i vytovření kódu, který se uloží do proměnné
$kod
. Poté dochází k vyhodnocování formuláře přes PHP script.
Tam je ta podmínka, že formulář se stejným vygenerovaným kódem lze uložit do databáze pouze jednou (aby nebyl uložen v db. vícekrát). A aby to šlo rozpoznat, tak tam mám ten SELECT do databáze. No a pokud je všechno dobře, tak by to nic nemělo vrátit, popř. chybu, ale ikdyž použiju if, atd. tak to pořád nefunguje a nechová tak, jak bych chtěl....

U formuláře mám klasický <form action="#nazev_scriptu">..
Brouzdalek
Profil
Taps: To už taky, ale nešlo to, nevím, kde je chyba...
Brouzdalek
Profil
Rád bych využíval i jinej způsob tohoto ověřování, ale zatím mě ještě nic jinýho nenapadlo.. :(
Mastodont
Profil
Brouzdalek
Aha, tak pokud je to ukládání, tak to je jiná, tam to přesměrování určitě patří.

Taky by sis mohl ty kódy ukládat do session.
Brouzdalek
Profil
To mě taky napadlo, ale jak to potom udělat se zrušením dané sessions ? Já totiž sessions používám k autorizaci uživatelů na stránkách, takže je najednou zlikvidovat nemůžu :)
Mastodont
Profil
A co přesně ti tam nefunguje - to přesměrování neproběhne? Nebo je problém v tom, že ti za Header chybí ještě exit? Header samo o sobě neukončí provádění kódu ...
Brouzdalek
Profil
No pokud používám tlačítko zpět, tak se formulář znovu a znovu odesílá, což je nežádoucí... potřebuju to nějako omezit. Header používám jen pro přesměrování současně s použitím toho SELECTU z databáze...
3lo by využít sessions nebo něco jinýho ?
Brouzdalek
Profil
Nevíte si s tím někdo rady ? Přivítám každou pomoc a nápad...

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