Проверка электронной почты php (filter_validate_email) не работает

Я знаю, что есть много вопросов по этому поводу, но я просто не могу найти ошибку в своем коде. Я знаю, что это что-то простое, но я не вижу этого.

Мне нужно создать форму, которая при отправке данных будет введена в базу данных MySQL, однако данные необходимо сначала проверить. У меня есть две проблемы с этим, первая из которых заключается в том, что моя проверка электронной почты не работает с использованием: (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.

Это для моего курса тафе, который я делаю, однако они сейчас в отпуске, поэтому любая помощь будет очень признательна.

Кодирование из файла 1:

<body>
<?php

// define variables and set to empty values
$nameErr;
$Name = $Address = $Phone = $Mobile = $Email="[email protected]";

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>

person user3110441    schedule 17.12.2013    source источник
comment
почему вы делаете все на одной странице?   -  person Mahmood Rehman    schedule 17.12.2013
comment
Есть 2 страницы. 1 с формой и проверкой, а затем с кодом для добавления данных в sql   -  person user3110441    schedule 17.12.2013
comment
поместите запрос на вставку в это условие, он будет работать только при отправке клика if ($_SERVER["REQUEST_METHOD"] == "POST") {}   -  person Mahmood Rehman    schedule 17.12.2013
comment
извините, я запутался, у меня это есть в моем коде в начале, но когда я нажимаю «Отправить», проверка не работает?   -  person user3110441    schedule 17.12.2013


Ответы (3)


проверьте этот код для проверки электронной почты и т. д.:

<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>`
person Mahmood Rehman    schedule 17.12.2013
comment
Этот код также не подтверждает адрес электронной почты. Если я ввожу электронное письмо, оно просто обновляет форму, и ничего не отображается - person user3110441; 17.12.2013
comment
123 и действительный адрес Hotmail, оба дали одинаковый результат - person user3110441; 17.12.2013
comment
Вы использовали весь мой код? он работает со мной. Это функция php, и она проверяет только электронные письма. - person Mahmood Rehman; 17.12.2013
comment
неважно ... у меня это работает сейчас. Спасибо огромное!! - person user3110441; 17.12.2013

Проверка должна происходить в файле:

'добавить-contact.php'

Так как это то, что действие from вызывает при отправке.

Начальные валидаторы бессмысленны, так как массив $_POST не инициализирован.

Причина пустого оператора вставки SQL заключается в том, что вы решили сделать:

include("add-contact.php");

В первом файле он выполняется без действительной инициализации $_POST при каждой загрузке страницы.

person Antoan Milkov    schedule 17.12.2013

Удалите строку include("add-contact.php");

Это остановит пустую вставку в базу данных. Также удалить действие

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

Просто попробуйте action="add-contact.php". Проверка электронной почты работает нормально для меня.

person Yunus Aslam    schedule 17.12.2013
comment
хорошо, я удалю это. благодаря. Значит, моя точная кодировка работает для вас? это странно. Я использую php версии 5.3.27, поэтому я думаю, что смогу использовать функцию filter_validate_email??? - person user3110441; 17.12.2013
comment
Да, вы сможете использовать это, и это будет работать.. когда вы уже используете встроенную функцию PHP SERVER SELF, тогда нет смысла давать что-то дополнительное, что делает его более сложным.. - person Yunus Aslam; 17.12.2013
comment
Если вам нужно регулярное выражение для проверки электронной почты на случай, если функция не работает, вы можете попробовать этот ‹code› if(!preg_match(/^[_a-z0-9-]+(\.[_a-z0-9-]+ )*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i, $Email)) { return Неверный адрес электронной почты; ‹/код› } - person Yunus Aslam; 17.12.2013
comment
так что, если я могу его использовать, то почему проверка не будет работать для меня? если я удалю include(add-contact.php) и просто сделаю action=add-contact.php, проверка все равно не сработает, когда я отправлю форму, она просто укажет действительный адрес электронной почты, даже если я ввел неверный адрес электронной почты, такой как 123 - person user3110441; 17.12.2013
comment
Вы передаете правильное значение в переменную $Email ?? Это должно быть $_POST['Email'] .. В приведенном выше коде вы написали [email protected], и это действительный адрес электронной почты. Так что, возможно, вам нужно проверить это и сделать $Email правильным и динамичным. - person Yunus Aslam; 17.12.2013
comment
У меня это работает сейчас из кода Махмуда ниже. Возможно, потому что у меня был $Email, а не $_POST[Email], не уверен, но все работает, так что все хорошо. Спасибо за помощь. - person user3110441; 17.12.2013