PHP

Erreur lors de l'exécution de "connexion.php"

Résolu

Bonjour à tous,


Je suis débutant en PHP et j'essaye de créer un site avec les tutos présent sur ce site.


Malheureusement, des erreurs s'affiche à l'éxecution...


Les erreurs sont :


"

Notice: Undefined variable: rounds in C:\xampp\htdocs\Site Dessin\connexion.php on line 41

Notice: Undefined variable: yteuyifqsjonoouyhyFihfozfugg in C:\xampp\htdocs\Site Dessin\connexion.php on line 41

Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Site Dessin\connexion.php on line 44

Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Site Dessin\connexion.php on line 49


"


J'insère ici le code posant problème :


merci d'avance pour votre aide 🙂


<?php 
    session_start();
    include('connexionDB.php');



    if(isset($_SESSION['id'])){


        header('Location: index.php');


        exit;



    }


    if(!empty($_POST)){


        extract($_POST);
        $valid = true;


        if(isset($_POST['connexion'])){


            $mail = htmlentities(strtolower(trim($mail)));
            $mdp = trim($mdp);


            if(empty($mail)){


                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }


            if(empty($mdp)){


                $valid = false;
                $er_mdp = "Il faut mettre un mot de passe";


            }


            $req = $DB->query("SELECT *
                FROM utilisateur
                WHERE mail = ? AND mdp = ?",
                array($mail, crypt($mdp, "$6$rounds=5000$yteuyifqsjonoouyhyFihfozfugg$")));
            $req = $req->fetch();


            if ($req['id'] == ""){
                $valid = false;
                $er_mail = "Le mail ou le mot de passe est incorrecte";
            }


            if($req['token'] <> NULL){


                $valid = false;
                $er_mail = "Le compte n'a pas été validé";
            }


            if ($valid){
                $_SESSION['id'] = $req['id'];
                $_SESSION['nom'] = $req['nom'];
                $_SESSION['prenom'] = $req['prenom'];
                $_SESSION['mail'] = $req['mail'];


                header('Location:  index.php');
                exit;
            }
        }
    }













?>






<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Connexion</title>
    </head>
    <body>      
        <div>Se connecter</div>
        <form method="post">
            <?php
                if(isset($er_mail)){


            ?>


                <div><?= $er_mail ?></div>


            <?php
                }
            ?>
            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>
            <?php
                if(isset($er_mdp)){


            ?>


                <div><?= $er_mdp ?></div>


            <?php
                }
            ?>
            <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>
            <button type="submit" name="connexion">Se connecter</button>
        </form>
    </body>
</html>
545 vues
01 novembre 2020 à 19:25 (Édité)
Cette pub permet au site de vivre ...
Compte-supprimé
Le 03 Novembre 2020 à 18:46 (Édité)

J'ai réussi à trouver l'erreur dans le code !


Il ne fallait pas mettre if($req['id']==""){

Mais plutôt if(!$req){

Cela enlève bien mon erreur.


Pour ce qui est de la variable non-définie, il suffit de changer :


$req = $DB->query("SELECT *
        FROM utilisateur
        WHERE mail = ? AND mdp = ?",
        array($mail, crypt($mdp, "$6$rounds=5000$yteuyifqsjonoouyhyFihfozfugg$")));
      $req = $req->fetch();


par :


$rounds=0;
            $req = $DB->query("SELECT * 
                FROM utilisateur 
                WHERE mail = ? AND mdp = ?",
               
                array($mail, crypt($mdp, "$6$rounds=5000$"."yteuyifqsjonoouyhyFihfozfugg$")));
                
            $req = $req->fetch();


Et voila 🙂


Cette pub permet au site de vivre ...

9 commentaires

J'ai réussi à trouver l'erreur dans le code !


Il ne fallait pas mettre if($req['id']==""){

Mais plutôt if(!$req){

Cela enlève bien mon erreur.


Pour ce qui est de la variable non-définie, il suffit de changer :


$req = $DB->query("SELECT *
        FROM utilisateur
        WHERE mail = ? AND mdp = ?",
        array($mail, crypt($mdp, "$6$rounds=5000$yteuyifqsjonoouyhyFihfozfugg$")));
      $req = $req->fetch();


par :


$rounds=0;
            $req = $DB->query("SELECT * 
                FROM utilisateur 
                WHERE mail = ? AND mdp = ?",
               
                array($mail, crypt($mdp, "$6$rounds=5000$"."yteuyifqsjonoouyhyFihfozfugg$")));
                
            $req = $req->fetch();


Et voila 🙂


*** MA LIGNE 44 EST CELLE CI ***


je ne sais pas pourquoi mon code à été décalé...


if ($req['id'] == ""){

Re @Jerem971,


J'ai réussi a réduire les erreurs à une seule qui est celle ci :


Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Site Dessin\connexion.php on line 44


J'ai essayer d'utiliser "var_dump" comme tu me l'as conseillé mais j'avoue ne pas être capable de resoudre mon erreur gâce à celà...


J'ai tout de même modifié mon code alors le voici :


<?php
    session_start();


    include('connexionDB.php'); // Fichier PHP contenant la connexion � votre BDD


  // S'il y a une session alors on ne retourne plus sur cette page  
    if (isset($_SESSION['id'])){
        header('Location: index.php');
        exit;
    }


    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;


        if (isset($_POST['connexion'])){


            $mail = htmlentities(strtolower(trim($mail)));
            $mdp = trim($mdp);


            if(empty($mail)){ // V�rification qu'il y est bien un mail de renseign�
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }


            if(empty($mdp)){ // V�rification qu'il y est bien un mot de passe de renseign�
                $valid = false;
                $er_mdp = "Il faut mettre un mot de passe";
            }


            // On fait une requ�te pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
            $rounds=0;
            $req = $DB->query("SELECT * 
                FROM utilisateur 
                WHERE mail = ? AND mdp = ?",
               
                array($mail, crypt($mdp, "$6$rounds=5000$"."yteuyifqsjonoouyhyFihfozfugg$")));
                
            $req = $req->fetch();
           


            // Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
            if ($req['id'] == ""){
                
                $valid = false;
                
                $er_mail = "Le mail ou le mot de passe est incorrecte";
                
            }


            // S'il y a un r�sultat alors on va charger la SESSION de l'utilisateur en utilisateur les variables $_SESSION
            if ($valid){


                $_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requ�tes futures
                $_SESSION['nom'] = $req['nom'];
                $_SESSION['prenom'] = $req['prenom'];
                $_SESSION['mail'] = $req['mail'];


                header('Location:  index.php');
                exit;
            }   
        }
    }
?>

Re:


Parfait pour XAMPP ! 😉

Tu as 4 messages d'erreurs mais en vrai si on ne compte pas le doublons, cela te fait 2.

Pour le 1er message d'erreur, tes variables sont indéfinies... Tu dois donc déclarer tes variables...

Pour le 2ème message d'erreur, ceci arrive généralement lorsque tu essaie d'atteindre un champ inexistant d'un tableau... Je te conseille de faire un "var_dump" pour voir exactement le contenu de tes variables...

Bonjour et encore merci pour vos réponses rapides !


Pour ce qui est des codes du site, je les ai téléchargé mais les erreurs persistent 😕


@Jerem971 la version que j'ai installée est XAMPP


@fredoloulou j'ai essayé ton code mais les mêmes erreurs sont affichées 😕

ensuite pour les titre de page tu peux mettre ceci dans ton header.php

du coup dans tes pages tu as juste as déclaré $title="ton titre";


<title>
        <?php if (isset($title)) : ?>
            <?php echo $title; ?>
                <?php else : ?>
            <?php endif ?>
        </title>

Voici la connxionDB


<?php
// Déclaration d'une nouvelle classe
class connexionDB {
    private $host    = '';    // nom de l'host
    private $name    = '';     // nom de la base de donnée
    private $user    = '';         // utilisateur
    private $pass    = '';         // mot de passe
    //private $pass    = '';           // Ne rien mettre si on est sous windows
    private $connexion;


    function __construct($host = null, $name = null, $user = null, $pass = null){
        if($host != null){
            $this->host = $host;           
            $this->name = $name;           
            $this->user = $user;          
            $this->pass = $pass;
        }
    try{
        $this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
            $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8', 
            PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    }catch (PDOException $e){
        echo 'Erreur : Impossible de se connecter à la BDD !';
    die();
   }
  }
    public function query($sql, $data = array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);


        return $req;
    }
    public function insert($sql, $data = array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
    }
}



$DB = new connexionDB();
?>

Bonjour,

Donc je vais tenter de te donner la réponse a ton problème que tu trouvera si dessous


<?php
    session_start(); //on demarre la session
    $title = "Connexion"; //titre de page je t'esplique dans un autre commentaire
    include('elements/bd/connexionDB.php'); //on se connecte a la base de donnée je te fourni dans un autre commentaire
    
    if (isset($_SESSION['id'])){ //on verifie si une session existe ou pas en gros si ton utilisateur et deja connecté ou poas
        header('Location: index'); //si ton utilisateur et deja connecté alor on stop le script et on le renvoie a index.php par exemple
        exit; //on stop le script
    }


    if(!empty($_POST)){ //on verifie le post partie html quand tu remplie des case on appelle sa un POST
        extract($_POST); //si les infos du POST son ok on extrait
        $valid = true; //cette partie retourne un boolean en gros vrai ou faux sert a valider les info de ton utilisateur


        if (isset($_POST['connexion'])){ //le POST et nommé connexion
            $mail = (String) strtolower(trim($mail)); //pour se connecter ton utilisateur va entré un mail le meme que celui de l'inscription 
          $password = (String) trim($password); //pour se connecter ton utilisateur va entré son mot de passe crypté
        
        
           if(empty($mail)){ //on vérifie dans la case mail si elle et remplie
                $valid = false; //si elle et vide on valide pas
                $err_mail = "Il faut mettre un mail"; //on renvoie un message a l'utilisateur
            }


            if(empty($password)){ //pareil que au dessus
                $valid = false; //pareil
                $err_password = "Il faut mettre un mot de passe"; //pareil
            }


            $req = $DB->query("SELECT * FROM utilisateur WHERE mail = ? AND password = ?", //on selectionne tous se qu'il y a dans la colonne utilisateur de ta db mais plus précisément on regarde si le mail rentré dans inscription et le mdp rentré dans inscription corresponde
            array($mail, crypt($password, '$6$rounds=5000$$celui que tu a mis a inscription.php$'))); //reponse au dessus


            $verif_utilisateur = $req->fetch(); //si ces ok on fait un fetch qui recupere une donné fetchAll recupere tous


            if (!isset($verif_utilisateur['id'])){ //plus haut dans la db il y a (SELECT * FROM) * veut dire tous les utilisateur ici on verifie par raport a son id qui et unique si le mail et le mdp corresponde
                $valid = false; // vu plus haut
                $err_mail = "Le mail ou le mot de passe est incorrecte"; //vu plus haut
            
            }elseif($verif_utilisateur['confirmation'] == 0){ //ceci sert a confirmé le compte je t'espliqueré plus tard j'ai vu que tu a essayé dans se que tu a posté
                $valid = false; //vu plus haut
                $err_mail = "Veuillez confirmer votre compte"; //vu plus haut
            }


            if($verif_utilisateur['rs_rank'] == -2){ //ceci est un role qui sert a bloquer un compte
                $valid = false; //vu plus haut
                $err_mail = "Votre compte est suspendu ou banni"; // vu plus haut
            }


            $ip = $_SERVER['REMOTE_ADDR']; //sert a connaitre l'ip publique de l'utilisateur ne peut servir a bannir car en france ton ip publique change tous les 20 ou 30 jour moi je men sert pour savoir combien de personne son sur le site
            
            if ($valid){
                $req = $DB->query("UPDATE utilisateur SET ip = ? WHERE id = ?",
                array($ip, $verif_utilisateur['id'])); //expliqué plus haut je recupere l'ip par rapport a l'id de l'utilisateur et je fais un update pour mettre a jour
                $req = $DB->query("UPDATE utilisateur SET date_connexion = ? WHERE id = ?",
                array(date("Y-m-d H:i:s"), $verif_utilisateur['id'])); //la je recupere la date de la derniere connexion par rapport a l'id de l'utilisateur ceci me permet de savoir si l'utilisateur vien regulierement ou pas
                $req = $DB->query("SELECT * FROM utilisateur WHERE id = ?",
                array($verif_utilisateur['id'])); //la je recupere tous les infos se trouvant dans utilisateur par rapport a son id 
                $verif_utilisateur = $req->fetch(); //vu plus haut
                
                $_SESSION['id'] = $verif_utilisateur['id']; 
                $_SESSION['pseudo'] = $verif_utilisateur['pseudo'];
                $_SESSION['mail'] = $verif_utilisateur['mail'];
                $_SESSION['avatar'] = $verif_utilisateur['avatar']; //pour les fetch


                header('Location:  index');
                exit;   
            }   
        }
    }
?>

Hello @RobinL,


Si tu as besoin d'aide concernant l'utilisation des balises, c'est ce topic (j'ai fait le nécessaire en rééditant ton topic).


Premièrement, il faut toujours télécharger les codes sources plutôt que de copier/coller. En copiant/collant, des caractères invisibles s'incrustent, ce qui fait que certains messages d'erreurs sont présents par la suite...

Utilises-tu Wamp, Mamp, XAMPP ou un autre ? Si tu utilises un autre, XAMPP est recommandé par la communauté Sitedudev, voir la raison.

Cette pub permet au site de vivre ...