【问题标题】:Form validation and captcha表单验证和验证码
【发布时间】:2012-07-29 12:19:27
【问题描述】:

我创建的联系表单有两个问题。以前我受到垃圾邮件的严重打击。

  1. 我要求在处理表单之前填写所有字段,但我所写的内容不起作用:无论一个人是否填写所有字段,信息都会进入数据库。 ***通过使用修复:

    函数 validateForm() { var x=document.forms["validation"]["firstname"].value; 如果 (x==null || x=="") { alert("请输入您的名字"); 返回假; }

适用于所有字段,此字段适用于电子邮件:

    var x=document.forms["validation"]["email"].value;
 var atpos=x.indexOf("@");
 var dotpos=x.lastIndexOf(".");
 if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
  {
  alert("Please enter a valid email address");
  return false;
  }

现在,我需要让验证码正常工作或如何添加以检查验证码在同一个 javascript 中是否正确?我认为错误出在这个地方?:

    session_start();
    if($_POST['submitted'] == "contactus")
     if( $_SESSION['security_code'] == $_POST['security_code'] &&   !empty($_SESSION['security_code'] ) ) {
        header("Location:http://www.berrieswebdesign.com/thankyou.php?message=thanks");
                unset($_SESSION['security_code']);
   } else {
    // Insert your code for showing an error message here
    echo "<div id='thankyoubox'>'Security breach! Security Breach! Ehem...Your     security code was incorrect.'</div>";
  }
    ob_flush();

        ?>

最后,这里是contactfunctions.php

    <?php ob_start();//Required for the redirect to work?>
 <?php 
 include_once("databasefunctions.php");

 $contactsdbtable = "contacts";

 function GetHeaders()
 {
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    // Additional headers
    $headers .= "To: {$firstname} <{$email}>" . "\r\n";
    $headers .= 'From: My Website <info@mywebsite.com>' . "\r\n";
    return $headers;
 }
 function ContactMessage($firstname, $lastname, $email, $message, $location)
 {
global $contactsdbtable;
openDatabase();
$firstname = mysql_real_escape_string($firstname);
$lastname = mysql_real_escape_string($lastname);
$email = mysql_real_escape_string($email);
$message = mysql_real_escape_string($message);
$location = mysql_real_escape_string($location);

$result = QuickQuery("INSERT INTO {$contactsdbtable}(firstname, lastname, email, message, location) 
                      VALUES('{$firstname}', '{$lastname}', '{$email}', '{$message}', '{$location}')");

if($result)
{
    $headers = GetHeaders();
    $message = "\"Thank you for contacting us at My Website. We will be answering your website inquiry post haste.\"<br />
    <br />
    <br />
    Best Regards,<br />
    <br />
    Me
    ";
    mail($email, "RE: Design Inquiry", $message, $headers);
    mail("myemail@blahblah.com", "Website Inquiry", "{$firstname}, {$email}, has sent a web design inquiry", $headers);

}
}


?>

感谢我提前收到的任何帮助。另外,由于这篇文章很长,你们介意列出您要解决的问题是 1 还是 2?

谢谢!

【问题讨论】:

    标签: php html forms validation captcha


    【解决方案1】:

    好的,试试这个:

    <?php
        $is_error = false;
        if($_POST['submitted'] == "contactus")
        {
          $firstname = $_POST['firstname'];
          $lastname = $_POST['lastname'];
    
          $email = $_POST['email'];
          $message = $_POST['message'];
          $location = $_POST['location'];
          if(!$firstname || $firstname = ''){
            $error = "Please enter your first name.";
            $is_error = true;
          } else if(!$lastname || $lastname= ''){
            $error = "Please enter your last name.";
            $is_error = true;
          } else if(!$email || $email= ''){
            $error = "Please enter a valid email.";
            $is_error = true;
          }else if(!$message || $message= ''){
            $error = "Please enter your message.";
            $is_error = true;
          }else if(!$location || $location= ''){
            $error = "Please tell us where you're from.";
            $is_error = true;
          }
    
          if(($is_error === false) && ($_SESSION['security_code'] == $_POST['security_code']))
          {
            ContactMessage($firstname, $lastname, $email, $message, $location);
          } else {
            Error($error);
          }
        }
     ?> 
    

    【讨论】:

    • 感谢扎克。我试过这个并跳过将信息添加到表单字段中,但其余信息仍然进入数据库
    • 谢谢扎克。还是行不通。我现在已经实现了 javascript(由 w3 学校提供),它在未填写字段时发出警报。我已经对其进行了测试,并且在填写所有字段之前没有任何内容进入数据库。但我仍然遇到验证码问题。请参阅上面的修改后的代码。
    • 这发出了正确的安全警告,但是当所有字段都填写并且验证码正确时,您会收到“感谢您联系我们”,但没有任何内容进入数据库。此外,当字段被遗漏时,不会显示任何错误消息
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多