سؤال

أقوم بإنشاء نموذج تعليق منبثق لـ jquery ajax، ولكن أواجه مشكلة في الطريقة التي أقوم بها بإعداد "honeypot" الخاص بي في php.

مصيدة الجذب ($ robotest) لا تعمل؛بدلاً من ذلك يعرض البرنامج النصي "البريد الإلكتروني غير صحيح".هل يمكن لأحد أن يشير إلى خطأي؟شكرًا لك

نموذج HTML هو:

<form class="cmxform" id="commentForm" method="POST" action="">
   <p>
     <label for="cname">Name</label>
     <input id="cname" name="name" size="25" class="required" minlength="2" />
   </p>
   <p>
     <label for="cemail">E-Mail</label>
     <input id="cemail" name="email" size="25"  class="required email" />
   </p>
   <p>
     <label for="curl">URL</label>
     <input id="curl" name="url" size="25"  class="url" value="" />
   </p>
   <p>
     <label for="ccomment">Your comment</label>
     <textarea id="ccomment" name="comment" cols="22"  class="required"></textarea>
   </p>
    <p class="robotic" id="pot">
        <label>Please leave this blank:</label>
        <input name="robotest" type="text" id="robotest" class="robotest" />
    </p>
   <p>
     <input class="submit" type="submit" value="Submit"/>
   </p>

يحرر:

شكرًا لـJamWaffles على الدعم.فيما يلي الطريقة الصحيحة لتنفيذ مصيدة الجذب.(وكما أشار كامالو، ستحتاج إلى تعيين معرف "robotest" لعرضه: لا شيء في ملف CSS الخاص بك):

<?php
$robotest = $_POST['robotest'];
$email = $_POST['email'];   
if((!filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) { 
    print "E-mail is correct";      
    $to      = 'asdfdsafasdfsda@gmail.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com';       
    mail($to, $subject, $message, $headers);        
} else {
    print "E-mail is not correct";
}   
?>
هل كانت مفيدة؟

المحلول

filter_var() تقوم بإرجاع قيمة غير خاطئة عندما يكون البريد الإلكتروني صالحًا، وليس false.مسح ال ! قبل filter_var( في الخاص بك if():

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest = "")) 

أنت تقوم بتنفيذ التعليمات البرمجية داخل ملف if() متى filter_var() فشل, ، ولهذا السبب تحصل

البريد الإلكتروني غير صحيح

لرسائل البريد الإلكتروني صالحة.


شيء آخر فاتني أيضًا هو حقيقة أنك كذلك تكليف ل $robotest بدلاً من مقارنتها بسلسلة فارغة.تحتاج إلى استخدام عامل مقارنة يساوي مزدوجًا بدلاً من عامل تعيين يساوي مفردًا.لك if() يجب أن يبدو مثل هذا:

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) 

نصائح أخرى

للحصول على إجابة بديلة، قمت بإعداد إدخال "وعاء العسل" في HTML الخاص بي مع العرض: لا شيء giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top