Předpokládám, že to ladíš přímo na serveru. Nejdřív tedy otestuj funkčnost skriptu bez fcí
mail, postačí, když se ti bude vypisovat hláška o úspěšném odeslání. Nebudeš tak zatěžovat mailserver a čekat na maily ve schránce. U Faraonova skriptu bys musel dočasně odstranit konstrukci, která ověřuje odeslání. Měň skript po krocích a sleduj, zda dělá, co má. Fci
mail samotnou otestuj až nakonec.
Určitě hlavičku FROM uprav i s tím
". \r\n";
na konci. I když to vypadá divně, je to podle specifikace a některé mailservery jsou na to háklivé.
Někteří spamboti už umí přečíst i captchu, takže je mnohdy tak zprzněná, že už ji pořádně nepřečte ani lidský uživatel, proto captchu nemám rád. S tím dnem to není špatné, problém by mohl nastat, pokud by uživatel vepsal datum vteřinu a dříve před půlnocí a odeslal formulář vteřinu a déle po půlnoci. Pak by shoda nenastala a asi by ho to zmátlo.
Něco je popsáno zde:
http://jecas.cz/spamKdyž se důsledně validuje více odesílaných políček formuláře, třeba jméno, ID, ale lze i tu adresu, nemusí být antispam ani potřeba. Boti se v naprosté většině případů snaží nacpat do inputů webové a mailové adresy plus nějaké fráze a ty dobrou validací neprojdou.
Jo, našeptávání dříve zadaných hodnot do inputů je dílo cache prohlížeče, když mu to uživatel umožní, t.j. nezakáže a nevymaže. Ale to je něco jiného, než je potřeba. Tady je třeba jen to, aby když odeslání skončí neúspěchem, se do value inputu přeneslo, co z něj bylo naposledy odesláno. A to je v proměnné $_POST['nazev-inputu']. Uživatel si opraví, co potřebuje a odešle to znova, protože políčko odesílá vždy svůj obsah (nyní upravený) a ten ty přes POST překlápíš do value. Když to skončí úspěchem, header("location: adresastranky.php") formulář zresetuje a všechny proměnné se zapomenou, respektive se načtou výchozí hodnoty. Políčka tedy budou prázdná (krom výchozího zavináče v poli pro mail) a nedojde k opětovnému odeslání, ani když uživatel refreshne stránku. Tvůj skript si i po odeslání hodnoty pamatuje, a kdyby uživatel znovunačetl stránku, odešel by mail podruhé atd...
Jinak bych fakt doporučoval začlenit html kód přímo do php souboru, pak bys pouze escapoval uvozovky (případně apostrofy) a mohl do html vkládat přímo proměnné.
Konec Faraonova skriptu by tedy vypadal takto:
...
if(!empty($resultMessage)) {
echo '<div class="form_success">' . $resultMessage . '</div>';
}
echo "
<!-- Tady by byl DOCTYPE -->
<head>
<!-- html hlavička se vším, co do ní patří -->
</head>
<body>
<!-- Nadpis, další text, atd... -->
<div class=\"par_form\">
<form action=\"\" method=\"post\">
<div class=\"form_name\"> <label for=\"jmeno\">Jméno a příjmení:</label> <input type=\"text\" name=\"jmeno\" value=\"".$jmeno."\" size=\"20\"></div>
<div class=\"form_email\"><label for=\"email\"></label>Email:</label> <input type=\"text\" name=\"email\" value=\"".$from."\" size=\"20\"></div>
<div class=\"form_mem_no\"><label for=\"mem_no\">Členské číslo:</label> <input type=\"text\" name=\"mem_no\" value=\"".$mem_no."\" size=\"20\"></div>
<div class=\"form_address\"><label for=\"adresa\">Adresa:</label> <input type=\"text\" name=\"adresa\" value=\"".$adresa."\" size=\"60\"></div>
<div class=\"form_message\"><label for=\"zprava\">Zpráva:</label> <input type=\"text\" name=\"zprava\" value=\"".$zprava."\" size=\"60\"></div>
<div class=\"form_spam\"><label for=\"spam\">Počet prefektur Japonska:</label> <input type=\"text\" name=\"spam\" size=\"2\"></div>
<div class=\"form_button\"><input type=\"submit\" name=\"submit\" value=\"Odeslat\"></div>
</form>
<!-- Patička nebo bůhvícoještě -->
</body>
";
?>
... a samozřejmě by to mělo příponu
.php místo
.html. Veškerá echa by bylo možné nahradit proměnnými a proměnné pak vypisovat, kde by bylo třeba takto:
echo "
Nějaký nekonečně dlouhý text, který má sto dvacet pět a půl slova ".$tadyVypisuPromennou." a pokaračuju dál textem, abych ".$vypsalDruhou.$aTreti.$aCtvrtou." proměnnou v jediném echu, což je hospodárnější...
";