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é.

  1. 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 :)
  2. 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...
  3. 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
  4. ještě jsem zapomněl uvést, že to přesměrování se dělá pomocí location header('Location: http://www.example.com/');
  5. 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
  6. <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>
  7. hmm, takye co mam spravit abz to islo normalne ?
  8. 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ý
  9. normalni podminkou. <?php if(isset($_POST['submit'])) { ....vas php script.... header("Location: www.vase.stranka.cz"); } ?> ...stranka...
  10. 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
  11. 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 ..
  12. 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] = '';}
  13. 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... :)
  14. Heh, to je pěkný, to jsem neznal :-)
  15. 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.

← Zpět na všechna témata