это моя форма, так как она отправляет электронное письмо на четыре разных адреса эл. почты разных переключателей ….. Но я не хочу, чтобы форма отправлялась до тех пор, пока не будет проверена капча, поэтому я добавил эту капчу, но это не так работает, я не знаю, почему. Пожалуйста, помогите мне в этом …. Спасибо заранее.
<?php
session_start();
//error_reporting(E_ERROR | E_PARSE);
//echo "<pre>";
//print_r($_REQUEST);
if(!empty($_POST['answer']) )
{
//echo "You entered " . htmlentities($_POST['answer']) . " which is ";
if ($_SESSION['answer'] == $_POST['answer'])
{
//echo 'correct';
$validatedCaptcha = true;
}
else
{
echo '<center>'.'You Filled wrong Captcha. We expected ' . $_SESSION['answer'].' .Kindly Fill the Form Again'.'</center>';
$validatedCaptcha = false;
}
}
$digit1 = mt_rand(1, 20);
$digit2 = mt_rand(1, 20);
if (mt_rand(0, 1) === 1) {
$math = "$digit1 + $digit2";
$_SESSION['answer'] = $digit1 + $digit2;
} else {
if($digit1 >= $digit2)
{
$math = "$digit1 - $digit2";
$_SESSION['answer'] = $digit1 - $digit2;
}
else if($digit1 < $digit2)
{
$math = "$digit2 - $digit1";
$_SESSION['answer'] = $digit2 - $digit1;
}
}
//echo "<pre>";
//print_r($_SESSION);
?>
<center>
<?php
$name = $_REQUEST['name11'];
$email = $_REQUEST['email11'];
$phone12 = $_REQUEST['mobile11'];
$subject = $_REQUEST['subject11'];
$message1 = $_REQUEST['message11'];
$zone1 = $_REQUEST['zone1'];
$null_virdi = "-f " . $email;if (isset($_REQUEST['submit']) && $validatedCaptcha == true ) {
$message = "Name: " . $name . "\n" . "Email: " . $email . "\n" . "phone :" . $phone12 . "\n" . "Message :" . $message1;
if ($_REQUEST['zone1'] == "South") {
echo "Thank you for Contacting our South Indian Zonal Office";
mail("[email protected]", $subject, $message, null, $null_virdi);
}
if ($_REQUEST['zone1'] == "Delhi") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our Delhi Office";
}
if ($_REQUEST['zone1'] == "Hyderabad") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our Hyderabad & AP Office";
}
if ($_REQUEST['zone1'] == "Pune") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our Pune/Nasik Office";
}
if ($_REQUEST['zone1'] == "west") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our West Zone Office";
}
}
?>
<html><head>
<script>
function validateForm()
{
var x = document.forms["myForm"]["email1"].value;
var atpos = x.indexOf("@");
var dotpos = x.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length)
{
alert("Not a valid e-mail address");
return false;
}
}
</script>
</head><body>
<div style="width:50%;border: 4px double #dbd395;margin: 0;padding: 28px 0px 0px 34px;background-color: #F8F8F8">
<form name="myForm" action="" onSubmit="return validateForm();" method="post" >
<table >
<tr>
<h3 style="margin-left:5px;">Enquiry for Quotation</h3>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>Name <font color="#FF0000">*</font> : <input type="text" required="required" name="name11" size="40"/></td>
</tr>
<td></td>
</tr>
<tr>
<td>Email <font color="#FF0000">*</font> : <input type="text" required="required" name="email11" size="40"/></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>Mobile <font color="#FF0000">*</font> : <input type="text" required="required" name="mobile11" size="40"/></td>
</tr>
<tr>
<td>Zone <font color="#FF0000">*</font> : <input type="radio" required="required" name="zone1" value="South"/>South India <input type="radio" name="zone1" value="Delhi" />Delhi NCR <input type="radio" name="zone1" value="Hyderabad"/>Hyderabad & AP <br> <input type="radio" name="zone1" value="Pune"/>Pune/Nashik <input type="radio" name="zone1" value="west"/>Other </td>
</tr>
<td></td>
</tr>
<tr>
<td>Subject <font color="#FF0000">*</font> : <input type="text" required="required" name="subject11" size="40"/></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td style="vertical-align: top;"><font style=vertical-align:top; color="#000000">Message</font><font style=vertical-align:top; color="#FF0000">* :</font> <textarea rows="4" cols="32" name="message11" required="required"/></textarea></td>
</tr>
<tr><td><center><b>Captcha</b></center></td></tr>
<tr><td align="center">What's <?php echo $math; ?> = <input size="5" name="answer" type="text" /><br /></td></tr>
<tr>
<td align="center"><input type="submit" name="submit" value="Send Message"/></td>
</tr>
</table>
</form>
</div>
<body/>
</html>
</center>
Ваша «капча» абсолютно слабая: «ответ» — это значение между (1 + 1) и (20 + 20), дающее не более 39 разных результатов в последовательном ряду (2 … 40).
Так как есть парсеры (и я видел, как они работают с различными формами с такими «капчами», как это), которые просто перебивают случайные числа от 1 до 100 против таких форм, как это, им потребуется пара минут для публикации / регистрации / что угодно на ваш сайт.
Ну, я не получил правильный ответ, который я просил … но проблема была в том, что я использовал эту форму на странице WordPress, и она не работала, так как проверка капчи всегда шла не так, и форма всегда использовалась, чтобы показать, что ваша капча неверна, то есть присутствует в остальной части. Но после некоторых исследований я обнаружил, что проблема связана с сеансом, который я использовал в своей форме, и я узнал, что WordPress имеет свой собственный сеанс, поэтому проверка всегда будет неправильной. так что я сделал это, и моя форма работает сейчас. Надеюсь, это поможет кому-то еще.
<?php //error_reporting(E_ERROR | E_PARSE); ?>
<?php
if(!empty($_POST['answer']) )
{
//echo "You entered " . htmlentities($_POST['answer']) . " which is ";
if ($_REQUEST['answer'] == $_POST['answer'])
{
//echo 'correct';
$validatedCaptcha = true;
}
else
{
echo '<center>'.'You Filled wrong Captcha. We expected ' . $_REQUEST['answer'].' .Kindly Fill the Form Again'.'</center>';
$validatedCaptcha = false;
}
}
$digit1 = mt_rand(1, 20);
$digit2 = mt_rand(1, 20);
if (mt_rand(0, 1) === 1) {
$math = "$digit1 + $digit2";
$_REQUEST['answer'] = $digit1 + $digit2;
} else {
if($digit1 >= $digit2)
{
$math = "$digit1 - $digit2";
$_REQUEST['answer'] = $digit1 - $digit2;
}
else if($digit1 < $digit2)
{
$math = "$digit2 - $digit1";
$_REQUEST['answer'] = $digit2 - $digit1;
}
}
//echo "<pre>";
//print_r($_SESSION);
?>
<center>
<?php
$name = $_REQUEST['name11'];
$email = $_REQUEST['email11'];
$phone12 = $_REQUEST['mobile11'];
$subject = $_REQUEST['subject11'];
$message1 = $_REQUEST['message11'];
$zone1 = $_REQUEST['zone1'];
$null_virdi = "-f " . $email;if (isset($_REQUEST['submit']) && $validatedCaptcha == true ) {
$message = "Name: " . $name . "\n" . "Email: " . $email . "\n" . "phone :" . $phone12 . "\n" . "Message :" . $message1;
if ($_REQUEST['zone1'] == "South") {
echo "Thank you for Contacting our South Indian Zonal Office";
mail("[email protected]", $subject, $message, null, $null_virdi);
}
if ($_REQUEST['zone1'] == "Delhi") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our Delhi Office";
}
if ($_REQUEST['zone1'] == "Hyderabad") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our Hyderabad & AP Office";
}
if ($_REQUEST['zone1'] == "Pune") {
mail("[email protected],[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our Pune/Nasik Office";
}
if ($_REQUEST['zone1'] == "west") {
mail("[email protected]", $subject, $message, null, $null_virdi);
echo "Thank you for Contacting our West Zone Office";
}
}
?>
<html><head>
<script>
function validateForm()
{
var x = document.forms["myForm"]["email1"].value;
var atpos = x.indexOf("@");
var dotpos = x.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length)
{
alert("Not a valid e-mail address");
return false;
}
}
</script>
</head><body>
<div style="width:50%;border: 4px double #dbd395;margin: 0;padding: 28px 0px 0px 34px;background-color: #F8F8F8">
<form name="myForm" action="" onSubmit="return validateForm();" method="post" >
<table >
<tr>
<h3 style="margin-left:5px;">Enquiry for Quotation</h3>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>Name <font color="#FF0000">*</font> : <input type="text" required="required" name="name11" size="40"/></td>
</tr>
<td></td>
</tr>
<tr>
<td>Email <font color="#FF0000">*</font> : <input type="text" required="required" name="email11" size="40"/></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>Mobile <font color="#FF0000">*</font> : <input type="text" required="required" name="mobile11" size="40"/></td>
</tr>
<tr>
<td>Zone <font color="#FF0000">*</font> : <input type="radio" required="required" name="zone1" value="South"/>South India <input type="radio" name="zone1" value="Delhi" />Delhi NCR <input type="radio" name="zone1" value="Hyderabad"/>Hyderabad & AP <br> <input type="radio" name="zone1" value="Pune"/>Pune/Nashik <input type="radio" name="zone1" value="west"/>Other </td>
</tr>
<td></td>
</tr>
<tr>
<td>Subject <font color="#FF0000">*</font> : <input type="text" required="required" name="subject11" size="40"/></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td style="vertical-align: top;"><font style=vertical-align:top; color="#000000">Message</font><font style=vertical-align:top; color="#FF0000">* :</font> <textarea rows="4" cols="32" name="message11" required="required"/></textarea></td>
</tr>
<tr><td><center><b>Captcha</b></center></td></tr>
<tr><td align="center">What's <?php echo $math; ?> = <input size="5" name="answer" type="text" /><br /></td></tr>
<tr>
<td align="center"><input type="submit" name="submit" value="Send Message"/></td>
</tr>
</table>
</form>
</div>
<body/>
</html>
</center>