【发布时间】:2015-06-24 22:38:19
【问题描述】:
我有一个链接到contact.php 的联系表。我在表单中添加了一个小的验证码小部件。我知道垃圾邮件机器人仍然可以得到这个,但这只是为了学习目的。
无论如何,我创建了 2 个随机数,用户必须在它附近的文本区域中输入相应的答案。问题是单击提交以检查验证码是否正确时,我无法运行 PHP。
对不起,如果代码有点混乱,但它只是一个简单的表单,包含姓名、电子邮件和消息 + 一个按钮。
P.S:$total 仅用于阻止 chrome 在尝试刷新时显示确认表单重新提交消息。
更新:
首先感谢所有的更正,我是新来的。
其次,它只解决了一半。这是因为只有当我从 <form action="contact.php" method="post" name="contact_form"> 中删除 contact.php 时才会显示验证码验证警报消息。除此之外,由于我对 Web 编程还很陌生,是否有任何其他编程语言(最好在这种情况下使用)我可以使用,以便我可以创建验证码,检查它并在上面写上Your captcha is incorrect 之类的注释文本框顶部(如果验证码不正确)并阻止用户提交表单,直到值正确?
<?php
// init session to store captcha numbers
session_start()
?>
<form action="contact.php" method="post" name="contact_form">
<div class="contact" id="contact">
<div class="container">
<h2>Contact Us For a Quote</h2>
<div class="contact-info">
<ul>
<li class="first">
<div class="position">
<a class=" icon user"></a><input name="name" type="text" class="text" value="Name" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}">
<div class="clear"></div>
<div class="dot">
<span> </span>
</div>
</div>
</li>
<li class="first">
<div class="position">
<a class=" icon email"></a><input name="email" type="text" class="text" value="Email" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}">
<div class="clear"></div>
<div class="dot">
<span> </span>
</div>
</div>
</li>
<div class="clearfix"> </div>
<li class="second">
<div class="position">
<a class=" icon msg"></a><textarea name="message" value="Your Message/request" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Your Message/request';}">Your Message/request</textarea>
<div class="clear"></div>
<div class="dot1">
<span> </span>
</div>
</div>
</li>
</ul>
</div>
<div class= "verification">
<center>
<?php
$min = 1;
$max = 7;
$num1 = rand ($min, $max);
do{
$num2 = rand ($min, $max);
}while($num1 == $num2);
// store captcha numbers to check them on submit
$_SESSION['num1'] = $num1;
$_SESSION['num2'] = $num2;
echo $num1 . " + " . $num2 . " =";
$total = $num1 + $num2;
?>
<input name="ver" type="text" value="" onfocus="this.value = '';" size="2" maxlength="2">
</center>
</div>
<center><input type="submit" name="submit" onclick="myFunction()" value="Submit Request"></center>
<?php
// your form pass data through post, not get
if(isset($_POST['submit'])){
//submit clicked
$verification = $_POST['ver'];
// check numbers on submit
if($_SESSION['num1'] + $_SESSION['num2'] != $verification)
{
echo'<script type="text/javascript">alert("Incorrect verification code");</script>';
}
}
?>
</div>
</div>
打印屏幕:http://i.stack.imgur.com/u0Ca9.png
contact.php 内容
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$to = "name@example.com";
$subject = "New Form Submission";
$finmsg = "A visitor has submitted a new request.\n\nName: $name\nEmail: $email\nMessage: $message";
mail ($to, $subject, $finmsg);
?>
【问题讨论】:
-
您正在处理contact.php 上的表单,该代码sn-p 是否包含在contact.php 文件中?
-
显示来自
contact.php的代码。 -
当您的表单显示
$_POST时,我看到您使用的是$_GET,如果您在同一页面上处理表单,请将php 处理放在页面顶部