php - How to log in with your email address or nickname on a login form

How to log in with your email address or username

I have a login form that works great The user must enter his username and password to connect to my site But I would like to modify the code so that he can connect with his email address as well as with his nickname.

How could I fix this

Thanks for the help

<?php
session_start();
require_once "base.php";
if (!empty($_POST["pseudo"]) && !empty($_POST["password"])) {
    $pseudo = !empty($_POST["pseudo"]) ? $_POST["pseudo"] : null;
    $password = !empty($_POST["password"]) ? $_POST["password"] : null;
    $sql =
        "SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ?";
    $datas = [$pseudo];
    //Execution de la requete
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch (Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
    $userexit = $requete->fetch();
    //si le peusdo est bien dans la base alors on continue sinon on sort
    if ($data["confirme"] != 1 and $row == 0) {
        //pseusdo pas bon
        header("Location: connexion-site.php?login_err=divers2");
        die();
    }
    //else if
    //($data['confirme'] !=0 and $row == 1)//psuedo bon
    //{header('Location: connexion-site.php?login_err=divers3');
    //      die();}

    if ($data["confirme"] != 0) {
        if ($row == 1) {           
            if (password_verify($password, $data["password"])) {               
                         if (empty($_SESSION["link"])) {
                    header("Location: index.php?pseudo=" . $_SESSION["pseudo"]);
                    } else {
                    header("location: " . $_SESSION["link"]);
                }
                die();
            } else {
                header("Location: connexion-site.php?login_err=password");
                die();
            }
        } else {
            header("Location: connexion-site.php?login_err=already");
            die();
        }
    } else {
        header("Location: connexion-site.php?login_err=divers");
        die();
    }
}
?>

Answer

Solution:

<?php
session_start();

//on recupere le lien link pour la redirection vers les autres pages
$link = !empty($_GET['link']) ? $_GET['link'] : NULL;

require_once 'base.php';

//si le pseudo et le pawword ne sont pas vide 
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
    //je recupere proprement des variables
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
    $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
 
    //pr?�paration de la requ??te et des variables
    //$sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ?';
    $sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?';
    //$datas = [$pseudo];
    $datas = array($pseudo,$pseudo);
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    // $row = $requete->rowCount();
  
  //je teste si le pseudo ou l'email sont bon 
    if (empty($data))
    {
        header('Location: connexion-site.php?login_err=MailPseusdoMauvais');
        die();
    }
    
    //je teste pour savoir si ils sont bien confirme
    if ($data['confirme'] != '1')
    {
        header('Location: connexion-site.php?login_err=ComptePasActive');
        die();
    }
    
    // si il est confirme je continue les tests 
    if ($data['confirme'] != 0)
    {
        
        //si l 'email ou le pseusdo sont bons on continue
        if (!empty($data))
        {
            //on verifie le pawword si il est ok on continue , sinon sortie
            if (password_verify($password, $data['password']))
            {
                //on definit et on cree les variables sessions
                $_SESSION['user'] = array(
                    'id' => $data['id'],
                    'pseudo' => $data['pseudo'],
                    'email' => $data['email'],
                    'confirmkey' => $data['confirmkey']
                );
                $_SESSION['id'] = $data['id'];
                $_SESSION['pseudo'] = $data['pseudo'];
                $_SESSION['email'] = $data['email'];
                $_SESSION['confirmkey'] = $data['confirmkey'];
                //on test la variable link si elle est vide  on va vers index
                if (empty($_SESSION['link']))
                {
                    header('Location: ./index.php?pseudo=' . $_SESSION['pseudo']);
                    //sinon on va faire la derniere page visitee
                    
                }
                else
                {
                    header('location: ' . $_SESSION['link']);
                }
                die();
            }
            else
            {
                header('Location: connexion-site.php?login_err=password');
                die();
            }
        }
        else
        {
            header('Location: connexion-site.php?login_err=already');
            die();
        }
    }
    else
    {
        header('Location: connexion-site.php?login_err=ComptePasActive');
        die();
    }
}
?>

Source