Php HTML表单在web浏览器上工作,但在移动设备上不工作
我不是编码员,或者是个新手。我修改了现有的HTML表单以在电子邮件模板中工作。有一个字段(用户电子邮件地址)和提交按钮。当用户单击submit时,php脚本会向我发送一封包含已提交数据的电子邮件。它在桌面上的Gmail和Outlook上运行良好,但当我打开电子邮件并单击移动应用程序(例如Gmail、Outlook或spark的收件箱)上的提交按钮时,它就不起作用了。我收到的错误(重定向到移动浏览器后)是:“您需要提交表单”和验证错误(即没有输入数据)。虽然我确实收到了一封邮件,说表格已经提交,但没有收到任何数据(即使我确实输入了数据)。请帮忙Php HTML表单在web浏览器上工作,但在移动设备上不工作,php,html,forms,mobile,html-email,Php,Html,Forms,Mobile,Html Email,我不是编码员,或者是个新手。我修改了现有的HTML表单以在电子邮件模板中工作。有一个字段(用户电子邮件地址)和提交按钮。当用户单击submit时,php脚本会向我发送一封包含已提交数据的电子邮件。它在桌面上的Gmail和Outlook上运行良好,但当我打开电子邮件并单击移动应用程序(例如Gmail、Outlook或spark的收件箱)上的提交按钮时,它就不起作用了。我收到的错误(重定向到移动浏览器后)是:“您需要提交表单”和验证错误(即没有输入数据)。虽然我确实收到了一封邮件,说表格已经提交,但
<?php
if(!isset($_POST['submit']))
{
//This page should not be accessed directly. Need to submit the form.
echo "error; you need to submit the form!";
}
$email = $_POST['email'];
//Validate first
if(empty($email))
{
echo "we need your email address for this to work!";
exit;
}
if(IsInjected($email))
{
echo "Bad email value!";
exit;
}
$email_from = 'hello@melltoo.me';//<== update the email address
$email_subject = "New Pay&Ship Beta User from Existing Users";
$email_body = "The user $email.\n is responding positively to your email".
"He/she wants to be a part of beta testing for Pay&Ship ".
$to = "hello@melltoo.me";//<== update the email address
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $email \r\n";
//Send the email!
mail($to,$email_subject,$email_body,$headers);
//done. redirect to thank-you page.
header('Location: thank-you.html');
// Function to validate against any email injection attempts
function IsInjected($str)
{
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
{
return true;
}
else
{
return false;
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>PHP form to email sample form</title>
<!-- define some style elements-->
<style>
label,a
{
font-family : Arial, Helvetica, sans-serif;
font-size : 12px;
}
/*FORM STYLES*/
.tagline-form-object{margin-top:20px;text-align:center}.footer-form-input,
.tagline-form-input{background-color:#FFF;font-size:20px;padding:10px 15px;font-weight:700;color:#555459;border-radius:4px;width:300px;margin-right:10px}
.tagline-form-submit{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-color:#0cb37b;font-size:20px;padding:10px 30px;border-radius:4px;font-weight:700;color:#FFF;text-shadow:0 1px 2px rgba(0,0,0,.5);cursor:pointer}
.tagline-form-submit:hover{background-color:#3DA7F2}
.tagline-form-submit:active{border-bottom:1px solid #194BA3;margin-top:1px}
</style>
<!-- a helper script for vaidating the form-->
<script language="JavaScript" src="scripts/gen_validatorv31.js" type="text/javascript"></script>
</head>
<body>
<!-- Start code for the form-->
<form method="post" name="myemailform" action="form-to-email.php">
<p>
<input type="text" class="tagline-form-input" name="email" value="user-email@email.com">
</p>
<input class="tagline-form-submit" type="submit" name='submit' value="Add 25 AED to my account!">
</form>
<script language="JavaScript">
// Code for validating the form
// Visit http://www.javascript-coder.com/html-form/javascript-form-validation.phtml
// for details
var frmvalidator = new Validator("myemailform");
frmvalidator.addValidation("name","req","Please provide your name");
frmvalidator.addValidation("email","req","Please provide your email");
frmvalidator.addValidation("email","email","Please enter a valid email address");
</script>
</body>
</html>
PHP表单到电子邮件示例表单
标签
{
字体系列:Arial、Helvetica、无衬线字体;
字体大小:12px;
}
/*表格样式*/
.tagline表单对象{页边距顶部:20px;文本对齐:中心}。页脚表单输入,
.tagline表单输入{背景颜色:#FFF;字体大小:20px;填充:10px 15px;字体重量:700;颜色:#555459;边框半径:4px;宽度:300px;右边距:10px}
.tagline表单提交{外观:无;-webkit外观:无;-moz外观:无;背景色:#0cb37b;字体大小:20px;填充:10px 30px;边框半径:4px;字体重量:700;颜色:#FFF;文本阴影:0 1px 2px rgba(0,0,5);光标:指针}
.tagline表单提交:悬停{背景色:#3DA7F2}
.tagline表单提交:活动{边框底部:1px实心#194BA3;边距顶部:1px}
//用于验证表单的代码
//拜访http://www.javascript-coder.com/html-form/javascript-form-validation.phtml
//详情
var frmvalidator=新的验证器(“myemailform”);
frmvalidator.addValidation(“名称”、“请求”、“请提供您的姓名”);
frmvalidator.addValidation(“电子邮件”、“请求”、“请提供您的电子邮件”);
frmvalidator.addValidation(“电子邮件”、“电子邮件”、“请输入有效的电子邮件地址”);
HTML电子邮件中的表单在很长一段时间内一直是一项风险投资,至今仍在继续。它会带来安全风险,一些电子邮件客户端会完全阻止与它的交互(例如Outlook),而大多数其他客户端会收到某种警告或具有有限的过滤功能。()
还有人猜测(但没有确凿的事实)HTML表单会降低某些ISP的可交付性
建议将收件人发送到登录页,通过其web浏览器在那里填写和提交表单,这样可以大大降低安全风险,电子邮件服务器可能出现的限制和奇怪行为也会大大降低
另外-如果你给他们发送电子邮件,你显然已经有了电子邮件地址,为什么还要提交表格来收集电子邮件地址。与其提交表单,不如在URL参数中包含电子邮件地址的登录页上发布或获取,以处理您的需求。它将删除单击之外的所有用户交互
如果(!isset($\u POST['submit'])所做的就是检查按钮是否被点击。在移动浏览器上;我怀疑人们会将他们的数据输入该字段;然后使用键盘上的“转到”按钮提交
这意味着表单将被发布,但不需要按下按钮。如果将第一行替换为If($\u SERVER['REQUEST\u METHOD']!=“POST”)
,这至少可以修复第一个错误
对于第二个错误,能否显示
var\u dump($\u POST)是什么代码>提交表单后的输出?可能还值得一提的是,许多不同的电子邮件客户端会阻止外部资源,比如您示例中链接的javascript验证程序库。感谢@Gortonigton的回答!我怀疑你关于电子邮件客户端阻止表单的说法是对的(收件箱和outlook就是这样)。我实际上没有收集电子邮件地址,正如你提到的,我已经有了。我只是想让用户同意做一些事情(测试我们的应用程序),并希望以一种低摩擦的方式让他们说“是”(好主意:在发送给我的电子邮件中单击一个按钮)。所以我真的很想尝试一下你的建议,关于做这篇文章或者登陆页面,我在哪里可以找到更多关于如何做的信息?(再说一遍,我只是一个想要成为的编码员)。最简单的方法是,如果你使用的是电子邮件服务提供商(ESP-例如Mail Chimp),你打开一个链接或按钮,上面写着“Yes sign me up!”或其他什么,然后将其链接到一个感谢你注册的页面。然后查看跟踪,所有点击该链接的操作都是您的注册。另一种选择是使用Javascript或类似的脚本从URL(例如)中提取参数,然后向处理页面发送帖子,将其插入到数据表中。如果你不打算使用ESP,我肯定会推荐Javascript。编辑了我的答案,在你的提交页面上添加了一些关于如何完成Javascript的链接。嗨,Sjon,谢谢你的回答。我自己测试了一下,然后在移动web客户端上点击了电子邮件中的按钮。在某些情况下,会显示一条警告消息,说明由于安全限制表单无法正常工作。然后,我被发送到浏览器,并显示错误消息,该表单没有数据。然而,我越来越确信,由于电子邮件客户端的阻塞,表单无法工作。我将尝试一下@Gortonington的建议,关于做一篇文章或者在URL中找到一个带有电子邮件地址的登录页……如果有人能解释这一点,那就太好了!