我的一些字段没有显示在rd-mailform.php上

时间:2017-07-26 04:00:25

标签: php mail-form

我对php有点新鲜。

我将rd-mailform.php附加到我的网站,它发送并重定向完美。

问题是,当我拿起它时,它只有两个字段,电子邮件和消息,所以我尝试添加名称和电话哪个在我的html表单中,但无法将这2个新字段显示在我收到的电子邮件,试着了解我所缺少的内容。

代码如下

<?php

$recipients = '';
//$recipients = '';

try {
    require './phpmailer/PHPMailerAutoload.php';

    preg_match_all("/([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)/", $recipients, $addresses, PREG_OFFSET_CAPTURE);

    if (!count($addresses[0])) {
        die('MF001');
    }

    if (preg_match('/^(127\.|192\.168\.)/', $_SERVER['REMOTE_ADDR'])) {
        die('MF002');
    }

    $template = file_get_contents('rd-mailform.tpl');

    if (isset($_POST['form-type'])) {
        switch ($_POST['form-type']){
            case 'contact':
                $subject = 'A message from your site visitor';
                break;
            case 'subscribe':
                $subject = 'Subscribe request';
                break;
            case 'order':
                $subject = 'Order request';
                break;
            default:
                $subject = 'A message from your site visitor';
                break;
        }
    }else{
        die('MF004');
    }
    
     if (isset($_POST['name'])) {
        $template = str_replace(
            ["<!-- #{NameState} -->", "<!-- #{FromName} -->"],
            ["Name:", $_POST['name']],
            $template);
    }else{
        die('MF006');
    }

    
     if (isset($_POST['phone'])) {
        $template = str_replace(
            ["<!-- #{PhoneState} -->", "<!-- #{FromPhone} -->"],
            ["Phone:", $_POST['phone']],
            $template);
    }else{
        die('MF005');
    }


    if (isset($_POST['email'])) {
        $template = str_replace(
            ["<!-- #{FromState} -->", "<!-- #{FromEmail} -->"],
            ["Email:", $_POST['email']],
            $template);
    }else{
        die('MF003');
    }
    
    if (isset($_POST['message'])) {
        $template = str_replace(
            ["<!-- #{MessageState} -->", "<!-- #{MessageDescription} -->"],
            ["Message:", $_POST['message']],
            $template);
    }

    preg_match("/(<!-- #{BeginInfo} -->)(.|\n)+(<!-- #{EndInfo} -->)/", $template, $tmp, PREG_OFFSET_CAPTURE);
    foreach ($_POST as $key => $value) {
        if ($key != "name" && $key != "phone" && $key != "email" && $key != "message" && $key != "form-type" && !empty($value)){
            $info = str_replace(
                ["<!-- #{BeginInfo} -->", "<!-- #{InfoState} -->", "<!-- #{InfoDescription} -->"],
                ["", ucfirst($key) . ':', $value],
                $tmp[0][0]);

            $template = str_replace("<!-- #{EndInfo} -->", $info, $template);
        }
    }

    $template = str_replace(
        ["<!-- #{Subject} -->", "<!-- #{SiteName} -->"],
        [$subject, $_SERVER['SERVER_NAME']],
        $template);

    $mail = new PHPMailer();
    $mail->From = $_SERVER['SERVER_ADDR'];
    $mail->FromName = $_SERVER['SERVER_NAME'];

    foreach ($addresses[0] as $key => $value) {
        $mail->addAddress($value[0]);
    }

    $mail->CharSet = 'utf-8';
    $mail->Subject = $subject;
    $mail->MsgHTML($template);

    if (isset($_FILES['attachment'])) {
        foreach ($_FILES['attachment']['error'] as $key => $error) {
            if ($error == UPLOAD_ERR_OK) {
                $mail->AddAttachment($_FILES['attachment']['tmp_name'][$key], $_FILES['Attachment']['name'][$key]);
            }
        }
    }

    $mail->send();
    header('Location: http://www.mut-con.co.za/thankyou.html');  //Redirect

    die('MF000');
} catch (phpmailerException $e) {
    die('MF254');
} catch (Exception $e) {
    die('MF255');
}
?>

就像我说的那样,表单发送正常,只需要它发送名称和电话。

2 个答案:

答案 0 :(得分:0)

确保发布到php文件的表单具有相同的字段(相同的大小写,没有空格等)并且具有&#34; name&#34;指定的财产。如果你只有&#34; id&#34; (用于在HTML页面上唯一地标识字段,但在提交表单时不使用该字段),不会发布字段数据。

使用var_dump($_POST)在服务器端查看已发布的表单数据,并使用浏览器中的开发人员工具网络标签查看通过网络发送的内容。这将帮助您快速调试许多类型的问题。

答案 1 :(得分:0)

非常感谢道格拉斯菲利普斯测试真的有帮助,因为我意识到我的表单是从浏览器发送到接收所有字段到服务器所以开始寻找其他地方,结果我忘了更新传递邮件的模板。鸡蛋在这里面对时刻