0

我对php.

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

问题是当我拿起它时它只有两个字段,电子邮件和消息,所以我尝试在我的html表单中添加姓名和电话,但无法让这两个新字段出现在我收到的电子邮件中,试图了解什么我失踪了。

代码如下

<?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');
}
?>

就像我说的表格发送很好,只需要它发送姓名和电话。

4

2 回答 2

0

确保发布到 php 文件的表单具有名称相同的字段(相同的大小写,没有空格等)并指定了“名称”属性。如果您只有“id”(用于在 HTML 页面上唯一标识字段,但在提交表单时不使用),则不会发布字段数据。

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

于 2017-07-26T04:06:53.243 回答
0

非常感谢 Douglas Phillips 测试真的很有帮助,因为我意识到我的表单正在发布和接收从浏览器到服务器的所有字段,所以开始寻找其他地方,结果我忘了更新传递邮件的模板。鸡蛋在脸上的时刻在这里

于 2017-07-27T02:12:56.873 回答