PHP表单成功提交,但不重定向

时间:2015-07-07 03:11:37

标签: php html forms

我已经阅读了一些关于这个问题的其他问题,但是现在我仍然像开始这个问题时一样困惑。根据我的阅读,我学到了以下内容:

我不相信任何html在标题()之前完成 - 但我仍然是新的,所以我可能错了。 我没有发现任何语法错误。 表格提交确定,我收到测试电子邮件。

会发生什么,我用完整的文本填写表格并点击提交。数据被提交并发送到我的电子邮件,页面刷新回一个新的联系表单(contact.php),然后转到我的thanks.php页面。

这是我的代码,电子邮件地址已更改。 提前感谢您的任何/所有帮助!非常感谢。

<?php 
$errors = array();
$missing = array();
if (isset($_POST['send'])) {
    $to = 'My Name <rawr@test.com>';
    $subject = 'Feedback from Contact Form';
    $expected = array('name', 'email', 'comments');
    $required = array('name', 'email', 'comments');
    $headers = "From: admin@website.com\r\n";
    $headers .= "Content-Type: text/plain; charset=utf-8";
    $authenticate = null;
    if ($mailSent) {
        header('Location: thanks.php');
        exit();
    }
}
include './navigation.php'; 
?>


<?php
//mail process **Don't Touch**
$suspect = false;
$pattern = '/Content-Type:|Bcc:|CC:/i';

function isSuspect ($val, $pattern, &$suspect) {
    if (is_array($val)) {
        foreach ($val as $item) {
            isSuspect($item, $pattern, $suspect);
        }
    } else {
        if (preg_match($pattern, $val)) {
            $suspect = true;
        }
    }
}

isSuspect($_POST, $pattern, $suspect);

if (!$suspect) {
    foreach ($_POST as $key => $value) {
        $temp = is_array($value) ?  $value : trim($value);
        if (empty($temp) && in_array($key, $required)) {
            $missing[] = $key;
            $$key = '';
        } elseif(in_array($key, $expected)) {
            $$key = $temp;
        }
    }
}

if (!$suspect && !empty($email)) {
    $validemail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    if ($validemail) {
        $headers .= "\r\nReply-to: $validemail";
    } else {
        $errors['email'] = true;
    }
}

if (!$suspect && !$missing && !$errors) {
    $message = '';
    foreach ($expected as $item) {
        if (isset($$item) && !empty($$item)) {
            $val = $$item;
        } else {
            $val = 'Not selected';
        }
        if (is_array($val)) {
            $val = implode(', ', $val);
        }
        $item = str_replace(array('_', '-'), ' ', $item);
        $message .= ucfirst($item) . ": $val\r\n\r\n";
    }
    $message = wordwrap($message, 70);

    $mailSent = mail($to, $subject, $message, $headers, $authenticate);
    if (!$mailSent) {
        $errors['mailfail'] = true;
    }
}
//end mail process
?>

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Contact Carla &#60;3</title>
    <link href="/design.css" rel="stylesheet" type="text/css"/>
</head>

<body id="contact">
<div id="main">
    <?php if (($_POST && $suspect) || ($_POST && isset($errors['mailfail']))) { ?>
    <span class="warning">Sorry your mail could not be sent.</span>
    <?php } elseif ($errors || $missing) { ?>
    <span class="warning">Please fix the item(s) indicated.</span>
    <?php } ?>

    <form name="contact" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <p>
            <label for="name">Name:
            <?php if ($missing && in_array('name', $missing)) { ?>
            <span class="warning">Who am I responding to?</span>
            <?php } ?>
            </label>
            <br>
            <input type="text" name="name" id="name"
            <?php
            if ($errors || $missing) {
                echo 'value="' . htmlentities($name, ENT_COMPAT, 'utf-8') . '"';
            }
            ?>
            >
        </p>

        <p>
            <label for="email">Email:
            <?php if ($missing && in_array('email', $missing)) { ?>
            <span class="warning">How will I respond to you?</span>
            <?php } elseif (isset($errors['email'])) { ?>
            <span class="warning">Invalid email address</span>
            <?php } ?>
            </label>
            <br>
            <input type="text" name="email" id="email"
            <?php
            if ($errors || $missing) {
                echo 'value="' . htmlentities($email, ENT_COMPAT, 'utf-8') . '"';
            }
            ?>
            >
        </p>

        <p>
            <label for="comments">Comments:
            <?php if ($missing && in_array('comments', $missing)) { ?>
            <span class="warning">Please say something..</span>
            <?php } ?>
            </label>
            <br>
            <textarea rows="7" cols="70" name="comments" id="comments"><?php 
            if ($errors || $missing) {
                echo htmlentities($comments, ENT_COMPAT, 'utf-8');
            }
            ?></textarea>
        </p>

        <p>
            <input type="submit" name="send" id="send" value="Send Comments">
        </p>
    </form>
</div>
</body>
<?php include './footer.php'; ?>
</html>

1 个答案:

答案 0 :(得分:2)

你的问题就在这一行

if ($mailSent) {
    header('Location: thanks.php');
    exit();
}

您尚未在该声明上方的任何位置设置$ mailsent。所以它永远不会达到这一点。

一旦它通过了你的代码部分,它就不会弹回来检查邮件是否发送,除非你调用一个函数或类似的低于指向它的函数。

我希望这会让你走上正确的道路,如果你需要进一步的帮助,请告诉我。