Autor Zpráva
kuba
Profil *
mam nasledujici problem:
kdyz odeslu formular (ktery odkazuje na ten samy soubor, ve kterem je formular) a zapisu data formulare do mysql, tak po zmacknuti klavesy F5 (neboli refresh stranky...), se vykona skript znovu, coz je logicke, ale znovu se do databaze zapisi stejne udaje... delat dalsi mysql dotaz, jestli uz nejsou v databazi stejna data mi pripada zbytecne slozite. pokud bych tedy "vyprazdnil" promenne (po kazdem dotazu do mysql), tak by se vse vyresilo (JavaScript mi hlida, jestli nejsou ve formulari prazdna tlacitka). existuje nejaky "session_destroy()" na $_REQUEST, nebo na $HTTP_POST/GET_VARS???
WertriK
Profil *
To je problem skoro vsech formularu.
Taky jsem zkousel po vlozeni do DB promennou zrusit nebo ji dan prazdnou hodnotu, ale je ti to k nicemu stale zde ten problem bude.
Nejlepsi a jedine reseni je; mit formular a ukladaci script ve 2 souborech.
Po vlozeni dat se script presmeruje zpet na soubor s fomularem.
krteczek
Profil
já to dělám tak že pokud vše proběhne v pořádku, tak pomocí:
header("location: jinastrankakdezobrazimzesetopovedlo");
ale není to ten nejlepší zpusob, jen je jednoduchy...
Lepší zpusob je u každého příspěvku kontrolovat jestli není identický přispěvek už v databázi... (asi pomocí md5 hashe), ale musi to být jen text přízpěvku, žádné věci které se mění v tom být nesmí (třeba čas) protože potom by neseděl md5 hash
nic lepšího mne nenapadá
kuba
Profil *
presmerovani formulare na jinou stranku se mi nechce delat (ale delal jsem to) - je to dalsi soubor navic...
no, mysel jsem ze je to nejaka jednoducha blbost... takze zatim zustanu u testovani pomoci mysql. pro jistotu davam test na stejny prispevek, stejneho uzivatele a v nejakych pripadech i na stejne datum (ne cas). test na uzivatele proto, ze v diskusi muzou napr. dva ruzni uzivatele zadat slovo "souhlasim". tomu kdo souhlasil jako druhej :-) by se uz prispevek nezobrazil... to jen tak na okraj...
kuba
Profil *
ted me napadlo, co takhle pouzit unset??? v manualu pisou nasledujici :

Unset a given variable (PHP 3, PHP 4, PHP 5)

void unset ( mixed var [, mixed var [, mixed ...]] )

unset() destroys the specified variables. Note that in PHP 3, unset() will always return TRUE (actually, the integer value 1). In PHP 4, however, unset() is no longer a true function: it is now a statement. As such no value is returned, and attempting to take the value of unset() results in a parse error.

Example 2095. unset() example
copy to clipboard
<?php
// destroy a single variable
unset($foo);

// destroy a single element of an array
unset($bar['quux']);

// destroy more than one variable
unset($foo1, $foo2, $foo3);
?>
kuba
Profil *
ted me napadlo, co takhle pouzit unset??? v manualu pisou nasledujici :

Unset a given variable (PHP 3, PHP 4, PHP 5)

void unset ( mixed var [, mixed var [, mixed ...]] )

unset() destroys the specified variables. Note that in PHP 3, unset() will always return TRUE (actually, the integer value 1). In PHP 4, however, unset() is no longer a true function: it is now a statement. As such no value is returned, and attempting to take the value of unset() results in a parse error.

Example 2095. unset() example
copy to clipboard
<?php
// destroy a single variable
unset($foo);

// destroy a single element of an array
unset($bar['quux']);

// destroy more than one variable
unset($foo1, $foo2, $foo3);
?>
krteczek
Profil
kubo nepomuže to, protože to co píšeš se provádí na serveru, ale já mužu po pulhodině udělat F5 a prohlížeč odešle stejná data, takže ti vnutím stejný přízpěvek
v tom pripadě kontrolovat shodu jak uživatele, tak nadpisu, tak i zprávy, pokud budfou shodné tak je to identický zápis, ale ještě bych to doplnil kontrolou času, a nechal bych to kontrolovet max tu hodinu zpět...
krteczek
kuba
Profil *
ja vim, ted jsem to zkousel a je to na nic... ale nejak jednodusejc to jit preci musi...
WertriK
Profil *
musi, ale nejde...
krteczek
Profil
ještě bych to doplnil třeba textem (v případě shody) že dotyčný stejný přízpěvek již odeslal, jestli si ho přeje opravdu zapsat. ještě k te logice, kontrolovat od toho uživatele jestli je rozdíl mezi jeho posledními dvěma přízpěvky, pokud není, tak zprávu o možné duplicitě...
krteczek
kaifman
Profil
....
Leo
Profil
"presmerovani formulare na jinou stranku se mi nechce delat (ale delal jsem to) - je to dalsi soubor navic... "

A vite o tom, ze komu neni rady, tomu neni pomoci? :-) Dalsi moznost je v databazi kontrolovat pred vlozenim prispevku jestli uz tam neni. Leo
kuba
Profil *
v databazi kontrolovat pred vlozenim prispevku jestli uz tam neni - jestli se nemylim, tak to se tu rozebiralo celou dobu. myslel jsem jinou alternativu, nez pred kazdym zadanim prispevku do databaze ji celou projizdet pomoci mysql_query...
Leo
Profil
No moc moznosti nemate - bud skript, ktery meni obsah databaze nedela vystup do prihlizece (ale pak vam porad zbyva moznost, ze se roztrzity uzivatel vrati tlacitkem zpet a odesle znovu, stava se mi to tady v tomhle foru), nebo/a tuto kontrolu, jestli uz prispevek v databazi neni (napriklad pres md5 otisk dat). Leo
23k
Profil
header location ... nechapu co je na tom spatne, vlozit prispevek, a presmerovat zpatky do fora ... tak se to snad dela vsude
mackopu
Profil
Dá se to i zkombinovat s javascriptem - formulář otevřít metodou window.open(), po odeslání údajů okno s formulářem nechat automaticky zavřít (window.close()) a metodou window.opener.location.reload() nechat automaticky refrešnout okno s výpisem, ze kterého se formulář otevíral.
printf_jinde
Profil *
Připadá mi, že nejjistější způsob je s tou kontrolou v databázi, ten jeden dotaz navíc (bude-li šikovně napsaný) už databáze přežije a napíšeš jej rychleji než odpověď v této diskusi.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0