Opakovane odosielanie prispevkov
15 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Dobrý den, mam taky problem s opakovanim odosielanim prispevkov na forum. Ak odoslem spravu tak ju normalne odosle a zobrazi ale po stisknuti na tlacidlo "refresh" mi spravu odosle este raz , a tak sa to moze opakovat. Poradte mi prosim na to nejaku fintu :)
-
da se to overit, sic dost lamersky tak, ze si nechas z databaze porovnat, jestli uz existuje se stejnym nadpisem a textem na poslednich par mistech, a kdyz takovy existovat bude, tak nedelej nic, kdyz nebude tak zapis...
-
Nejlepší je to řešit přesměrováním stránky. Skript, který zpracovává formulář jen uloží data do databáze (nic nevypisuje na výstup) a pak pomocí hlavičky přesměruje na výpis. Tahle "finta" je popsána v každé knížce o PHP, takže stačí pozorně číst ;) viz http://cz2.php.net/manual/en/function.header.php
-
ještě jsem zapomněl uvést, že to přesměrování se dělá pomocí location header('Location: http://www.example.com/');
-
No toto header som pouzil,ale to ma presmeruje na odkaz ihned a este ako spustim stranku. header('Location: http://www.example.com/'); -- dal som to na koniec skriptu
-
<HTML>Tak to bude problém v logice vašeho skriptování. Ten header je třeba poslat pouze v případě, že zapisujete data do toho fóra, jindy ne.</HTML>
-
hmm, takye co mam spravit abz to islo normalne ?
-
udělat skript třeba PridejPrispevekDoDatabaze.php v tom bude jen php kód pro vložení příspěvku do databáze a pak ten header příspěvky bude formluář oidesílat na ten skript PridejPrispevekDoDatabaze.php a to je celý
-
normalni podminkou. <?php if(isset($_POST['submit'])) { ....vas php script.... header("Location: www.vase.stranka.cz"); } ?> ...stranka...
-
No mam takyto skript <?php $query = mysql_query("SELECT * FROM `spam` WHERE `ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1"); $spamip = @mysql_num_rows($query); if($spamip == 0){ if(isset($_POST['submit']) && strlen($_POST['message2']) == 0){ if(strlen($_POST['name']) == 0){ $error['name'] = 'Please enter your name'; } if(strlen($_POST['email']) == 0){ $error['email'] = 'Please enter an e-mail address'; } else { if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email'])){ $error['email'] = 'Please enter a correct e-mail address'; } } if(strlen($_POST['message']) < 2){ $error['message'] = 'Please enter a message'; } if(!isset($error)){ $postentry = @mysql_query("INSERT INTO `entries` (name, email, website, message, date, ip) VALUES ('".addslashes($_POST['name'])."', '".addslashes($_POST['email'])."', '".addslashes($_POST['website'])."', '".addslashes($_POST['message'])."', now(), '".$_SERVER['REMOTE_ADDR']."')"); $message = "Hey there!\n\r You're popular today!\n Someone gave you a guestbook entry:\n\r"; $message .= "From: ".stripslashes($_POST['name'])."\n"; $message .= "E-mail: ".stripslashes($_POST['email'])."\n"; $message .= "Website: ".stripslashes($_POST['website'])."\n\r"; $message .= "Message:\n".stripslashes($_POST['message'])."\n"; mail($email, 'New GuestBook Entry!', $message); if($postentry == true){ unset($_POST); } } } else if(isset($_POST['submit']) && strlen($_POST['message2']) > 0){ $spamentry = @mysql_query("INSERT INTO `spam` (ip) VALUES ('".$_SERVER['REMOTE_ADDR']."')"); } } else { $error['spam'] = 'Your IP: '.$_SERVER['REMOTE_ADDR'].' is banned!'; } ?> A neslo to ked som to header daval :( No a v dalsej knihe mam skript : <? require ("./obecne.php"); if ($send && $text != ""): // pokiaľ boli odoslané dáta // odstránime z príspevku HTML dáta a pripravíme údaje pre vloženie do db $IP = $_SERVER["REMOTE_ADDR"]; //zistíme si prispievateľovu IP adresu //HTMLSpecialChars odstráni HTML tagy $text = HTMLSpecialChars($text); $email = HTMLSpecialChars($email); $nazov = HTMLSpecialChars($nazov); $meno = HTMLSpecialChars($meno); $cas = date("d-m-Y H:i:s"); //zistíme si čas vloženia príspevku $captcha = HTMLSpecialChars($captcha); //pole kontrolnej otázky - aj tu odstránime HTML //antispam ochrana je veľmi dôležitá, keďže spamboti s obľubou pridávajú príspevky do gb :) if ($captcha == "10") { // vlozime prispevok do db @$f = mysql_query ("INSERT INTO guestbook VALUES ('','$meno','$email','$nazov','$text','$cas','$IP')"); if (!@$f) { //ak nastane chyba: echo "<span style=\"color:red\">Nepodarilo sa uložiť príspevok! Kontaktujte prosím Admina.<br></span>"; echo Mysql_Error(); //pre lepšiu orientáciu v probléme (ak by nastal) si vypíšeme chybovú hlášku } } else { //ak ste odpovedali na kontrolnú otázku nesprávne: echo "<span style=\"color:red\">Skontrolujte zadanú odpoveď na kontrolnú otázku!</span>"; } endif; //začiatok výstupu stránky ?> A tu neje ani to isset() Tak kde by som to mohol vlozit aby to slo ? diki
-
omg .. proc proste nedas na konec ulozeni prispevku (misto vysano oznameni, ze se prispevek ulozil) header .. ? header('Location: '.$_SERVER["PHP_SELF"]); Tak se to odesle samo na sebe a POST promenne zmizí. Pokud jde o vypsani hlasky muzes pouzit treba alternativu .. header('Location: '.$_SERVER["SCRIPT_NAME"].'?hotovo=ok'); ___ Pochybuji, ze jsem jediny, komu se stovka radku cist opravdu nechce ..
-
Freeze (dreamer.kvalitne.cz) komu se stovka radku cist opravdu nechce jo :) VLADIS (knr-presov.xf.cz) Vzdycky muzes do stranky vlozit skryty input s nahodnym cislem a toto cislo ulozit treba do session. A pokud poslane cislo != cislo v session, prispevek zahod. Pokud se == pak prispevek pridej a zmen cislo v session, presmeruj na stranku... (tez moznost obflush) Tez muzes smazat vsechny $_GET / $_POST jednoduchym scriptem nebo pres unset. a) unset($_GET); unset($_POST); b) foreach ($_GET as $key=>$value) {$_GET[$key] = '';} foreach ($_POST as $key=>$value) {$_POST[$key] = '';}
-
peta: "Tez muzes smazat vsechny $_GET / $_POST" =))))) dobrej vtip. Je sice hezký, že ze serveru umažeš všechny GETy/POSTy, ale to, že u klienta zůstanou a ten je může vesele posílat dál už tě netrápí, že? ;) původní autor: zamezení vícenáshobného odesílání formuláře se řeší pomocí PRG metody (Post - Redirect -Get) kdy po úsěšném odeslání formuláře přejdeš na tu samou stránku pomocí hlavičky 303, čímž se ze všech POST proměnnýc hstanou neškodné GET proměnné. A není co řešit... :)
-
Heh, to je pěkný, to jsem neznal :-)
-
Tom (manual.wz.cz) nezkousel jsem, zrejme problem Opery nebo jinych nestandardnich prohlizecu, ktere nespravne kesuji stranky. Osobne pouzivam obflush a presmerovani pres header(), protoze script zpracujici formular mam ve vedlejsim souboru.