2015-11-14 91 views
0

我的电子邮件表单有问题。一切正常,除了反垃圾邮件领域。PHP反垃圾邮件域

在所有情况下,反垃圾邮件字段都显示我错误的答案。如果它是真的和假的,但是当我将该字段留空时,则电子邮件发送正确。所以这是问题之一。

问题二是:我想在反垃圾邮件的答案是正确的,然后一个新的问题不会生成。我想记住的问题和答案,当答案是正确的

所以看看我的代码,请帮助我?我做错了什么?

PHP代码:

<?php 

require './PHPMailer/PHPMailerAutoload.php'; 

// varijable 
$err_name = $err_email = $err_message = $err_forma = $uspesno = $captcha = ""; 
$name = $email = $message = $user_result = $arg_1 = $arg_2 =""; 


// Konfiguracija PHPMailer-a 

$mailer = new PHPMailer; 
try { 
    if (isset($_POST['submit'])) { 

     $name = isset($_POST['name']) ? $_POST['name'] : FALSE; 
     $email = isset($_POST['email']) ? $_POST['email'] : FALSE; 
     $message = isset($_POST['message']) ? $_POST['message'] : FALSE; 
      $user_result = isset($_POST['result']) ? $_POST['result'] : FALSE; 
      $arg_1 = isset($_POST['arg_one']) ? $_POST['arg_one'] : FALSE; 
      $arg_2 = isset($_POST['arg_two']) ? $_POST['arg_two'] : FALSE; 


     $mailer->From  = $email; // Email posaljioca 
     $mailer->FromName = "Nova Porudzbina"; // Ime Posaljioca 
     $mailer->AddAddress("[email protected]"); //adresa na koju se salje 
     $mailer->isHTML(TRUE); // set email format to HTML 
     $mailer->WordWrap = 50; // set word wrap to 50 characters 
     $mailer->CharSet = "utf-8"; //"ukljucuje" cirlicna slova, kao i latinicna sa kvacicama 


     $mailer->Subject = 'zahtev za podršku: ' . $naziv_servera; 


     if ($_SERVER["REQUEST_METHOD"] == "POST") { 

      $name  = test_input($_POST["name"]); 
      $name_exp = "/^[A-Za-z\p{L} .'-]{2,40}+$/u"; // Dozvoljava naša slova i ograničava da najmanje može 2 a najviše 40 karaktera 

      if (!preg_match($name_exp, $name)) { 
       $err_name .= 'Vaše ime nije validno.'; 


      } 


      $email  = test_input($_POST["email"]); 
      $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 

      if (!preg_match($email_exp, $email)) { 

       $err_email .= 'Vaša e-mail adresa nije validna.'; 

      } 

      $message  = test_input($_POST["message"]); 
      $message_exp = "/^[A-Za-z\p{L} .'-]{2,400}+$/u"; 

      if (!preg_match($message_exp, $message)) { 

       $err_message .= 'Vaša poruka nije validna.'; 
      } 

      $user_result  = test_input($_POST["result"]); 

      if($total <> $user_result) { 
      $captcha .= 'Anti-spam odgovor koji ste uneli nije tačan.'; 
      } 
     } 


     // Body 

     $body = "<h2 style='background: red; color: #fff;'>Nova Porudzbina</h2>"; 
     $body .= "<b>Ime i Prezime:</b>" . $name . "<br>"; 
     $body .= "<b>Email:</b>" . $email . "<br>"; 
     $body .= "<b>Poruka:</b>" . $message . "<br>"; 

     $mailer->Body = $body; 

     // Posalji 
      if (strlen($err_name == "" && $err_email == "" && $err_message == "" && $total == $user_result)) { 
      $mailer->send(); // ako nema nikakve greške - pošalji e-mail 
      $uspesno .= 'Vasa poruka je poslata'; 
     } 
    } 
} 

catch (phpmailerException $ex) { 
    echo $ex->errorMessage(); 
} 
catch (Exception $ex) { 
    echo $ex->getMessage(); 
} 

function test_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

function generateFieldNumber($min = 1, $max = 3) 
{ 
    return rand(1, 3); 
} 

function createCaptcha($arg_1 = '', $arg_2 = '', $total = 0) 
{ 


    if(isset($_POST['submit'])) { 

      $arg_1 = $_POST['arg_one']; 
      $arg_2 = $_POST['arg_two']; 
      $user_result = $_POST['result']; 

      $total = $arg_1 + $arg_2; 


    } 
} 

HTML代码:

<?php 
include "send_email.php"; 
?> 

<?php createCaptcha(); ?> 

<span><?php echo $uspesno;?></span> 
     <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="submit"> 
    <div class="name">Name:</div> 
    <input name="name" type="text" value="<?php echo $name;?>" size="30"/> 
    <span><?php echo $err_name;?></span> 
    <div class="email">Email:</div> 
    <input name="email" type="text" value="<?php echo $email;?>" size="30"/> 
    <span><?php echo $err_email;?></span> 
    <div class="message">Message:</div> 
    <textarea name="message" rows="7" cols="30"><?php echo $message;?></textarea><br> 
    <span><?php echo $err_message;?></span><br><br> 
    <label>Anti-Spam:</label> 
    <input type="text" name="arg_one" value="<?php echo generateFieldNumber();?>" size="2"> 
    + <input type="text" name="arg_two" value="<?php echo generateFieldNumber();?>" size="2"> 
    = <input type="text" name="result" value="<?php echo $user_result;?>" size="2"> 
    <span><?php echo $captcha;?></span><br> 
     <input type="submit" name="submit" value="Submit" id="submit"> 
    </form>  

回答

0

为了改变内部createCaptcha$user_result值,你需要将其申报为世界在你的函数。

function createCaptcha() { 
    global $user_result, $arg_1, $arg_2, $total; 

    if(isset($_POST['submit'])) { 

      $arg_1 = $_POST['arg_one']; 
      $arg_2 = $_POST['arg_two']; 
      $user_result = $_POST['result']; 

      $total = $arg_1 + $arg_2; 
    } 
} 
+0

嗯,我试试,但是这不是帮助 – Pain

0

@Alon

谢谢,我找到了问题的一个解决方案:仍存在

但第二个问题。

这是问题的一个解决方案:

<?php 

require './PHPMailer/PHPMailerAutoload.php'; 

// varijable 
$err_name = $err_email = $err_message = $err_forma = $uspesno = $captcha = ""; 
$name = $email = $message = $user_result = $arg_1 = $arg_2 = ""; 


// Konfiguracija PHPMailer-a 

$mailer = new PHPMailer; 
try { 
    if (isset($_POST['submit'])) { 

     $name = isset($_POST['name']) ? $_POST['name'] : FALSE; 
     $email = isset($_POST['email']) ? $_POST['email'] : FALSE; 
     $message = isset($_POST['message']) ? $_POST['message'] : FALSE; 
      $user_result = isset($_POST['result']) ? $_POST['result'] : FALSE; 
      $arg_1 = isset($_POST['arg_one']) ? $_POST['arg_one'] : FALSE; 
      $arg_2 = isset($_POST['arg_two']) ? $_POST['arg_two'] : FALSE; 
      $total = $arg_1 + $arg_2; 

     $mailer->From  = $email; // Email posaljioca 
     $mailer->FromName = "Nova Porudzbina"; // Ime Posaljioca 
     $mailer->AddAddress("[email protected]"); //adresa na koju se salje 
     $mailer->isHTML(TRUE); // set email format to HTML 
     $mailer->WordWrap = 50; // set word wrap to 50 characters 
     $mailer->CharSet = "utf-8"; //"ukljucuje" cirlicna slova, kao i latinicna sa kvacicama 


     $mailer->Subject = 'zahtev za podršku: ' . $naziv_servera; 


     if ($_SERVER["REQUEST_METHOD"] == "POST") { 

      $name  = test_input($_POST["name"]); 
      $name_exp = "/^[A-Za-z\p{L} .'-]{2,40}+$/u"; // Dozvoljava naša slova i ograničava da najmanje može 2 a najviše 40 karaktera 

      if (!preg_match($name_exp, $name)) { 
       $err_name .= 'Vaše ime nije validno.'; 


      } 


      $email  = test_input($_POST["email"]); 
      $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 

      if (!preg_match($email_exp, $email)) { 

       $err_email .= 'Vaša e-mail adresa nije validna.'; 

      } 

      $message  = test_input($_POST["message"]); 
      $message_exp = "/^[A-Za-z\p{L} .'-]{2,400}+$/u"; 

      if (!preg_match($message_exp, $message)) { 

       $err_message .= 'Vaša poruka nije validna.'; 
      } 

      $user_result  = test_input($_POST["result"]); 

      if($total <> $user_result) { 
      $captcha .= 'Anti-spam odgovor koji ste uneli nije tačan.'; 
      } 
     } 


     // Body 

     $body = "<h2 style='background: red; color: #fff;'>Nova Porudzbina</h2>"; 
     $body .= "<b>Ime i Prezime:</b>" . $name . "<br>"; 
     $body .= "<b>Email:</b>" . $email . "<br>"; 
     $body .= "<b>Poruka:</b>" . $message . "<br>"; 

     $mailer->Body = $body; 

     // Posalji 
      if (strlen($err_name == "" && $err_email == "" && $err_message == "" && $captcha == "")) { 
      $mailer->send(); // ako nema nikakve greške - pošalji e-mail 
      $uspesno .= 'Vasa poruka je poslata'; 
     } 
    } 
} 

catch (phpmailerException $ex) { 
    echo $ex->errorMessage(); 
} 
catch (Exception $ex) { 
    echo $ex->getMessage(); 
} 

function test_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

function generateFieldNumber($min = 1, $max = 3) 
{ 
    return rand(1, 3); 
} 

function createCaptcha() { 
    global $user_result, $arg_1, $arg_2, $total; 

if(isset($_POST['submit'])) { 

     $arg_1 = $_POST['arg_one']; 
     $arg_2 = $_POST['arg_two']; 
     $user_result = $_POST['result']; 

     $total = $arg_1 + $arg_2; 
} 
} 

问题第二,也许......

function generateFieldNumber($min = 1, $max = 3) 
{ 
    return rand(1, 3); 
    if($captcha == "") 

/* than remember or stop generate new number ? */ 

}