Honeypot PHP لنموذج التعليق
-
12-11-2019 - |
سؤال
أقوم بإنشاء نموذج تعليق منبثق لـ 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.