首页 > 解决方案 > PHP 电子邮件验证和附加 URL

问题描述

如果已经有答案,我提前道歉。我已经看过了,但我根本无法对我看过的答案做出正面或负面的回答,所以请......温柔一点。

我对 PHP 真的很陌生,对 Javascript 并不完全流利。本质上,我只是在为我的企业建立一个网站,而我想做的是在主页上有一个潜在客户表单。目标是安全地获取客户的电子邮件地址并将他们重定向到预订页面,并将他们的电子邮件附加到 url。

即,客户在主页上输入他们的电子邮件地址

www.hygenius.co 

当他们点击提交时,它会验证他们已经输入了一个真实的地址并且该字段不是空白的,然后将他们带到

www.hygenius.co/book?email=customersemail

然而,就我的一生而言,我似乎无法得到任何我努力工作的东西。

到目前为止,我的表格看起来像这样;

<form action="lead.php" method="POST">
 <input type="text" name="email" placeholder="Enter a valid E-mail Address">
 <span class="error">* <?php echo $emailErr;?></span>
 <input type="submit" name="submit" value="Submit">  
</form>

我的lead.php 文件看起来像这样。

<?php
// define variables and set to empty values
$emailErr = "";
$email = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format"; 
    }
  }

}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

header( 'Location: http://www.hygenius.co/book.html' ) ;
?>

到目前为止,我什至还没有让电子邮件验证工作,我试图遵循 W3schools 的指导,但没有任何效果。它只是允许您单击提交并直接进入预订页面而无需任何验证,也不会出现错误消息。我也不知道如何进入可以将信息附加到 URL 的阶段。

我确信我在这里非常密集,编码根本不是我的强项,但任何关于我可以做些什么来完成这项工作以及我哪里出错的指导都将非常感激。

温暖的问候,

乔纳森·克劳。

标签: phpformsvalidationemailemail-validation

解决方案


我已经结合逻辑,必须是非空的和有效的电子邮件,然后重定向。否则显示一个通用的无效错误。

<?php

$emailErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
  if (
    !empty($_POST["email"]) &&
    filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)
  )
  {
    header('location: ?email=' . urlencode($_POST["email"]));
    exit;
  } else {
    $emailErr = "Valid email address required."; 
  }
}

?>
<form method="POST">
    <input type="text" name="email" placeholder="joe@example.com">
    <span class="error"><?php echo $emailErr;?></span>
    <input type="submit" name="submit" value="Submit">  
</form>

推荐阅读