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
Ježíš Kristus:
řádek 3:
if (!isset($_GET['generate']) && !isset($_POST["send"])) {
Ježíš Kristus
Profil
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"])
true.. dá se to nějak přehodit na false při odeslání?
Tori
Profil
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
Tori:
To je precizní :D Už to valí jak jsem potřeboval :) Díky moc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0