【问题标题】:Form in HTML Email Not Posting DataHTML 电子邮件中的表单未发布数据
【发布时间】:2023-03-16 04:05:01
【问题描述】:

我有一个关于为什么我的表单没有将数据发布到我的 PHP 脚本的问题。要取消订阅我设置的电子邮件列表,我会向取消订阅的用户发送一封包含发布一些数据的表单的电子邮件。

<html>
<body>
<div>
    <p>This is a confirmation message to confirm that you unsubscribed from the sci-eng email list.</p>
    <p>Click on the button below to confirm your unsubscription.</p>
    <form id="unsubform">
        <div class="form-in">
            <input type="hidden" id="emailkey" name="emailkey" value="key">
            <input type="hidden" id="email" name="email" value="email@domain.com">
            <button class="btn" id="submit" type="submit" formaction="http://redlinks.ca/sci-eng/db/unsubscribe.php" formmethod="post">Unsubscribe</button>
        </div>
    </form>
    </div>
    </body>
</html>

在表单为POSTed 的页面上,如果$_POST["email"] 变量中没有数据,我会收到我设置的“无数据”错误。我尝试过使用var_dump($_POST),但它只会返回array(0) { },这对我不起作用。

最让我困惑的是,当我从电子邮件中复制准确的 html 并将其粘贴到空白页面时,当我单击提交/取消订阅时,它会很好地发布数据,而我网站上的其他地方也有完全相同的脚本,唯一不同的是 formaction 没有 /db 。一个被发送到的页面的行为应该如何,显示适当的数据数组而不是什么都没有。这是唯一的区别。

如果有什么不同,我会使用 Thunderbird for Windows 10 作为我的电子邮件客户端。

任何认为他们可以提供帮助的人将不胜感激:)

【问题讨论】:

    标签: php html forms email html-email


    【解决方案1】:

    默认方法是GET,不是POST;您需要指定

    <form method="post" ...>
    

    也许在线托管此表单的链接可能是一个更好的主意;部分邮件客户端不支持显示邮件;由于安全问题(例如网络邮件界面),可能会有更多的客户拒绝提交或发布它们。

    【讨论】:

    • 在按钮上我已经有一个属性是formaction="post",所以这可能不是问题。
    • formaction 指定表单的操作(= URL),而不是方法。
    • 那么我假设雷鸟阻止了它;或者在浏览器中将其作为普通链接打开,这将成为 GET。使用 POST 请求启动浏览器不是常用功能。
    • 请记住,除了链接之外,另一个具有完全相同内容的脚本有效。
    • 您的意思是“在我网站的其他地方我有完全相同的脚本,除了...”?我认为在您的网站上使用网络浏览器而不是邮件软件中的邮件会有所不同,而不是链接中的 /db。
    【解决方案2】:

    尝试:

    <html>
    <body>
    <div>
        <p>This is a confirmation message to confirm that you unsubscribed from the sci-eng email list.</p>
        <p>Click on the button below to confirm your unsubscription.</p>
        <form id="unsubform" action="http://redlinks.ca/sci-eng/db/unsubscribe.php" method="post">
            <div class="form-in">
                <input type="hidden" id="emailkey" name="emailkey" value="key">
                <input type="hidden" id="email" name="email" value="email@domain.com">
                <button class="btn" id="submit" type="submit">Unsubscribe</button>
            </div>
        </form>
        </div>
        </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      由于安全问题,电子邮件中不支持也不推荐使用表单。大多数电子邮件客户端会警告用户存在风险,或者只是将其禁用并且它不起作用,就像您的情况一样。

      启用取消订阅的最佳做法是使用链接。您可以在链接上传递任何取消订阅所需的参数,例如http://www.example.com/unsubscribe.php?usermail=mail@gmail.com

      【讨论】:

        【解决方案4】:

        如果您不使用 POST 方法,那么如何将表单值发布到 phpScript。试试下面的代码。

        <html>
        <body>
        <div>
        <p>This is a confirmation message to confirm that you unsubscribed 
           from the sci-eng email list.</p>
        <p>Click on the button below to confirm your unsubscription.</p>
        <form id="unsubform" method="POST" action="http://redlinks.ca/sci-eng/db/unsubscribe.php">
            <div class="form-in">
            <input type="hidden" id="emailkey" name="emailkey" value="key">
            <input type="hidden" id="email" name="email" value="email@domain.com">         
            <button class="btn" id="submit" type="submit" >Unsubscribe</button>
            </div>
        </form>
        </div>
        </body>
        

        【讨论】:

          【解决方案5】:

          不要发送表单进行确认。请尝试以下步骤:

          1. 为退订的邮件生成唯一的加密密钥并存入数据库

          2. 向特定用户电子邮件发送确认链接,密钥为 (http://domainurl/confirm.php?key=1533c67e5e70ae7439a9aa993d6a3393)

          3. 现在检查相应电子邮件的密钥并取消订阅并从数据库中删除密钥

          【讨论】:

            猜你喜欢
            • 2012-07-16
            • 2010-09-21
            • 1970-01-01
            • 2012-05-28
            • 2015-02-11
            • 2014-06-26
            • 1970-01-01
            • 1970-01-01
            • 2011-02-22
            相关资源
            最近更新 更多