javascript - 使用 html5 表单和 php 获取空电子邮件

标签 javascript php html webshim

我管理的网站上有一些 html5 表单字段,这些字段将用户输入的数据推送到 php 文件,该文件将电子邮件发送到该网站的专用 yahoo 电子邮件。

这是 html:

<form role="form" method="post" action="php/contact-us.php" lang="es" id="contactForm">
  <div class="row">
    <div class="form-group col-lg-4 required">
      <label for="name">Name</label>
      <input type="text" class="form-control"  name="name" required placeholder="Enter Name" />
    </div>
    <div class="form-group col-lg-4 required">
      <label for="email">Email</label>
      <input type="email" class="form-control"  name="email" required placeholder="Enter valid email" />
    </div>
    <div class="form-group col-lg-4">
      <label for="phone">Phone Number</label>
      <input type="tel" class="form-control"  name="phone" placeholder="e.g. (000) 000 - 0000">
    </div>
    <div class="clearfix"></div>
    <div class="form-group col-lg-12 required">
      <label for="message">Mensaje</label>
      <textarea class="form-control" rows="6"  name="message" required placeholder="Write your message here"></textarea>
    </div>
    <div class="form-group col-lg-12">
      <input type="hidden" name="save" value="contact">
      <button type="submit" class="btn btn-default">Enviar</button>
    </div>
  </div>
</form>

之前,我没有对字段进行任何验证,但我收到了没有用户内容的空电子邮件,所以我认为人们只是按下按钮而没有输入任何我也可以自己测试的内容。因此,我添加了以下验证 JS,还对不支持的浏览器使用了 webshim(以及上面表单元素中的 required 标签):

<script>
  $('#contactForm input[type=text], select, textarea').on('change invalid', function() {
    var field = $(this).get(0);
    field.setCustomValidity('');

    if (!field.validity.valid) {
      field.setCustomValidity('Please fill required fields');
    }
  });
  $('#contactForm input[type=email]').on('change invalid', function() {
    var field = $(this).get(0);

    field.setCustomValidity('');

    if (!field.validity.valid) {
      field.setCustomValidity('Enter a valid email');
    }
  });
</script>

以前,我从用户那里获取输入的电子邮件并将其设置为发件人电子邮件,但我遇到了某些电子邮件地址等问题。因此,我将其默认为始终有效的随机电子邮件,并且仅包含输入的用户邮件中的电子邮件。这是我的 php 文件 (contact-us.php):

<?php
// Set your email below
$to = "<dedicatedemail>@yahoo.com";
// Receive and sanitize input
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$subject = "Request from website";
$headers = "From: no-reply@gmail.com";

// set up email
$msg = "Sender Information \nName: " . $name . "\nEmail: " . $email . "\nPhone: " . $phone . "\n\n" . $message;
$msg = wordwrap($msg,70);

// mail
mail($to,$subject,$msg,$headers);
header('Location: ../contact-thank-you.html');
?>

首先让我说一切正常。当我在这里测试功能时,一切正常。我可以从我的 iOS 设备和笔记本电脑发送电子邮件,而且我有几个 friend 从他们的 Android 设备发送电子邮件。验证对我有用,因此它不允许我在至少填写必填字段的情况下发送电子邮件。在添加验证并将发件人电子邮件设置为默认电子邮件之前,我收到了空电子邮件。然而,即使在进行了所有更改之后,我仍然收到空电子邮件。当我测试时,我无法在所有平台和浏览器上进行测试,但在添加检查后我无法强制发送空电子邮件。我的验证在某个地方失败了吗?我觉得人们正在填写字段,但不知何故,电子邮件却是空的。当我说空时,我的意思是我以编程方式添加到消息中的内容会通过,但用户应该输入的实际信息却不会?这是怎么发生的?

最佳答案

始终执行服务器端验证并确认有 POST 传入。否则,即使像网络爬虫这样简单的东西也会触发空电子邮件。

<?php
if (empty($_POST['email']) || empty($_POST['name'])) {
    // Respond with a proper error message
    ...
} else {
    // Send email
    $to = "<dedicatedemail>@yahoo.com";
    $name = $_POST['name'];
    $email = $_POST['email'];
    ...
}

关于javascript - 使用 html5 表单和 php 获取空电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097665/

相关文章:

php - 我可以在 PHP 中混合使用 MySQL API 吗?

javascript - 设置默认 .aspx 页面访问?

html - CSS 中的四边形梯形

javascript - 在Java中发送带有BOM的UTF-8编码的CSV文件

c# - 使用枚举从后端到前端(javascript)进行错误处理,我在哪里放置翻译?

javascript - 多种表单并远离未保存的更改

javascript - 使用 package-lock.json 的工作流

php - UTF-8贯穿始终

jquery - CSS Transition div 容器高度从 100% 到 200%

多维数组上的 PHP Array_Sum