使用 wp_mail() 将带有表单变量的电子邮件发送到电子邮件
Posted
技术标签:
【中文标题】使用 wp_mail() 将带有表单变量的电子邮件发送到电子邮件【英文标题】:Sending an email with form variables to an email using wp_mail() 【发布时间】:2021-05-18 15:54:43 【问题描述】:我创建了一个 WP 模板并向其中添加了一个表单。 在表单下方,我添加了 wp_mail() 函数以将用户输入的数据发送到他们的电子邮件。
现在,我收到以下通知:
注意:未定义的索引:mypath 中的名称。
欢迎任何帮助如何解决这个问题。
编辑 1: 得到通知我必须删除 if 语句。
编辑 2: 这实际上是我所拥有的有关表单的所有代码。我错过了什么吗?我需要在某处添加add_action()
或类似的东西吗?
代码:
<form id="form" method="post" action="">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
</br>
<label for="surname">Surname:</label>
<input type="text" id="surname" name="surname">
</br>
<label for="email">Email:</label>
<input type="email" id="email" name="email">
</br>
<label for="tel">Phone number:</label>
<input type="tel" id="tel" name="tel">
</br>
<input type="submit" value="Submit" name="submit">
</form>
<?php
if(isset($_POST['submit']))
$name = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$tel = $_POST['tel'];
$to = $_POST[$email]; //sendto@example.com
$subject = 'Reservation';
$body = 'Name: ' . $name . '\r\n' .
'Surname: ' . $surname . '\r\n' .
'Email ' . $email . '\r\n' .
'Phone number: ' . $tel . '\r\n';
wp_mail( $to, $subject, $body );
echo "Sent!";
?>
答案
编辑 3: 只是为了明确解决方案是 $to = $_POST['email']; //sendto@example.com
所以 ['email']
不是 [$email]
。
【问题讨论】:
【参考方案1】:if 语句是一个明智的检查 - 在 $_POST 变量中包含一些值之前,您不希望该代码运行。
但是,您的表单元素都没有名称!例如这个
<input type="tel" id="tel">
应该
<input type="tel" id="tel" name="tel">
没有它,你不会得到很多。
PS Checkout PHP heredoc。最后的代码可以更简洁地写成:
$body = <<< EOT
Name: $name
Surname: $surname
Email: $email
Phone number: $tel
EOT;
【讨论】:
感谢您的回复。添加名称“组件”并没有解决未定义的索引问题 =) 知道如何解决这个问题吗? 仍然缺少名称。这就是为什么您必须取消注释 IF。修复它,IF 可以保留(它应该保留)并且您不会收到警告,因为索引将存在。您可以使用 isset 来检查其他人,尽管较新版本的 PHP 允许这样编写:$value = $_POST['my-field'] ?? '';
嘿,谢谢。我实际上确实更新了它,只是忘记在 SO 上编辑它。问题是,如果我删除 if 语句,我会收到通知(但我想这没关系,因为刷新时字段为空)。如果我添加 if 语句,通知在我重新加载后就消失了但是......一旦我点击提交,我仍然会收到一个通知(这仍然更好)并且它说:*通知:*输入电子邮件地址的未定义索引。它指向这个$to = $_POST[$email]; //sendto@example.com
有什么想法吗?
$email = $_POST['email']
没有$email = $_POST[$email];
要明确$_POST['email']
存在,$_POST[$email]
永远不会存在,因为此时 $email 等于他们输入的电子邮件地址。以上是关于使用 wp_mail() 将带有表单变量的电子邮件发送到电子邮件的主要内容,如果未能解决你的问题,请参考以下文章