我提交时重定向?

时间:2013-05-31 03:45:43

标签: php html5 forms email

每次点击提交按钮,页面都会重定向。

如何设置它以便页面不会重定向并且它运行停留在当前页面上的服务器端代码并​​在我的表单上方回显?

HTML代码:

    <form name="contact_form" method="post" action="mail.php">
<table border="0">
<tbody class="Form">
<tr>
<td>
<label for="NameInput">Your Name:<font color="#FF0000">*</font></label>
<input autofocus="autofocus" placeholder="John Doe" id="NameInput" name="NameInput" required="required" />
</td>
</tr>
<tr>
<td>
<label for="CompanyName">Your Company:<font color="#FF0000">*</font></label>
<input required="required" placeholder="Warner bros." id="CompanyName" name="CompanyName" />
</td>
</tr>
<tr>
<td>
<label id="PhoneNumber" name="PhoneNumber">Phone: </label>
<input placeholder="888-888-8888" id="PhoneNumber" name="PhoneNumber"/>
</td>
</tr>
<tr>
<td>
<label id="Email" name="Email">Email:<font color="#FF0000">*</font></label>
<input required="required" placeholder="johndoe@gmail.com" id="Email" name="Email" type="email" />
</td>
</tr>
<tr>
<td>
<label for="Website">Website: </label>
<input placeholder="https://" id="Website" name="Website" />
</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<br/>
<br/>

<p><strong>What interests you, broadly speaking?</strong></p>
<br/>

<p><input  id="WebDesignCheckbox" name="WebDesignCheckbox" type="checkbox">Web Design/Development</input></p>

<input id="SocialMediaCheckbox" name="SocialMediaCheckbox" type="checkbox">Social Media</input>
>
<input id="MobilePresence" name="MobilePresence" type="checkbox">Mobile Presence</input>

<input id="OnlineAdvertising" name="OnlineAdvertising" type="checkbox">Online Advertising</input>

<input id="SEOCheckbox" name="SEOCheckbox" type="checkbox">Search Engine Optamization</input>

<p><input id="ecommerceCheckbox" name="ecommerceCheckbox" type="checkbox" >eCommerce</input></p>

<br/>


<label for="comments">Your Ideas to Life?</label><br/>
<textarea placeholder="How can we help you?" id="comments" name="comments" style="margin: 2px; height: 137px; width: 437px;"></textarea></td></tr><br/>
<tr>
<td><input type="submit" id="Submit" name="Submit" value="Submit" align="middle" /></td>
</tr>
<p id="req-field-desc"><span class="required">*</span> indicates a required field</p>
</form>

PHP脚本mail.php:

<?php  
if( isset($_POST) ){  

    //form validation vars  
    $formok = true;  
    $errors = array();  

    //sumbission data  
    $ipaddress = $_SERVER['REMOTE_ADDR'];  
    $date = date('d/m/Y');  
    $time = date('H:i:s');  

    //form data  
    $NameInput = $_POST['NameInput'];      
    $CompanyName = $_POST['CompanyName'];  
    $PhoneNumber = $_POST['PhoneNumber'];  
    $Email = $_POST['Email'];  
    $Website = $_POST['Website'];
    $WebDesignCheckbox = $_POST['WebDesignCheckbox'];
    $SocialMediaCheckbox = $_POST['SocialMediaCheckbox'];
    $MobilePresence = $_POST['MobilePresence'];
    $OnlineAdvertising = $_POST['OnlineAdvertising'];
    $SEOCheckbox = $_POST['SEOCheckbox'];
    $ecommerceCheckbox = $_POST['ecommerceCheckbox'];
    $comments = $_POST['comments'];  

    //form validation
    if(empty($NameInput)){
        $formok - false;
        $errors[] =  "You have not entered a name.";
    }

    if(empty($CompanyName)){
        $formok = false;
        $errors[] = "You have not entered a company name.";
    }

    if(empty($Email)){
        $formok = false;
        $errors[] = "You have not entered an email address.";
    }

    //send email if checks out
    if($formok){
        ini_set("sendmail_from","keeano@doodleinc.co");
        /*$headers="From: Contact Page: {$Email}" . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";*/
        $emailbody = "
        <p>Time: {$time} \n {$date}</p>
        <p>You are recieving this from your websites contact form.</p>
        <p><strong>Contacts Name: </strong> {$NameInput}</p>
        <p><strong>Companys Name: </strong> {$CompanyName}</p>
        <p><strong>Phone Number: </strong> {$PhoneNumber}</p>
        <p><strong>Email: </strong> {$Email}</p>
        <p><strong>Website: </strong> {$Website}</p>
        <p><strong>Web Design Checkbox: </strong> {$WebDesignCheckbox}</p>
        <p><strong>Social Media Checkbox: </strong> {$SocialMediaCheckbox}</p>
        <p><strong>Mobile Presence: </strong> {$MobilePresence}</p>
        <p><strong>Online Advertising: </strong> {$OnlineAdvertising}</p>
        <p><strong>SEO Checkbox: </strong> {$SEOCheckbox}</p>
        <p><strong>eCommerce Checkbox: </strong> {$ecommerceCheckbox}</p>
        <p><strong>Comments: </strong> {$comments}</p>
        <p><strong>Extra Data Obtained:</strong>\n Users IPAddress: {$ipaddress}</p>
        ";
        mail("keeano@doodleinc.co", "Contacts Page Enquiry", $emailbody);

        echo('<p style="font-weight: bold; color: #709900"><em>Thank you for contacting doodle Inc., someone will contact you within 48 hours.</em></p>');
    }
}

我只想在表格顶部创建一个标签,上面写着“谢谢你,有人会在48小时内与你联系。”

如果有人可以帮助我,那将是很好的,并详细解释,所以我再也不会遇到这个问题。

2 个答案:

答案 0 :(得分:1)

问题是你有mail.php作为表单标记的操作。 您可以将其留空,然后表单将发布到同一页面(contact.php)

要在该页面上运行该功能,您可以在表单前包含mail.php文件,以便错误显示在同一页面上。 只需在代码顶部require("mail.php");即可。

答案 1 :(得分:0)

您可以查看在提交按钮上执行javascript事件。然后使用json和ajax处理表单等,返回成功/失败消息,并插入表单所在的位置。这不会将用户“重定向”到其他页面,表单将被成功消息替换。

<form method="get" action="" onsubmit="jsquickcomp(this); return false;" > // or something like this for your form heading.

然后你js功能......

function jsquicksub(po_form) {

    if (gb_ajaxbusy)
        return false;

    gb_ajaxbusy = true;

    var lo_request = {};
    lo_request.n = $(po_form).find('#sub-firstname').val();
    lo_request.e = $(po_form).find('#sub-email').val();
// etc etc

    $(po_form).fadeTo(200, 0.3);

    $.getJSON('/mail.php', lo_request, function(po_result) { // this is your mail.php which performs all the php side of the form stuff

        gb_ajaxbusy = false;
        $(po_form).fadeTo(0, 1);

        if (!po_result.success) {
            alert(po_result.content); // has an alert box for error message. Can change it for anything
            return false;
        }else{
            setTimeout(function() { 
                    $.modal.close();
            }, 2500);
        }

        $(po_form).replaceWith(po_result.content); // replaces the form with the success message

    });

}

然后在你的mail.php

// function gets passed values after validation and returns a message to the user on screen
function jsonreturn($pb_success, $ps_content = null) {

    $lo_result = (object) array('success'=>$pb_success, 'content'=>$ps_content);

    ob_clean();
    echo json_encode($lo_result);
    exit;

} // end jsonreturn()

// use $_GET to get all the values you have send through from your js file
// validate the data and do whatever you want to do with it

// these return the message that will replace the form
jsonreturn(true, 'Success!'); // for success
jsonreturn(false, 'Fail'); // for fail

希望有道理吗?