简单的php验证码联系表格

时间:2016-07-04 19:15:16

标签: php html5

我正在尝试使用php中的验证码创建简单的联系表单。然而事实证明,实施验证码不属于我的联盟。

我在stackoverflow上发现了一个类似问题的简单答案,这让我向前迈进了一步,但我再次陷入困境。

所以我需要一个联系表单,只检查是否输入了文本,如果回答了正确的验证码,则电子邮件不是强制性的。



</br>

<?php
				$a=rand(2,9);
				$b=rand(2,9);
				$c=$a+$b;


	if (isset($_POST['contact_text']) && isset($_POST['contact_email']) ) {
		$contact_text = $_POST['contact_text'];
		$contact_email = $_POST['contact_email'];
		$recaptcha = $_POST['recaptcha'];
		
		$info = 'Pranešimas apie korupciją: ';
		$sender = 'Atsiuntė: ';
			
		if (!empty($contact_text) && ($recaptcha == $c ))  {
				
		echo $recaptcha;
		
		$to = 'muksinovas@gmail.com';
		$subject = 'Korupcija';
		$body = $sender."\n".$contact_email."\n".$info."\n".$contact_text;
		$headers = 'From: '.$contact_email;
		
		
		if (@mail($to,$subject, $body, $headers)) {
			echo 'Jūsų pranešimas sėkmingai išsiustas. ';
			
		} else {
		}  echo 'Įvyko klaida, bandykite dar karta.';
			
		} else {
			echo 'Neteisingai užpildyta forma.';
			}	
	}
?>
<form action="contact1.php" method="post">
	Pranešimas apie korupciją:<br><textarea name="contact_text" rows="6" cols="30" maxlength="1000" ></textarea><br><br>  <!--  -->
	Email (nebūtinas):<br><input type="text" name="contact_email" maxlength="30">
     <?php echo $a."+".$b."="?><input type="number" name="recaptcha" maxlength="2" style="width:40px" />
    <input type="submit" value="Siusti">
    <br>    
</form>
&#13;
&#13;
&#13;

现在问题是我总是收到细节不正确的消息。我试图回应recaptcha只是为了看看$ c是否正确并且它有效。但由于某些原因无法将$ recaptcha与$ c或其他问题进行比较,我不确定。

4 个答案:

答案 0 :(得分:0)

当用户提交联系表单与验证检查时,$ c的值将是完全不同的值。该值将在每个请求中更改,因为脚本会被重新解释。

答案 1 :(得分:0)

您必须在初始页面加载时保存$ c的值,以便您可以在下一个请求中进行比较。您可以将它存储在$ _SESSION中。

答案 2 :(得分:0)

你可以写这个

    <?php
    $min_number = 2;
    $max_number = 9;


    $random_number1 = mt_rand($min_number, $max_number);
    $random_number2 = mt_rand($min_number, $max_number);


    if (isset($_POST['contact_text']) && isset($_POST['contact_email']) ) {
        $contact_text = $_POST['contact_text'];
        $contact_email = $_POST['contact_email'];
        $recaptcha = $_POST['recaptcha'];
        $firstNumber = $_POST["firstNumber"];
        $secondNumber = $_POST["secondNumber"];

        $checkTotal = $firstNumber + $secondNumber;


        $info = 'Pranešimas apie korupciją: ';
        $sender = 'Atsiuntė: ';

        if (!empty($contact_text) && ($recaptcha != $checkTotal ))  {

        echo $recaptcha;

        $to = 'muksinovas@gmail.com';
        $subject = 'Korupcija';
        $body = $sender."\n".$contact_email."\n".$info."\n".$contact_text;
        $headers = 'From: '.$contact_email;


        if (@mail($to,$subject, $body, $headers)) {
            echo 'Jūsų pranešimas sėkmingai išsiustas. ';

        } else {
        }  echo 'Įvyko klaida, bandykite dar karta.';

        } else {
            echo 'Neteisingai užpildyta forma.';
            }   
    }
?>
<form action="contact1.php" method="post">
    Pranešimas apie korupciją:<br><textarea name="contact_text" rows="6" cols="30" maxlength="1000" ></textarea><br><br>  <!--  -->
    Email (nebūtinas):<br><input type="text" name="contact_email" maxlength="30">
    <?php
        echo $random_number1 . ' + ' . $random_number2 . ' = ';
    ?>
    <input type="number" name="recaptcha" maxlength="2" style="width:40px" />
    <input name="firstNumber" type="hidden" value="<?php echo $random_number1; ?>" />
    <input name="secondNumber" type="hidden" value="<?php echo $random_number2; ?>" />
    <input type="submit" value="Siusti">
    <br>    
</form>

这可能会解决您的问题

答案 3 :(得分:0)

您应该使用会话来解决您的问题,我对您的代码进行了少量更改,它应该可以正常工作。

<?php
    @session_start();

    if (isset($_POST['contact_text']) && isset($_POST['contact_email']) ) {

        $contact_text = $_POST['contact_text'];
        $contact_email = $_POST['contact_email'];
        $recaptcha = $_POST['recaptcha'];

        $info = 'Pranešimas apie korupciją: ';
        $sender = 'Atsiuntė: ';

        if (!empty($contact_text) && ($recaptcha == $_SESSION["captcha"]))  {

            echo $recaptcha;

            $to = 'muksinovas@gmail.com';
            $subject = 'Korupcija';
            $body = $sender."\n".$contact_email."\n".$info."\n".$contact_text;
            $headers = 'From: '.$contact_email;


            if (@mail($to,$subject, $body, $headers)) {
                echo 'Jūsų pranešimas sėkmingai išsiustas. ';

            } else {

            }  echo 'Įvyko klaida, bandykite dar karta.';

        }else{
            echo 'Neteisingai užpildyta forma.';
        }   
    }else{

        $a=rand(2,9);
        $b=rand(2,9);
        $c=$a+$b;

        //setting captcha code in session
        $_SESSION["captcha"] = $c;

        ?>
        <form action="contact1.php" method="post">
            Pranešimas apie korupciją:<br><textarea name="contact_text" rows="6" cols="30" maxlength="1000" ></textarea><br><br>  <!--  -->
            Email (nebūtinas):<br><input type="text" name="contact_email" maxlength="30">
             <?php echo $a."+".$b."="?><input type="number" name="recaptcha" maxlength="2" style="width:40px" />
            <input type="submit" value="Siusti">
            <br>    
        </form>
<?php
    }
?>