【问题标题】:php email validation (filter_validate_email) Not Workingphp电子邮件验证(filter_validate_email)不工作
【发布时间】:2014-01-05 01:13:35
【问题描述】:

我知道有很多关于这个的问题,但是我似乎无法通过我的编码来挑选错误。我知道这很简单,但我看不到。

我必须创建一个表单,当它被提交时,数据将被输入到MySQL 数据库但是需要首先验证数据。我有 2 个问题,第一个是我的电子邮件验证无法使用:(filter_var($email, filter_validate_email))

问题是,当我提交表单时,无论电子邮件是否有效,它都会返回 true。 如果我输入(!filter_var($email, filter_validate_email))returns false 则不管输入。

第二个问题是,在加载页面时,它最初会在 SQL 数据库中添加一个空白条目,然后添加无效的条目。即,如果我在提交表单时没有输入名称,则验证运行并且我得到 error message “name is required”,但它仍然会在表中创建一个名称为空白的条目。

我使用的是 PHP 版本 5.3.27

这是我正在做的 tafe 课程,但他们目前正在放假,因此我们将不胜感激。

从文件 1 编码:

<body>
<?php

// define variables and set to empty values
$nameErr;
$Name = $Address = $Phone = $Mobile = $Email="example@example.com";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{

if (empty($_POST["Name"]))
{$nameErr = "Name is required"; }

else {$Name = test_input($_POST["Name"]);}

if (empty($_POST["Address"]))
 {$Address = "";}
else
 {$Address = test_input($_POST["Address"]);}

if (empty($_POST["Phone"]))
 {$Phone = "";}
else
 {$Phone = test_input($_POST["Phone"]);}

if (empty($_POST["Mobile"]))
 {$Mobile = "";}
else
 {$Mobile = test_input($_POST["Mobile"]);}  


if(filter_var($Email, FILTER_VALIDATE_EMAIL)){ 
 echo"Valid Email";
 }
else{ 
echo "Not a Valid Email";    
}
echo phpinfo();
}

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

?>

<form name="addcontact" method="post" action= "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>", "add-contact.php">

<table border="1" cellpadding="2">
<caption> Add New Caption </caption>
<tr>
<td><label for="Name">Name</label></td>
<td><input type="text" name="Name" size="30" maxlenght="50" tabindex="1"/> <span class="error">*<?php echo $nameErr;?></span>
</td>
</tr>

<tr>
<td><label for="Address">Address</label></td>
<td><textarea name="Address" cols="45" rows="5" tabindex="2"></textarea></td>
</tr>

<tr>
<td><label for="Phone">Phone</label></td>
<td><input type="text" name="Phone" size="20" maxlenght="20" tabindex="3" /> </td>
</tr>

<tr>
<td><label for="Mobile">Mobile</label></td>
<td><input type="text" name="Mobile" size="20" maxlenght="20" tabindex="4" /> </td>
</tr>

<tr>
<td><label for="Email">Email</label></td>
<td><input type="text" name="Email" size="30" maxlenght="50" tabindex="5" /></td>
</tr>

<tr>
<td colspan"2" align="center"><input type="Submit" name="Submit" value="Submit" tabindex="6"/>      
</td>
</tr>


</table>
</form>

<?php 
include("add-contact.php");
?>


</body>
</html>`

And coding from file 2:


<body>
<?php 
$Name = $_POST["Name"];
$Address = $_POST["Address"];
$Phone = $_POST["Phone"];
$Mobile = $_POST["Mobile"];
$Email = $_POST["Email"];


$dbc = mysql_connect("localhost:3306", "root", "webbm01");
if (!$dbc)
die ('Could not connect: ' .mysql_error());


$db_selected = mysql_select_db("tafe", $dbc );
if (!$db_selected)
die ('Could not connect: ' . mysql_error());

$qry
 = "INSERT INTO contacts (Name, Address, Phone, Mobile, Email) VALUES ('" . addslashes($Name) . "', '" . addslashes($Address) . "', '" . addslashes($Phone) . "', '" . addslashes($Mobile). "', '" . addslashes($Email) . "')";

$rst = mysql_query($qry, $dbc);

if ($rst)
{
echo "<b><font color='green'>The contact has been added.</font></b>";
}
else 
{
echo "<b><font color='red'>Error: ". mysql_error($dbc) . ". The contact could not be added.</font></b>";
}

mysql_free_result($rst);


?>
</body>
</html>

【问题讨论】:

  • 为什么你在一个页面上做所有事情?
  • 有 2 页。 1 使用表单和验证,然后使用编码将数据添加到 sql
  • 将插入查询置于此条件下,只有在您提交点击时才会起作用if ($_SERVER["REQUEST_METHOD"] == "POST") {}
  • 对不起,我很困惑,我一开始的编码中有这个,但是当我点击提交时,验证不起作用?

标签: php mysql validation email-validation


【解决方案1】:

检查此代码以进行电子邮件验证等:

<body> <?php

// define variables and set to empty values


if ($_SERVER["REQUEST_METHOD"] == "POST") {

if (empty($_POST["Name"])) {$nameErr = "Name is required"; }else {$Name = htmlspecialchars($_POST["Name"]);}

if (empty($_POST["Address"]))  {$Address = "";}else{$Address = htmlspecialchars($_POST["Address"]);}

if (empty($_POST["Phone"]))  {$Phone = "";}else {$Phone = htmlspecialchars($_POST["Phone"]);}

if (empty($_POST["Mobile"]))  {$Mobile = "";}else {$Mobile = htmlspecialchars($_POST["Mobile"]);}  


if(filter_var($_POST['Email'], FILTER_VALIDATE_EMAIL)){   echo"Valid Email";  }else{ echo "Not a Valid Email"; }

}

?>

<form name="addcontact" method="post" action= "<?php echo $_SERVER["PHP_SELF"];?>">

<table border="1" cellpadding="2"> <caption> Add New Caption </caption> <tr> <td><label for="Name">Name</label></td> <td><input type="text" name="Name" size="30" maxlenght="50" tabindex="1"/> <span class="error">*<?php echo $nameErr;?></span> </td> </tr>

<tr> <td><label for="Address">Address</label></td> <td><textarea name="Address" cols="45" rows="5" tabindex="2"></textarea></td> </tr>

<tr> <td><label for="Phone">Phone</label></td> <td><input type="text" name="Phone" size="20" maxlenght="20" tabindex="3" /> </td> </tr>

<tr> <td><label for="Mobile">Mobile</label></td> <td><input type="text" name="Mobile" size="20" maxlenght="20" tabindex="4" /> </td> </tr> <tr> <td><label for="Email">Email</label></td> <td><input type="text" name="Email" size="30" maxlenght="50" tabindex="5" /></td> </tr> <tr> <td colspan"2" align="center"><input type="Submit" name="Submit" value="Submit" tabindex="6"/>       </td> </tr> </table> </form>

</body> </html>`

【讨论】:

  • 该代码也不验证电子邮件。如果我输入一封电子邮件,它只会刷新表单并且没有任何内容被回显
  • "123" 和一个有效的 Hotmail 地址,都产生了相同的结果
  • 你使用了我所有的代码吗?它和我一起工作。这是 php 函数,它只验证电子邮件。
  • 没关系...我现在可以使用它了。非常感谢!!
【解决方案2】:

验证应该发生在文件中:

'add-contact.php'

因为这是 from 操作在提交时调用的内容。

初始验证器没有意义,因为 $_POST 数组没有初始化。

空SQL插入语句的原因是因为你决定这样做:

include("add-contact.php");

在第一个文件中,它在每次加载页面时都在没有有效的 $_POST 初始化的情况下运行。

【讨论】:

    【解决方案3】:

    删除include("add-contact.php");这一行

    这将停止数据库中的空白插入。 同时删除操作

    <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
    

    试试action="add-contact.php"。 电子邮件验证对我来说工作正常。

    【讨论】:

    • 好的,我会删除它。谢谢。所以我的确切编码对你有用吗?那很奇怪。我正在使用 php 版本 5.3.27 所以我认为我应该能够使用 filter_validate_email 功能???
    • 是的,您将能够使用它并且它会起作用..当您已经在使用内置函数 PHP SERVER SELF 时,再提供一些额外的东西是没有用的,这会使它变得更复杂..
    • 如果你想要一些正则表达式来验证电子邮件,以防功能不工作,你可以试试这个 if(!preg_match("/^[_a-z0-9-]+(\. [_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $Email)) { return "电子邮件地址是无效的”; }
    • 所以如果我可以使用它,那么为什么验证对我不起作用?如果我删除 include("add-contact.php") 并且只执行 action="add-contact.php" 验证仍然不起作用,当我提交表单时它只会显示“有效电子邮件”,即使我输入无效的电子邮件,例如“123”
    • 您是否在变量 $Email 中传递了正确的值?它应该是 $_POST['Email'] .. 在上面的代码中,您已经编写了 $Email="example@example.com" 并且这是一个有效的电子邮件。因此,您可能需要检查这一点并使 $Email 正确且动态。
    猜你喜欢
    • 2015-11-17
    • 2015-06-27
    • 2015-01-20
    • 2011-09-25
    • 2017-03-19
    • 2011-09-14
    • 2018-04-02
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多