我在验证电子邮件时遇到问题。
电子邮件验证有效,但它首先发送表单,如果我刷新页面并再次发送相同的数据,它就会验证。 为什么在发送之前不进行验证?
我的代码:
<?php
include_once 'init.inc.php';
// database connection
error_reporting(E_ALL);
// function for Registration
function regUser($db)
{
$password = password_hash($_POST['password3'], PASSWORD_BCRYPT);
$sql = "INSERT INTO users SET username = '{$_POST['username']}', email = '{$_POST['email']}', password = '$password', laender = '{$_POST['selection']}'";
$result = $db->query($sql);
return $result;
}
// function for emailValidation
function emailValidate()
{
$email1 = $_POST['email'];
$email1 = filter_var($email1, FILTER_SANITIZE_EMAIL);
if (!filter_var($email1, FILTER_VALIDATE_EMAIL))
{
return true;
}
else
{
return false;
}
}
// function to check if username already registered
function usernameExists($db)
{
$sql = "SELECT username FROM users WHERE username='" . $_POST['username'] . "'";
$result = $db->query($sql);
if (mysqli_num_rows($result) > 0)
{
return true;
}
else
{
return false;
}
}
// function to check if email already exists in database
function emailExists($db)
{
// var_dump(emailExists($db));
$sql = "SELECT email FROM users WHERE email = '" . $_POST['email'] . "'";
$result = $db->query($sql);
if (mysqli_num_rows($result) > 0)
{
return true;
}
else
{
return false;
}
}
// sending data to database
if (isset($_POST['submit']))
{
// var_dump(usernameExists($db));
// var_dump(emailExists($db));
if (emailValidate() === false)
{
}
else
{
echo 'Please enter a valid email adress';
}
if (usernameExists($db) === false && emailExists($db) === false)
{
regUser($db);
}
else
{
die("Username / Email already exists!");
}
}
用户名和电子邮件存在功能运行良好。 提交表单后,只有电子邮件验证是有效的。
最佳答案
您可能需要重新排序一些条件检查代码,以便您仅在电子邮件本身有效后检查数据库中是否存在电子邮件/用户名:
if (isset($_POST['submit']))
{
// email address is not valid, show error message
if (emailValidate() !== false)
{
echo 'Please enter a valid email adress';
}
// email address is valid. Now check if it exists in the DB
else
{
if ( (usernameExists($db) === false) && (emailExists($db) === false))
{
regUser($db);
}
else
{
// you can also use echo error in place of die() here
die("Username / Email already exists!");
}
}
}
关于PHP首先将数据发送到数据库然后验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34679532/