PHP mail() 中的空 $_POST

2024-04-14

对于以下方面的一些帮助将不胜感激!我已经在网络和 stackoverflow 上搜索了几个小时。我的php邮件功能有这个问题。

我的网站上有一个表单(该网站使用 WordPress),其中包含两个文本字段:姓名和电话号码。表单中还有一个隐藏字段,显示当前 url,因此我们可以看到表单在哪个页面上填写。此信息也存储在 php 会话中。

<?php session_start();
$_SESSION['url'] = $_SERVER['REQUEST_URI']; 
?> 

<form name="callback" action="callme.php" method="post" onsubmit="return(validate());">
<label>Name:</label><input type="text" name="name" size=15 />
<label>Tel:</label><input class="sky" type="text" name="tel" size=15 />
<div id="afterfive"><p>Call after five<input type="checkbox" name="afterfive" value="Call back after five"></p></div>
<input type="hidden" name="url" value="<?php echo $_SESSION['url']; ?>">
<input type="submit" class="classname" value="Call me back!" title="Call me back!" />
</form>

<script>
function validate()
{
if( document.callme.name.value == "" )
{
 alert( "Please fill in your name" );
 document.callme.name.focus() ;
 return false;
 }
if( document.callme.tel.value == "" )
{
alert( "Please fill in your phone number" );
document.callme.tel.focus() ;
return false;
}
}
</script>

以下php代码是callme.php:

<?php session_start();

$name = $_POST['name'];
$tel = $_POST['tel'];
$afterfive = $_POST['afterfive']; 
$url = $_POST['url'];

$to = "[email protected] /cdn-cgi/l/email-protection";
$subject = "Please call back $name";
$message .= "Hi, the following person would like to be called back: \n";
$message .= "Name: $name \n";
$message .= "Phonenumber: $tel \n";
$message .= "$afterfive \n";
$message .= "This message was send from this page: $url \n";
$headers = "From: [email protected] /cdn-cgi/l/email-protection" . "\r\n";
$headers .= "BCC: [email protected] /cdn-cgi/l/email-protection" . "\r\n";

if(mail($to, $subject, $message, $headers)){
$_SESSION['name'] = $_POST['name'];
$_SESSION['tel'] = $_POST['tel'];
header("Location: http://www.mywebsite.thankyou");
}

?>

提交表单后,访问者将被重定向到我们的感谢页面,并有机会使用第二个表单填写其他信息。先前存储在 php 会话中的信息(表单字段名称、电话和 url)将添加到隐藏表单字段中。

大多数情况下这一切都工作正常,但有时我们会收到所有或某些字段为空的电子邮件。当然,这可能是禁用了 javascript 的用户或提交空白表单的 Google 机器人,但奇怪的是,有时甚至 url 字段也是空的(该表单在我们的主页上不可见)。 $_SERVER['REQUEST_URI'] 不应该总是仍然有效吗?

我正在考虑添加 php 表单验证,但我不确定这是否能解决问题。这可能与 WordPress 的超级缓存插件有关吗?或者可能与 php 会话有关?


“但有时我们会收到全部或部分字段为空的电子邮件”

您应该使用服务器端方法而不是 JS,例如

if(empty($_POST['name'])){ die("You need to enter your name."); 

(JS用户始终可以禁用,这是空电子邮件/字段的可能原因之一)

这将确保您希望不为空的字段被填充。与什么结合Andrewsi https://stackoverflow.com/questions/19662201/empty-post-in-php-mail/19662824#comment29198019_19662201提到过,使用if(isset($_POST['submit'])){在处理程序的顶部,并将提交按钮命名为name="submit"这样callme.php如果直接访问,则在未单击提交按钮的情况下不会处理信息。

例如:

Note:还有很多其他方法可以实现这一目标,但这是一种基本但有效的方法。

命名您的提交按钮,例如:

<input type="submit" name="submit" value="Submit">

在你的情况下,它将是:

<input type="submit" name="submit" class="classname" value="Call me back!" title="Call me back!" />

PHP 处理程序

<?php 

session_start();

if(isset($_POST['submit'])){

    if(empty($_POST['name'])){ die("You need to enter your name."); }
    if(empty($_POST['tel'])){ die("You need to enter your telephone number."); }
    if(empty($_POST['afterfive'])){ die("You need to fill this field."); }
    if(empty($_POST['url'])){ die("You need to fill this field."); }

    $name = $_POST['name'];
    $tel = $_POST['tel'];
    $afterfive = $_POST['afterfive']; 
    $url = $_POST['url'];

    $to = "[email protected] /cdn-cgi/l/email-protection";
    $subject = "Please call back $name";
    $message .= "Hi, the following person would like to be called back: \n";
    $message .= "Name: $name \n";
    $message .= "Phonenumber: $tel \n";
    $message .= "$afterfive \n";
    $message .= "This message was send from this page: $url \n";
    $headers = "From: [email protected] /cdn-cgi/l/email-protection" . "\r\n";
    $headers .= "BCC: [email protected] /cdn-cgi/l/email-protection" . "\r\n";

    if(mail($to, $subject, $message, $headers)){
        $_SESSION['name'] = $_POST['name'];
        $_SESSION['tel'] = $_POST['tel'];
        header("Location: http://www.mywebsite.thankyou");
    }

}

// You could use this at end also to show a message
// if callme.php is accessed directly.
// else {echo "You cannot do that from here.";exit;}

?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP mail() 中的空 $_POST 的相关文章

  • 如何在 标签中用 %20 替换空格

    我想替换 html 文本的图像标签中的所有空格 Example img src to img src photo 201 jpg 我没有找到 preg replace 的解决方案 但它可能是一个简单的正则表达式行 谢谢 Edit 抱歉各位
  • Instagram 如何使用 Amazon S3?

    在将文件上传到 Amazon S3 时 我需要深入了解 Instagram 的工程 我刚刚开始使用 S3 我认为 Instagram 是一个值得效仿的好模式 因为他们每天上传数千张图片 我的应用程序有点相似 用户上传图片 可以删除自己的图片
  • 如何在 Laravel 5.5 中编辑“页面因不活动而已过期”的视图

    在 Laravel 5 5 中 当您使用 CSRF 保护 默认情况下 并且在长时间不活动后发送发布请求时 您将收到此错误页面 屏幕截图 我对此错误表示同意 但是 我需要更改此错误的视图 文本以确保与我的应用程序风格和语言相匹配 关于如何编辑
  • 输入表单中不允许有空白字符/空格[重复]

    这个问题在这里已经有答案了 是否可以在输入表单中不允许出现空白字符 空格 如下所示
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • Laravel 5 与 SAML 2 和现有 IDP 集成

    我使用 Laravel 5 我正在尝试将 SAML 2 0 与其集成 我找到了这个包 https github com aacotroneo laravel saml2 https github com aacotroneo laravel
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • 如何将 ctype_alpha 与 UTF-8 结合使用

    如何将 ctype alpha 与 UTF 8 一起使用 我有这个代码 if empty POST false if isset POST first name empty POST first name if ctype alpha PO
  • PHP 中的正则表达式:找到第一个匹配的字符串

    我想在非常长的文本中找到第一个匹配的字符串 我知道我可以使用 preg grep 并获取返回数组的第一个元素 但是 如果我只需要第一场比赛 或者我知道提前只有一场比赛 那么这样做效率不高 有什么建议吗 预匹配 http www php ne
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • django 表单错误打印 __all__

    默认登录模板中的代码 form errors 当帐户处于非活动状态时生成以下 html 输出 ul class errorlist li all ul class errorlist li This account is inactive
  • 如何覆盖 phpunit 中导出的变量?

    我知道我可以设置环境变量 https phpunit de manual current en appendixes configuration html在我的 phpunit xml 里面
  • 需要使用 php 从远程服务器下载与 $_FILES 相同的内容[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 好的 我有处理图像上传的 php 代
  • WordPress 事件按元生效日期排序

    我在获取参数数组以按 Wordpress 中的日期对事件列表进行排序时遇到一些问题 我在 Stack Overflow 和其他地方找到了几个建议的解决方案 但经过大量的试验和错误后 这些解决方案似乎都不起作用 这没什么花哨的 而且应该比这容
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建
  • Laravel 5 注销特定用户

    在我的 laravel 5 应用程序中 有一个功能允许具有管理员角色的用户重置非管理员的任何人的密码 但这不会强制该人注销并再次登录 更改密码后如何强制用户注销 我没有对用于验证用户身份或任何内容的中间件进行任何更改 我不知道它是否有效 但
  • 哪个 PHP 5 版本最常用?

    当我开发将在不同配置的客户端 Web 服务 通常使用共享托管 上使用的应用程序时 我应该假设大多数 Web 服务器都具有哪个 PHP 5 版本 例如 5 2 x 5 3 x 等 在所有使用 PHP 版本 5 的网站中 有 84 9 使用版本
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样
  • PHP 中的 Zip 流

    我有一个 PHP 脚本 可以动态创建 zip 文件并强制浏览器下载该 zip 文件 问题是 我可以直接将zip文件写入连接到用户浏览器的输出流 而不是先将其保存为服务器上的真实文件 然后发送文件吗 提前致谢 如果您的 Web 服务器运行的是

随机推荐

  • 使用 LINQ 查询 DataColumnCollection

    我正在尝试对 DataTable 的 Columns 属性执行简单的 LINQ 查询 from c in myDataTable Columns AsQueryable select c ColumnName 然而 我得到的是这样的 找不到
  • 如何生成圆形分布中的随机点

    我想知道如何生成出现在圆形分布中的随机数 我能够在矩形分布中生成随机点 以便这些点在 0 我将如何继续生成圆内的点 以便 x 500 2 y 500 2 import random import math radius of the cir
  • java中将图像向右旋转90度

    我无法将图像向右旋转 90 度 我需要能够在java中单独旋转图像 唯一的事情 不幸的是 我需要在特定点绘制图像 并且没有带有参数的方法 1 单独旋转图像 2 允许我设置 x 和 y 任何帮助表示赞赏 public class Tumble
  • 防止 JavaScript 文件缓存

    我试图阻止浏览器缓存 2 个 JavaScript 文件 我尝试过使用没有成功 这是我的元素代码
  • 最小操作码大小 x86-64 strlen 实现

    我正在研究最小操作码大小x86 64 strlen我的代码高尔夫 二进制可执行文件的实现不应超过一定的大小 为简单起见 请考虑 demoscene 总体思路来自于here http www int80h org strlen 尺寸优化思路来
  • 显式模板专业化

    我不想问这样一个笼统的问题 但下面的代码是显式模板专业化的练习 我不断收到错误 c users documents visual studio 2010 projects template array template array arra
  • 在 C 程序中使用 tcl 和 tk 存根

    我需要一个简单的 C 程序来创建 tcl 解释器 初始化 tcl 和 tk 然后加载给定的 tcl tk 脚本 我想使用 tcl 和 tk 存根 以确保程序将在具有不同版本的 tcl tk 的计算机上运行 我将使用这个程序而不是运行wish
  • 以编程方式清除 iPhone 上的二级缓存

    我创建了一个应用程序 我将从服务器下载图像并将其本地存储在 iPhone 的文件系统上 事情发生得很好 现在的问题是 当我退出应用程序时 我想清除 iPhone 上本地缓存的图像 如何删除 iPhone 上的缓存图像 它使用 iPhone
  • 处理不再存在的枚举值的反序列化

    我有一个枚举 JJJ 它有 3 个值 A B 和 C 在我的程序的早期版本中 它还有一个附加值 D 我希望能够读取由早期版本的程序创建的序列化对象 程序中 但在序列化对象中遇到值为 D 的 JJJ 类型变量时会抛出异常 最理想的情况是 我希
  • 将 JVM 字节码往返于文本表示的故障安全方法

    我正在寻找一种在 JVM 类文件和文本表示之间往返的故障安全方法 一项严格的要求是 只要文本表示形式保持不变 生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同 此外 文本表示必须是人类可读和可编辑的 应该可以对文本表示进行小
  • ServiceStack OAuth - 注册而不是登录

    在 servicestack OAuth 实现中 我只看到了自动登录的可能性 例如 脸书账号 但是否能够支持通过 Facebook 登录进行注册过程 我想要的是让用户登录到 facebook 应用程序 然后加载他们的姓名 姓氏和电子邮件 并
  • 如何从命令行创建 Android 项目

    我正在尝试从命令行创建一个 Android 项目 我在以下链接上尝试了它是什么 如何从命令行使用gradle创建android项目 https stackoverflow com questions 20801042 how to crea
  • Laravel 扩展包类

    我在 Laravel 安装中添加了一个购物车包 但我需要向该类添加一个方法 如果我直接修改类 当我更新到新版本时 我的更改会被覆盖吗 如果是这样 在不破坏未来更新的情况下修改软件包的最佳方法是什么 谢谢您的帮助 JB 我不知道是否有任何从供
  • J2EE 中的应用程序管理事务

    有没有人有一个从 J2EE 6 容器内的 CDI 托管 bean 内开始 提交 回滚事务的最佳方法的示例 我遇到了一种特殊情况 其中带注释的方法对我不起作用 我从同一类中的另一个方法调用该方法 并且我需要手动设置事务边界 我想知道我可以在代
  • 错误消息“未终止的字符串文字”

    我使用 jQuery 输出 PHP 从数据库创建的 JSON 字符串的结果 唯一的问题是一些数据位于多行上 我该如何解决这个问题 导致 JavaScript 中出现未终止的字符串文字错误 以下代码将删除所有 r 和 n 字符 preg re
  • 为什么 Haskell [] (list) 不是类型类?

    我正在编写一个 Haskell 函数 它接受一个列表作为输入 也就是说 它没有理由不能是队列或出列 或者任何允许我访问它的 头 和 尾 并检查它是否为空 的东西 所以 a 输入类型似乎太具体了 但据我所知 没有标准库类型类可以准确捕获此接口
  • 返回打开、关闭或从一天中的时间开始关闭的功能

    我有很多小时的操作时间 我想确定商店是否在 30 29 28 27 分钟内打开 关闭或即将关闭 我在 Xcode Objectic C 中执行此操作 现在我必须在 50 个不同的操作小时内执行此操作 我已经制作了一个函数来执行此操作 但它不
  • 我可以从 freebase.com 导出地名翻译吗

    所以我看过 of the freebase http freebase comAPI 和我对它找到的名称的翻译印象深刻 IE 罗马 Roma Rom Rzym Rooma 罗马市 这是因为我有一个包含 5000 多个地点名称的数据库 我非常
  • 如何将 sqlite 3.8.2 升级到 >= 3.8.3

    在使用 Python 3 7 2 的虚拟环境中 我尝试运行 djangopython manage py startap myapp我收到此错误 raise ImproperlyConfigured SQLite 3 8 3 or late
  • PHP mail() 中的空 $_POST

    对于以下方面的一些帮助将不胜感激 我已经在网络和 stackoverflow 上搜索了几个小时 我的php邮件功能有这个问题 我的网站上有一个表单 该网站使用 WordPress 其中包含两个文本字段 姓名和电话号码 表单中还有一个隐藏字段