Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php HTML表单在web浏览器上工作,但在移动设备上不工作_Php_Html_Forms_Mobile_Html Email - Fatal编程技术网

Php HTML表单在web浏览器上工作,但在移动设备上不工作

Php HTML表单在web浏览器上工作,但在移动设备上不工作,php,html,forms,mobile,html-email,Php,Html,Forms,Mobile,Html Email,我不是编码员,或者是个新手。我修改了现有的HTML表单以在电子邮件模板中工作。有一个字段(用户电子邮件地址)和提交按钮。当用户单击submit时,php脚本会向我发送一封包含已提交数据的电子邮件。它在桌面上的Gmail和Outlook上运行良好,但当我打开电子邮件并单击移动应用程序(例如Gmail、Outlook或spark的收件箱)上的提交按钮时,它就不起作用了。我收到的错误(重定向到移动浏览器后)是:“您需要提交表单”和验证错误(即没有输入数据)。虽然我确实收到了一封邮件,说表格已经提交,但

我不是编码员,或者是个新手。我修改了现有的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中找到一个带有电子邮件地址的登录页……如果有人能解释这一点,那就太好了!