Autor | Zpráva | ||
---|---|---|---|
kuba Profil * |
#1 · Zasláno: 4. 10. 2005, 19:24:26
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 * |
#2 · Zasláno: 4. 10. 2005, 19:30:50
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 |
#3 · Zasláno: 4. 10. 2005, 19:31:49
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 * |
#4 · Zasláno: 4. 10. 2005, 19:39:16
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 * |
#5 · Zasláno: 4. 10. 2005, 19:41:51
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 * |
#6 · Zasláno: 4. 10. 2005, 19:42:24
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 |
#7 · Zasláno: 4. 10. 2005, 19:55:17
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 * |
#8 · Zasláno: 4. 10. 2005, 19:57:22
ja vim, ted jsem to zkousel a je to na nic... ale nejak jednodusejc to jit preci musi...
|
||
WertriK Profil * |
#9 · Zasláno: 4. 10. 2005, 20:12:21
musi, ale nejde...
|
||
krteczek Profil |
#10 · Zasláno: 4. 10. 2005, 20:16:01
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 |
#11 · Zasláno: 4. 10. 2005, 21:15:03 · Upravil/a: kaifman
....
|
||
Leo Profil |
#12 · Zasláno: 4. 10. 2005, 21:40:21
"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 * |
#13 · Zasláno: 4. 10. 2005, 22:00:15
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 |
#14 · Zasláno: 4. 10. 2005, 22:06:46
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 |
#15 · Zasláno: 5. 10. 2005, 08:13:14
header location ... nechapu co je na tom spatne, vlozit prispevek, a presmerovat zpatky do fora ... tak se to snad dela vsude
|
||
mackopu Profil |
#16 · Zasláno: 5. 10. 2005, 09:19:52
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 * |
#17 · Zasláno: 5. 10. 2005, 12:40:37
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.
|
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0