-1

我很难弄清楚为什么我的 PHP 表单正在 process.php 上处理,但没有返回到带有适当 $messages 的表单页面。我错过了一行代码吗?我自己写了这一切,这是第一次。

这是我的html:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Test Contact Form - jQuery</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script type="text/javascript" src="js/main.js"></script>

</head>
<body>    
    <h3>Contact Us</h3>
    <?php echo $contact_message; ?>
    <form id="myForm" method="post" action="process.php">
        <input name="name" type="text" value="<?php echo $_POST[name]; ?>" placeholder="Name" required/>
        <br>
        <input name="email" type="email" value="<?php echo $_POST[email]; ?>" placeholder="you@yourmail.com" required/>
        <br>
        <textarea name="message" class="message" placeholder="We can answer your questions." required>
            <?php echo $_POST[message]; ?>
        </textarea>
        <br>
        <button type="submit" name="submit" class="btn send">
            <img src="img/send.png">
        </button>
        <br>
        <?php echo $contact_success_message; ?>
    </form>
    <!--close contact form-->    
</body>
</html>

这是我的process.php

<?php

//checks for valid email
function is_valid_email($email) {
    $result = true;
    $pattern = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])(([a-z0-9-])*([a-z0-9]))+(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i';
    if(!preg_match($pattern, $email)) {
        $result = false;
    }
    return $result;
}

//when send is pressed, validate fields
if(isset($_POST['submit'])) {
    $valid = true;
    $contact_message = '';
    if ( $_POST['name'] == "" ) {
        $contact_message .= "You forgot to tell us your name. ";
        $valid = false; 
    }
    if ( !is_valid_email($_POST['email']) ) {
        $contact_message .= "A valid email is required, don't worry we don't share it with anyone. "; 
        $valid = false; 
    }
    if ( $_POST['message'] == "" ) {
        $contact_message .= "What did you want to ask us? ";
        $valid = false; 
    }
    //if everything checks out, send the message! 
    if ( $valid == true ) {
        $safe_email = str_replace("\r\n","",$_POST[email]);
        $mail = "From: $_POST[name]\n";
        $mail .= "Email: $_POST[email]\n";
        $mail .= "$_POST[message]\n";
        mail('ME@MYEMAIL.COM','New Contact from RN+',$mail,"From: $safe_email\r\n");
        $contact_success_message = 'Brilliant I say! We will be in contact with you shortly.';
        //clear form when submission is successful
        unset($_POST);
    }
}
?>

我本可以发誓我以前用过这个,但这次它没有返回到联系页面。

4

4 回答 4

2

看起来您打算使用这样的代码:

表单.php

<?php include 'process.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test Contact Form - jQuery</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script type="text/javascript" src="js/main.js"></script>

</head>
<body>

<h3>Contact Us</h3>
            <?php echo $contact_message; ?>
            <form id="myForm" method="post" action="process.php">
                <input name="name" type="text" value="<?php echo $_POST[name]; ?>" placeholder="Name" required/><br>
                <input name="email" type="email" value="<?php echo $_POST[email]; ?>" placeholder="you@yourmail.com" required/><br>
                <textarea name="message" class="message" placeholder="We can answer your questions." required><?php echo $_POST[message]; ?></textarea><br>
                <button type="submit" name="submit" class="btn send"><img src="img/se
__
formnd.png"></button><br>
                <?php echo $contact_success_message; ?>
            </form><!--close contact form-->

</body>
</html>

表单处理器将设置您在 HTML 代码中输出的适当变量。由于 process.php 会检查方法是否为 POST,因此您不必在表单页面中执行此操作。

于 2012-11-16T00:22:12.157 回答
0

如果您希望 process.php 重定向回您的表单,您需要添加一个 PHP 标头代码,例如:header('Location: http://www.example.com/form.php');

如果您想将任何数据带回原始页面,请将其作为 GET 变量包含在 URL 中:header('Location: http://www.example.com/form.php?message='.$messagetext);然后您可以通过使用 GET 在表单页面上检索它:echo $contact_success_message = $_GET['message'];

不要忘记exit(); or die();在重定向之后!

于 2012-11-15T22:35:11.610 回答
0

如果您没有任何理由排除单个 PHP 页面,您可以将两者(表单和流程)合并到一个 php 页面中。

<?php
//checks for valid email function
...
if(isset($_POST['submit'])) {
...
}
?>
...your HTML goes here...

如果没有提交数据,这将只显示表单,如果提交了表单,将“重新加载”页面,执行操作,并显示适当的消息。将表单操作更改为,action=""以便文件将发布到自身。

于 2012-11-15T23:18:39.317 回答
-1

我建议使用 jQuery 验证。它更容易,并且有助于解决您在返回消息时可能遇到的任何问题。

http://docs.jquery.com/Plugins/Validation

像这样的东西...

$("#myForm").validate({
rules: {
    name: { required: true; }
},
messages: {
name: "You forgot to tell us your name.",
}

});

您可以对电子邮件字段和整个表单执行此操作。你可以在网上找到很多例子。

只需包括您的其他字段。如果您这样做,验证是客户端的,表单将处理,然后您转发到感谢您联系我们页面。

于 2012-11-15T22:36:07.643 回答