php email validation(filter_validate_email)不工作

时间:2013-12-17 10:15:40

标签: php mysql validation email-validation

我知道有很多关于此的问题,但我似乎无法用我的编码选择错误。我知道这很简单,但我看不到它。

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

问题在于,当我提交表单时,无论电子邮件是否有效,它都返回true。 如果我将(!filter_var($email, filter_validate_email)) returns false置于error message “name is required”,无论输入如何。

第二个问题是,在加载页面时,它最初会在SQL数据库中添加一个空白条目,并添加无效的条目。即如果我在提交表单时没有输入名称,则运行验证并获得<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> ,但它仍然在表中创建一个空白名称的条目。

我使用的是PHP版本5.3.27

这是我正在做的tafe课程,但是他们正在度假,所以任何帮助都会非常感激。

从文件1编码:

{{1}}

3 个答案:

答案 0 :(得分:0)

验证应该在文件中进行:

  

'添加-contact.php'

因为这是来自行动的要求提交。

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

空SQL插入语句的原因是因为您决定执行:

include("add-contact.php");

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

答案 1 :(得分:0)

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

<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>`

答案 2 :(得分:0)

删除第include("add-contact.php");

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

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

试试action="add-contact.php"。 电子邮件验证对我来说很好。