简体   繁体   中英

Check email exist with php mysqli

I am new to mysqli i wanted to check if email already exists in database with php and mysqli

Here is what i have done so far:

ini.php

<?php
session_start();
require 'connect.php';
include 'user.func.php'; 
?>

connect.php

<?php
$con = new mysqli('host', 'user', 'password', 'db');
if($con->connect_errno > 0){
die('Sorry, We\'re experiencing some connection problems.'); 
}

?>

register.php

<?php
include 'ini.php';
?>

<form action="" method="post">
<p>Username:<br/><input type="text" name="reg_name" maxlength="50"  ></p>
<p>Email:<br/><input type="text" name="reg_email" size="35" maxlength="50"  ></p>
<p>Password:<br/><input type="password" name="reg_password" maxlength="50" ></p>
<p>Re-type Password:<br/><input type="password" name="reg_re_password" maxlength="20"></p>
<p><input type="submit" value="Register" ></p>
</form>

<?php
include 'validate.php';
?>

validate.php

<?php
if(isset ( $_POST['reg_name'],$_POST['reg_email'], $_POST['reg_password'] )) {

$errors = array();
$name = $_POST['reg_name'];
$email = $_POST['reg_email'];
$password = $_POST['reg_password'];
$re_password = $_POST['reg_re_password'];
if(empty($name) || empty($email) || empty($password) || empty($re_password)){
$errors[] = 'All fields are required';
 } else {

if(strlen($name) > 50 || strlen($email) > 50 || strlen($password) > 50) {
 $errors[] = 'One or more field has too long Characters';
}

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE && $password !== $re_password){
$errors[] = 'Enter valid email address and password do not match';
}else{

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
$errors[] = 'Please enter a valid email address';
}

if($password !== $re_password){
$errors[] = 'Both passwords do not match';
}
if(user_exists($email) > 0){
$errors[] = 'That email is already been registered';
}

}

}

if (!empty($errors)) {
foreach ($errors as $errors) {
    echo '<strong>',$errors,'</srtong><br />';
}
}else{
echo 'Registered';
}
}

?> user.func.php

<?php    
function user_exists($email) {

$con = new mysqli('host', 'user', 'password', 'db');
$query = "SELECT * FROM users WHERE email = ?";
$stmt = $con->prepare($query);
$stmt->bind_param("s", $email);

if ($stmt->execute()) {
return $stmt->num_rows;
}
return false;
}
?>

This code shows all the other errors but doesn't check if the email exist. Instead it shows registered even when i enter email that is already in database.

I have database named 'test'. And table 'users' with columns user_id, username, email and password.

Can anyone tell how to code mysqli query for this?

I used this code in mysql

function user_exists($email) {
$email = mysql_real_escape_string($email);
$query = mysql_query("SELECT COUNT('user_id') FROM 'users' WHERE 'email'='$email'");
return (mysql_result($query, 0) == 1) ? true :false;
}

Use this condition, because you are returning the number of rows from your query.

if(user_exits($register_email) > 0){

Edit

function user_exists($email) {
    $mysqli = new mysqli("host", "my_user", "my_password", "your_db");
    $query = "SELECT COUNT(*) AS num_rows FROM users WHERE email = ?";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("s", $email);

    if ($stmt->execute()) {
        return $stmt->num_rows;
    }
    return false;
}

I could tell how to do it with PDO

<?php
function user_exists($email) {
    $query = "SELECT 1 FROM " . USER_TABLE . " WHERE email = ?";
    $stmt = $this->_db->prepare($query);
    $stmt->execute(array($email));
    return (bool)$stmt->fetchColumn();
}

Though I see no point in strict checking

if(user_exits($register_email))

would be more than enough

Also, I don't understand where did you get that $register_email variable. Do you have error reporting on?

By the way, you need an established PDO connection for this. This code won't work with mysqli

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM