PHP首先将数据发送到数据库然后验证

标签 php mysql database validation email

我在验证电子邮件时遇到问题。

电子邮件验证有效,但它首先发送表单,如果我刷新页面并再次发送相同的数据,它就会验证。 为什么在发送之前不进行验证?

我的代码:

<?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/

相关文章:

mysql - 将原始 mysql 文件复制到 Windows 7 MySQL 5.6 通过 mysqlhotcopy 从 Linux MySQL 5.1 获取

mysql - LEFT JOIN 优化

mysql - 选择 MIN/MAX 列经纬度

mysql - 如何在联结表上插入值

php - Bootstrap DataTables - 分页不适用于动态网格系统

php - 执行 PDO 语句的更好方法

mysql - 阻止空值条目进入数据库

mysql - 大表性能与带有一些连接的小表的性能对比

php - 如何使用php在sql中的两个表中获取特定用户的数据

php - 如何使用 php 禁用树结构中的子级