【问题标题】:after clicking submit on a contact form, how do i stay on the same page in wordpress?在联系表单上单击提交后,我如何留在 wordpress 的同一页面上?
【发布时间】:2014-05-18 00:40:49
【问题描述】:

所以我使用 PHP 在 WordPress 中创建了一个自定义联系表单。表格发送,我正在接收电子邮件。我遇到的问题是,一旦您点击提交,它就会进入一个帖子页面,并且不会停留在原始页面上。

我尝试过使用会话和标头位置(没有用) 我也试过把它放在我的行动“<?php echo $_SERVER['PHP_SELF']; ?>”中,也不起作用。 (邮件只是不发送它并将我发送到 404 页面。

所以我有点卡住了,要解决这个问题。如果这是一个静态网页,通常我不会有任何问题,但因为我使用的是 WordPress,所以这个任务似乎比较麻烦。

这里是网站的链接http://www.indianpointresort.ca/

这里是php验证:

<?php

    /*session_start();
    if(!isset($_SESSION['afaisfjisjfijfjiwaefjawsefijef'])){
        $url = 'http://www.indianpointresort.ca/';
        header("Location:home.php?url=$url");
    }*/

    $name = trim($_POST['name']);
    $email = trim($_POST['email']);
    $phone = trim($_POST['phone']);
    $subject = trim($_POST['subject']);
    $message = trim($_POST['message']);

    echo "$name | $email | $phone | $subject | $message";   


    if(isset($_POST['submit'])){

        $boolValidationOK = 1;
        $strValidationMessage = "";

        //validate first name
        //validate last name
        if(strlen($name)<3){
            $boolValidationOK = 0;
            $strValidationMessage .= "Please fill in a proper first and last name </br>";
        }
        //email validation:
        $emailValidate =  validate_email( $email );// calls the function below to validate the email addy
        if(!$emailValidate ){
             $boolValidationOK = 0;
            $strValidationMessage .= "Please fill in proper email address </br>";
        }
        //validate phone
        $phone = checkPhoneNumber($phone);
        if(!$phone){
            $boolValidationOK = 0;
            $strValidationMessage .= "Please fill proper phone number </br>";
        }
        //validate subject
        if(strlen($subject)<3){
            $boolValidationOK = 0;
            $strValidationMessage .= "Please fill in a proper subject description </br>";
        }
        //validate description
        if(strlen($message)<3){
            $boolValidationOK = 0;
            $strValidationMessage .= "Please fill in a proper message </br>";
        }
        if($boolValidationOK == 1){
            //$strValidationMessage = "SUCCESS";

            //MAIL SECURITY !!!!!!!


    // WE MUST VALIDATE AGAINST EMAIL INJECTIONS; THE SPAMMERS BEST WEAPON
    $badStrings = array("Content-Type:",
    "MIME-Version:",
    "Content-Transfer-Encoding:",
    "bcc:",
    "cc:");
    foreach($_POST as $k => $v){// change to $_POST if your form was method="post"
        foreach($badStrings as $v2){
            if(strpos($v, $v2) !== false){
                // In case of spam, all actions taken here
                //header("HTTP/1.0 403 Forbidden");
                echo "<script>document.location =\"http://www.bermuda-triangle.org/\" </script>";
                exit; // stop all further PHP scripting, so mail will not be sent.
            }
        }
    }


    $ip = $_SERVER['REMOTE_ADDR'];
    //echo $ip;


    /* Spammer List: IP's that have spammed you before ***********/
            $spams = array (
             "static.16.86.46.78.clients.your-server.de", 
             "87.101.244.8", 
             "144.229.34.5", 
             "89.248.168.70",
             "reserve.cableplus.com.cn",
             "94.102.60.182",
             "194.8.75.145",
             "194.8.75.50",
             "194.8.75.62",
             "194.170.32.252"
             //"S0106004005289027.ed.shawcable.net"  Phil's IP as test 

        ); // array of evil spammers

        foreach ($spams as $site) {// Redirect known spammers
            $pattern = "/$site/i";
            if (preg_match ($pattern, $ip)) {
                // whatever you want to do for the spammer
                echo "logging spam activity..";

                exit();
            }
        }   
        $to = "";
        //$subject = " Indian Point";
        // compose headers
        $headers = "From: Indian Point Resort.\r\n";
        $headers .= "Reply-To: $email\r\n";
        $headers .= "X-Mailer: PHP/".phpversion();

        $message = wordwrap($message, 70);

        // send email
        mail($to, $subject, $message, $headers);
            }
    }//end of submit

    //validate phone number
    function checkPhoneNumber($number){
        $number = str_replace("-", "", $number);
        $number = str_replace(".", "", $number);
        $number = str_replace(" ", "", $number);
        $number = str_replace(",", "", $number);
        $number = str_replace("(", "", $number);
        $number = str_replace(")", "", $number);

        if((strlen($number) != 10) || (!is_numeric($number))){
            return false;
        }else{
            return $number;
        }
    }
    //email validation
    function validate_email( $senderemail ){ // this is a function; it receives info and returns a value.
    $email = trim( $senderemail ); # removes whitespace
     if(!empty($email) ):
        //  validate email address syntax
       if( preg_match('/^[a-z0-9\_\.]+@[a-z0-9\-]+\.[a-z]+\.?[a-z]{1,4}$/i', $email, $match) ):
         return strtolower($match[0]); # valid!
       endif;
     endif;
     return false; # NOT valid!
}
?>

这是表格:

   <div id="msgForm" class=" msgForm five columns">
                                    <h4>Questions?</h4>
                                    <h5>Send us a message!</h5>
                                    <form id="contactForm" name="contactForm" method="post" action="<?php the_permalink(); ?>">
                                        <p><input type="text" name="name" value="<?php echo $name; ?>" placeholder="name*"/></p>
                                        <p><input type="email" name="email" placeholder="E-mail*"/></p>
                                        <p><input type="text" name="phone" placeholder="Phone #*"/></p>
                                        <p><input type="text" name="subject" placeholder="subject*"/></p>
                                        <p><textarea name="message" placeholder="Message*"></textarea></p>
                                        <p><input type="submit" name="submit" placeholder="Submit"/></p>
                                        <div class="error">
                                        <?php
                                        if($strValidationMessage){
                                            echo $strValidationMessage;
                                        }
                                        ?>
                                        </div>  
                                    </form>
                                </div><!--end of form-->

【问题讨论】:

  • 阻止表单提交的唯一方法是使用 javascript,或者将 sumbit 按钮变成常规按钮(但仍然可以提交)。
  • 请注意,Wordpress 有自己的特殊方式来处理 ajax 请求。

标签: php jquery html wordpress forms


【解决方案1】:

首先,我会从您的信息中删除该 gmail 帐户(为了安全起见)。 其次,我建议您使用 Wordpress 提供的 sendmail 脚本。 有像重力形式这样的插件,可以让您制作一个表单并决定所有这些选项,而无需制作静态表单,也无需为此创建新的模板文件。

您只能更改刷新后表单将重定向到哪个页面(操作将决定)

如果您希望它保持在同一页面上,您可以将页面本身放入操作中,并在顶部放置一个 if 语句,如

if(isset($_POST['submit'])){

//验证,sendmail,以及这里可能的错误 } 别的{ //显示表格 }

无论如何,令人耳目一新的网络表单是它的标准。这就是它提交东西的方式。您可以阻止页面的唯一方法是使用 jquery 或 javascript,如下所示:(给您的提交一个 id)

$('#submit').on("click", function(e){
//this prevents any submit functionality (like refresh)
e.preventDefault();
//custom code to get values here and put them in the sendmail function like so:
var message = $('$message').text();

}

【讨论】:

  • 我试图避免使用插件。我不知道这是否会造成问题,但我的联系表格是页脚,而不是实际页面。我的表单提交了,这只是我遇到问题的重定向。
  • 啊,就这些?在这种情况下,您可以只使用表单操作。使用表单操作调用发送邮件的页面,但要 100% 确保该页面不打印任何内容。 (无文本)因为那样它将转到该页面并显示它会显示的任何文本。如果您确保操作页面只有功能(如 sendmail)并且没有打印任何内容,则它应该简单地刷新页面而不进行重定向。如果这不起作用,您始终可以在表单中提供当前 url 并将其重定向回该表单。如果这仍然不起作用,您将不得不像我在帖子中所说的那样求助于 jQuery。
  • 哦,不,插件绝对不是必需的。如果您足够熟练,我建议您不要使用它们,因为它们会减慢您的 wordpress 速度。 :)
  • 我最终使用了联系表格 7...有点体面,我会为我的下一个 wordpress 网站尝试自定义表格 :)
【解决方案2】:

尝试ajax 表单提交。并将insert query 添加到单独的文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2015-01-02
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多