Autor | Zpráva | ||
---|---|---|---|
Ježíš Kristus Profil |
Zdravím :)
Chtěl jsem si udělat mailer a zároveň vyhovět forpsi v antispamové kontrole. Se skriptem který to obstará jsem si poradil. Chyba je v tom, že při opsání správného kódu, mi to vrací chybu.. Řekl bych, že je to tím, že se při odeslání vykoná znovu skript pro generování obrázku a přepíše to proměnnou s kódem. A jelikož nemám zkušenosti, tak bych potřeboval poradit jak tomu zamezit.. <?php session_start(); if (!isset($_GET['generate'])) { for ($i=0;$i<5;$i++){ while(strlen($str[$i])!=1){ $random=rand(48,123); if( ($random>47 && $random<58) || ($random>96 && $random<123) || ($random>64 && $random<91) ){ $str[$i] = chr($random);} } $text .= $str[$i]; } $_SESSION['string']= $text; $GLOBALS['text'] = $text; } elseif (isset($_GET['generate'])){ $GLOBALS['text'] = $_SESSION['string']; $picture = imagecreatefrompng("./img/background.png"); for ($i=0; $i<5; $i++){ $textcolor = imagecolorallocate($picture,rand(0,130),rand(0,130),rand(0,130)); $char = substr($GLOBALS['text'],0+$i,1); imagettftext ($picture,rand(15,25),rand(-45,45),15+($i*38),35, $textcolor,"./font/ariblk.ttf",$char) ;} header("Content-type: image/png"); imagepng($picture); imagedestroy($picture); exit(); }; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> ..hafo html kódu //mailer <?php $code_error =""; $email_error =""; if(isset($_POST["send"])){ $name =$_POST["name"]; $email =$_POST["email"]; $emailtext =$_POST["emailtext"]; $code =$_POST["code"]; if (($name != "") && ($email != "") && ($emailtext != "") && ($_SESSION['string'] == $code)){ //načtení maileru require("class.phpmailer.php"); //vytvoření maileru $mail = new PHPMailer(); //odeslání ze SMTP $mail->IsSMTP(); $mail->Host = "smtp.forpsi.com"; //mail v html? $mail->IsHTML(false); //odesílatel a příjemce $sender_name =$name; $sender_address =$email; $receiver_name ="Hi Joinery"; $receiver_address ="mail@gmail.com"; //předmět a text $subject ="Zpráva z webu HiJoinery"; $text =$_POST["emailtext"]; //odesílatel $mail->From = $sender_address; $mail->FromName = $sender_name; //příjemce $mail->AddAddress($receiver_address,$receiver_name); //mail $mail->Subject = $subject; $mail->Body = $emailtext; //zalomení řádku po x znacích $mail->WordWrap = 50; //odeslání if(!$mail->Send()){ //odeslani se nezdarilo $mail_error="Odeslání se nezdařilo".$mail->ErrorInfo;} else{ //ok $email_error="Zpráva byla odeslána";} } else { if ($name == ""){ $name="vyplňte prosím jméno";} if (($email == "") || !eregi('^[a-z0-9_]{1}[a-z0-9\-_]*(\.[a-z0-9\-_]+)*@[a-z0-9]{1}[a-z0-9\-_]*(\.[a-z0-9\-_]+)*\.[a-z]{2,6}$', $email)){ $email="vyplňte prosím adresu";} if ($emailtext == ""){ $emailtext="vyplňte prosím text";} if ($_SESSION['string'] != $code){ $code_error="chybný kód";} } } if (!($email_error=="Zpráva byla odeslána")){ echo $email_error.' <form method="post" action="posli_mail.php" style="position:absolute; top:0px; left:0px"> <fieldset> <input type="text" name="name" value="'.$name.'" size="30"/><br> <input type="text" name="email" value="'.$email.'" size="30"/><br> <textarea rows="9" name="emailtext" cols="27">'.$emailtext.'</textarea><br/> <img src = "posli_mail.php?generate" alt="code"/><br/> <input type="text" name="code" value="'.$code_error.'" size="30"/><br/> <input type="submit" value="Odeslat" name="send"/> </fieldset> </form> '; } else { echo $email_error.' <form method="post" action="posli_mail.php" style="position:absolute; top:0px; left:0px"> <fieldset> <input type="text" name="name" value="" size="30"/><br> <input type="text" name="email" value="" size="30"/><br> <textarea rows="9" name="emailtext" cols="27"></textarea><br/> <img src = "posli_mail.php?generate" alt="code"/><br/> <input type="text" name="code" value="" size="30"/><br/> <input type="submit" value="Odeslat" name="send"/> </fieldset> </form> '; } ?> |
||
Tori Profil |
#2 · Zasláno: 25. 9. 2010, 23:24:33
Ježíš Kristus:
řádek 3: if (!isset($_GET['generate']) && !isset($_POST["send"])) { |
||
Ježíš Kristus Profil |
#3 · Zasláno: 26. 9. 2010, 16:50:51
Tori:
Dík Tori :) Už to nehlásí chyby.. akorát když odešlu mail, tak se to už negeneruje.. Přemýšlel jsem, že bych odesílal nějakou proměnnou, která by se nastavila při úspěšným odeslání, ale nevím jak to zkombinovat s tou podmínkou :( protože po odeslání je isset($_POST["send"]) |
||
Tori Profil |
#4 · Zasláno: 26. 9. 2010, 17:28:57
Ježíš Kristus:
aha, to mi nedošlo, že vlastně po odeslání by se mělo přegenerovat captcha. // generování antispam.kódu hodíme do funkce, neb se použije vícekrát function generujAntispam($pocetZnaku=5) { for ($i=0;$i<$pocetZnaku;$i++) { while(strlen($str[$i])!=1) { $random=rand(48,123); if( ($random>47 && $random<58) || ($random>96 && $random<123) || ($random>64 && $random<91) ){ $str[$i] = chr($random);} } $text .= $str[$i]; } $_SESSION['string']= $text; $GLOBALS['text'] = $text; } session_start(); if (!isset($_GET['generate']) && !isset($_POST["send"])) { generujAntispam(); } elseif (isset($_GET['generate'])) { // ... } ...... hafo html ..... if(isset($_POST["send"])) { $name =$_POST["name"]; $email =$_POST["email"]; $emailtext =$_POST["emailtext"]; $code =$_POST["code"]; if (($name != "") && ($email != "") && ($emailtext != "") && ($_SESSION['string'] == $code)) { // ..... příprava emailu //odeslání if(!$mail->Send()){ //odeslani se nezdarilo $mail_error="Odeslání se nezdařilo".$mail->ErrorInfo;} else{ //ok $email_error="Zpráva byla odeslána"; generujAntispam(); } } else { // zjišťujeme, které pole nebylo vyplněno if ($name == ""){ $name="vyplňte prosím jméno";} // atd.... } // .... formuláře |
||
Ježíš Kristus Profil |
#5 · Zasláno: 26. 9. 2010, 18:04:47
Tori:
To je precizní :D Už to valí jak jsem potřeboval :) Díky moc :) |
||
Časová prodleva: 14 let
|
0