【问题标题】:Some of my fields do not show on a rd-mailform.php我的一些字段没有显示在 rd-mailform.php
【发布时间】:2017-07-26 04:00:25
【问题描述】:

我对@9​​87654321@ 有点陌生。

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

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

【问题讨论】:

    标签: php mail-form


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-01-20
        • 2016-07-19
        • 1970-01-01
        • 2016-09-05
        • 2021-10-18
        • 2014-08-27
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多