IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Vérifier si une entrée existe dans la BDD [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut Vérifier si une entrée existe dans la BDD
    Client.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
     
     
    <?php
     
    class Client {
     
        protected $name;
        protected $email;
        protected $dt_creation;
        protected $dt_arrival;
        protected $dt_departure;
     
     
        protected static $error;
     
        const MSG_ERROR_NAME = 'NOM doit être une chaîne de caractères.';
        const MSG_ERROR_EMAIL = 'EMAIL doit être une chaîne de caractères.';
        const MSG_ERROR_DATECREATION = 'DATE doit être format YYYY-MM-DD.';
        const MSG_ERROR_DATEARRIVAL = 'DATE doit être format YYYY-MM-DD.';
        const MSG_ERROR_DATEDEPARTURE = 'DATE doit être format YYYY-MM-DD.';
        const MSG_ERROR_OBJET = 'L\'objet ne peut pas être crée.';
     
        public function __construct(array $data) {
     
        	$this->setName($data['name']);
        	$this->setEmail($data['email']);
        	$this->setDt_creation($data['dt_creation']);
            $this->setDt_arrival($data['dt_arrival']);
            $this->setDt_departure($data['dt_departure']);
     
        	if(!empty(self::$error)) {
     
            	throw new Exception(self::$error . self::MSG_ERROR_OBJET);
            }
        }
     
        public function setError($msg) {
     
        	self::$error = $msg;
        }
     
        public function getError() {
     
        	return self::$error;
        }
     
        public function setName($name) {
     
        	if(is_string($name)) {
     
        		$this->name = $name;
        	}
        	else {
     
        		$this->setError(self::MSG_ERROR_NAME);
        	}
        }
     
        public function setEmail($email) {
     
        	if(is_string($email)) {
     
        		$this->email = $email;
        	}
        	else {
     
        		$this->setError(self::MSG_ERROR_EMAIL);
        	}
        }
     
        public function setDt_creation($dt_creation) {
     
    		list($y, $m, $d) = explode("-", $dt_creation);
     
    		if(checkdate($m, $d, $y)) {
     
    			$this->dt_creation = $dt_creation;
            }
            else {
     
            	$this->setError(self::MSG_ERROR_DATECREATION);
            }
    	}
     
        public function setDt_arrival($dt_arrival) {
     
            list($y, $m, $d) = explode("-", $dt_arrival);
     
            if(checkdate($m, $d, $y)) {
     
                $this->dt_arrival = $dt_arrival;
            }
            else {
     
                $this->setError(self::MSG_ERROR_DATEARRIVAL);
            }
        }
     
        public function setDt_departure($dt_departure) {
     
            list($y, $m, $d) = explode("-", $dt_departure);
     
            if(checkdate($m, $d, $y)) {
     
                $this->dt_departure = $dt_departure;
            }
            else {
     
                $this->setError(self::MSG_ERROR_DATEDEPARTURE);
            }
        }
     
    	public function getName() {
     
    		return $this->name;
    	}
     
    	public function getEmail() {
     
    		return $this->email;
    	}
     
    	public function getDt_creation() {
     
    		return $this->dt_creation;
    	}
     
        public function getDt_arrival() {
     
            return $this->dt_arrival;
        }
     
        public function getDt_departure() {
     
            return $this->dt_departure;
        }
    }
     
    ?>
    clientManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    <?php
     
    class clientManager {
     
    	private $_db;
     
    	public function __construct($db) {
     
    		$this->setDb($db);
    	}
     
    	public function setDb(PDO $dbh) {
     
    		$this->_db = $dbh;
    	}
     
    	public function addClient(Client $client) {
     
    		$sql = 'INSERT INTO client (name, email, dt_creation, dt_arrival, dt_departure)
            VALUES(:name, :email, :dt_creation, :dt_arrival, :dt_departure)';
     
    		$name = htmlspecialchars($client->getName());
            $email = htmlspecialchars($client->getEmail());
            $dt_creation = $client->getDt_creation();
            $dt_arrival = $client->getDt_arrival();
            $dt_departure = $client->getDt_departure();
     
            $stmnt = $this->_db->prepare($sql);
            $stmnt->bindParam(':name', $name);
            $stmnt->bindParam(':email', $email);
            $stmnt->bindParam(':dt_creation', $dt_creation);
            $stmnt->bindParam('dt_arrival', $dt_arrival);
            $stmnt->bindParam('dt_departure', $dt_departure);
            $stmnt->execute();
     
            if($stmnt->rowCount() > 0) {
     
                $message = '<p class="error">Ce client est déjà enregistré. </p>';
            }
        }
    }
     
    ?>
    process/process_form.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    <?php
     
    require('class/clientManager.php');
    require('class/Client.php');
     
    try {
     
    	$db = new PDO('mysql:host=localhost; dbname=hotels', 'root', '10111110');
    }
     
    catch(Exception $e) {
     
    	die('Erreur de connexion ' . $e->getMessage());
    }
     
    if(isset($_POST['submit_form'])) {
     
    	$username_form = $_POST['username_form'];
    	$email_form = $_POST['email_form'];
    	$date_creation_form = $_POST['date_creation_form'];
    	$date_arrival_form = $_POST['date_arrival_form'];
    	$date_departure_form = $_POST['date_departure_form'];
     
    	if((empty($username_form)) OR (empty($email_form)) OR (empty($date_creation_form)) OR (empty($date_arrival_form))
     
    		OR (empty($date_departure_form))) {
     
    		$message = '<p class="error">Tous les champs doivent être remplis !</p>';
    	}
    	else {
     
    		if(!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email_form)) {
     
    			$message = '<p class="error">Indiquer une adresse mail valide.</p>';
    		}
    		else {
     
    			$clients_data = array(
     
    				'name' => $username_form,
    		        'email' => $email_form,
    		        'dt_creation' => $date_creation_form,
    		        'dt_arrival' => $date_arrival_form,
    		        'dt_departure' => $date_departure_form
    	        );
     
    	        $clients = new Client($clients_data);
     
                $manager = new clientManager($db);
                $manager->addClient($clients);
                var_dump($clients);
            }
       }
    }
     
    ?>
    Bonjour, dans le fichier clientManager.php, j'ai utliser rowCount() pour vérifier si une entrée existe ou pas dans la table & ça ne fonctionne pas. J'ai des enregistrements en double.

    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Le rowCount() que tu utilises à cet endroit est relatif à la requête d'insertion, il va falloir faire un select avec l'email par exemple et si le rowCount() du select ==0 là tu passe à l'insertion, sinon tu renvois le message d'erreur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Bonjour, j'ai fait ce que tu m'as dit, voilà le résultat :

    clientManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    public function getMail() {
     
            $sql = 'SELECT COUNT(*) FROM client WHERE email = :email';
     
            $email = htmlentities($client->getEmail());
     
            $stmnt = $this->_db->prepare($sql);
            $stmnt->bindParam(':email', $email);
            $stmnt->execute();
     
            if($stmnt->rowCount() == 0) {
     
                $message = '<p class="error">Le client est déjà enregistré.</p>';
            }
        }
    process_form.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    <?php
     
    require('class/clientManager.php');
    require('class/Client.php');
     
    try {
     
    	$db = new PDO('mysql:host=localhost; dbname=hotels', 'root', '10111110');
    }
     
    catch(Exception $e) {
     
    	die('Erreur de connexion ' . $e->getMessage());
    }
     
    if(isset($_POST['submit_form'])) {
     
    	$username_form = $_POST['username_form'];
    	$email_form = $_POST['email_form'];
    	$date_creation_form = $_POST['date_creation_form'];
    	$date_arrival_form = $_POST['date_arrival_form'];
    	$date_departure_form = $_POST['date_departure_form'];
     
    	if((empty($username_form)) OR (empty($email_form)) OR (empty($date_creation_form)) OR (empty($date_arrival_form))
     
    		OR (empty($date_departure_form))) {
     
    		$message = '<p class="error">Tous les champs doivent être remplis !</p>';
    	}
    	else {
     
    		if(!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email_form)) {
     
    			$message = '<p class="error">Indiquer une adresse mail valide.</p>';
    		}
    		else {
     
                $manager = new clientManager($db);
    			$manager->getMail();
     
    			$clients_data = array(
     
    				'name' => $username_form,
    		        'email' => $email_form,
    		        'dt_creation' => $date_creation_form,
    		        'dt_arrival' => $date_arrival_form,
    		        'dt_departure' => $date_departure_form
    	        );
     
    	        $clients = new Client($clients_data);
                $manager->addClient($clients);
                var_dump($clients);
            }
       }
    }
     
    ?>
    Notice: Undefined variable: client in C:\wamp64\www\php_expert_devoir_2\class\clientManager.php
    Fatal error: Uncaught Error: Call to a member function getEmail() on null in C:\wamp64\www\php_expert_devoir_2\class\clientManager.php
    Error: Call to a member function getEmail() on null in C:\wamp64\www\php_expert_devoir_2\class\clientManager.php

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    ce n'est pas comme ça, je parlais toujours de la fonction addClient :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public function addClient(Client $client) {
            $sqlExiste="select count(*) from client where email=:email";
            $stmt=$this->_db->prepare($sqlExiste);
            $stmt->execute([":email"=>$client->getEmail()]);
            $existe=$stmt->fetchColumn();
            if($existe==0){ 
    	   $sql = 'INSERT INTO client (name, email, dt_creation, dt_arrival, dt_departure)
               VALUES(:name, :email, :dt_creation, :dt_arrival, :dt_departure)';
     
    	   $name = $client->getName();
               $email = $client->getEmail();
               $dt_creation = $client->getDt_creation();
               $dt_arrival = $client->getDt_arrival();
               $dt_departure = $client->getDt_departure();
     
               $stmnt = $this->_db->prepare($sql);
               $stmnt->bindParam(':name', $name);
               $stmnt->bindParam(':email', $email);
               $stmnt->bindParam(':dt_creation', $dt_creation);
               $stmnt->bindParam('dt_arrival', $dt_arrival);
               $stmnt->bindParam('dt_departure', $dt_departure);
               $stmnt->execute(); 
               if($stmnt->rowCount() > 0) {
                   $message="insertion effectuée avec succès.";
               }
               else{
                   $message = '<p class="error">Aucune insertion n\'a été effectuée!</p>';
               }
            }
            else{
                 $message="<p class='error'>cet email existe déjà !</p>";
            }
     
        }

    J'ai supprimé htmlspecialchars car on ne l'utilise pas lors de l'insertion, mais lors de l'affichage des données.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Bonsoir, super ça marche, désolé encore pour pas avoir donnée suite dans l'immédiat.

    Merci bien Toufik & bonne nuit à toi.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Bonjour, j'ai oublier de te dire que les messages de succès & d'erreurs ne s'affichent pas.

    Je vois pas pourquoi

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Finalement je préfère faire un formulaire d'inscription avec seulement le nom & l'email.

    clientManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
    class clientManager {
     
    	private $_db;
     
    	public function __construct(PDO $db) {
     
    		$this->setDb($db);
    	}
     
    	public function setDb($dbh) {
     
    		$this->_db = $dbh;
    	}
     
    	public function addClient(Client $client) {
     
            $sql = 'SELECT COUNT(name, email) FROM client WHERE name = :name AND email = :email';
     
            $stmnt = $this->_db->prepare($sql);
            $stmnt->execute([
     
                ':name' => $client->getName(),
                ':email' => $client->getEmail()
            ]);
     
            $existe = $stmnt->fetchColumn();
     
            if($existe == 0) {
     
                $sql = 'INSERT INTO client (name, email) VALUES(:name, :email)';
     
                $username_form = $client->getName();
                $useremail_form = $client->getEmail();
     
                $stmnt = $this->_db->prepare($sql);
                $stmnt->bindParam(':name', $username_form);
                $stmnt->bindParam(':email', $useremail_form);
                $stmnt->execute(); 
     
               if($stmnt->rowCount() > 0) {
     
                $message = '<p class="message">insertion effectuée avec succès.</p>';
               }
               else {
     
                $message = '<p class="error">Aucune insertion n\'a été effectuée!</p>';
               }
            }
            else {
     
                $message = '<p class="error">cet email existe déjà !</p>';
            }
        }
    }
    Client.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    <?php
     
    class Client {
     
    	protected $id;
    	protected $name;
    	protected $email;
     
    	protected static $error;
     
    	const MSG_ERROR_NAME = 'NOM doit être une chaîne de caractères.';
        const MSG_ERROR_EMAIL = 'EMAIL doit être une chaîne de caractères.';
        const MSG_ERROR_OBJET = 'L\'objet ne peut pas être crée.';
     
    	public function __construct(array $data) {
     
    		//$this->setId($data['id']);
    		$this->setName($data['name']);
    		$this->setEmail($data['email']);
     
    		if(!empty(self::$error)) {
     
            	throw new Exception(self::$error . self::MSG_ERROR_OBJET);
            }
    	}
     
    	public function setError($msg) {
     
    		self::$error = $msg;
    	}
     
    	public function getError() {
     
    		return self::$error;
    	}
     
    	public function setName($name) {
     
    		if(is_string($name)) {
     
    			$this->name = $name;
    		}
    		else {
     
    			$this->setError(self::MSG_ERROR_NAME);
    		}
    	}
     
    	public function setEmail($email) {
     
    		if(is_string($email)) {
     
    			$this->email = $email;
    		}
    		else {
     
    			$this->setError(self::MSG_ERROR_EMAIL);
    		}
    	}
     
    	public function getName() {
     
    		return $this->name;
    	}
     
    	public function getEmail() {
     
    		return $this->email;
    	}
    }
    process_form.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    <?php
     
    require('class/clientManager.php');
    require('class/Client.php');
     
    try {
     
    	$db = new PDO('mysql:host=localhost;dbname=hotels', 'root', '10111110');
    }
     
    catch(PDOException $e) {
     
    	echo 'Erreur de connexion ' . $e->getMessage();
    }
     
    $manager = new clientManager($db);
     
    if(isset($_POST['submit_form'])) {
     
    	$username_form = $_POST['username_form'];
    	$useremail_form = $_POST['useremail_form'];
     
    	if((empty($username_form)) OR (empty($useremail_form))) {
     
    		$message = '<p class="error">Tous les champs doivent être remplis !</p>';
    	}
    	else {
     
    		if(!preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#', $useremail_form)) {
     
    			$message = '<p class="error">Indiquer une adresse mail valide.</p>';
    		}
    		else {
     
    			$clients_data = array(
     
    				'name' => $username_form,
    	            'email' => $useremail_form
                );
     
                $clients = new Client($clients_data);
                $manager->addClient($clients);
            }
    	}
    }
    Je veux que le nom & l'email ne soient pas en double dans la table.

    Quand je teste le formulaire, ça fonctionne bien pour l'email mais pas pour le nom.

    Merci d'avance.

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Citation Envoyé par cyci60 Voir le message
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT COUNT(name, email) FROM client WHERE name = :name AND email = :email';
    c'est quoi cette requête ? ça ne te renvoi pas une erreur ?

    Puis pourquoi ne pas utiliser seulement l'email ?, car il est bien possible d'avoir 2 utilisateurs avec le même nom mais pas avec le même email. Donc la vérification par email est largement suffisante, non ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Et oui c'est exact, merci bien, mais aucun des trois messages ne s'affichent.

  10. #10
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Alors le message est enregistré dans la variable $message, donc il faut l'écrire avec echo (s'il existe) à la fin de la méthode :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function addClient(Client $client) {
        ....
        ....
        echo ($mesage??"");//l'opérateur "??" est équivalent de if(isset($message)) echo $message else echo "";
    }

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    OK ça marche, merci bien & bonne soirée

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Bonjour, j'ai crée une page login.php, pour connecter les clients & malheureusement petit soucis :

    Fatal error: Uncaught ArgumentCountError: Too few arguments to function clientManager::getClient(), 0 passed in
    ArgumentCountError: Too few arguments to function clientManager::getClient(), 0 passed in
    clientManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    <?php
     
    class clientManager {
     
    	private $_db;
     
    	public function __construct(PDO $db) {
     
    		$this->setDb($db);
    	}
     
    	public function setDb($dbh) {
     
    		$this->_db = $dbh;
    	}
     
    	public function addClient(Client $client) {
     
            $sql = 'SELECT COUNT(email) FROM client WHERE email = :email';
     
            $stmnt = $this->_db->prepare($sql);
            $stmnt->execute([
     
                ':email' => $client->getEmail()
            ]);
     
            $existe = $stmnt->fetchColumn();
     
            if($existe == 0) {
     
                $sql = 'INSERT INTO client (name, email) VALUES(:name, :email)';
     
                $username_form = htmlspecialchars($client->getName());
                $useremail_form = htmlspecialchars($client->getEmail());
     
                $stmnt = $this->_db->prepare($sql);
                $stmnt->bindParam(':name', $username_form);
                $stmnt->bindParam(':email', $useremail_form);
                $stmnt->execute(); 
     
               if($stmnt->rowCount() > 0) {
     
                $message = '<p class="message">insertion effectuée avec succès.</p>';
               }
               else {
     
                $message = '<p class="error">Aucune insertion n\'a été effectuée!</p>';
               }
            }
            else {
     
                $message = '<p class="error">cet email existe déjà !</p>';
            }
     
            if(isset($message)) echo $message;
        }
     
        public function getClient(Client $clients) {
     
                $sql = 'SELECT id, name, email FROM client WHERE name = :name, email = :email';
     
                $name = htmlspecialchars($clients->getName());
                $email = htmlspecialchars($clients->getEmail());
     
                $stmnt = $this->_db->prepare($sql);
                $stmnt->bindParam(':name', $name);
                $stmnt->bindParam(':email', $email);
     
                $stmnt->execute();
     
                while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
                    $result[] = $row;
                }   
     
                return $result;
        }
    }
    process_login.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    <?php
     
    session_start();  
     
    if(isset($_SESSION['name'])) {
     
      header('location:admin/index.php');
    }
     
    require('class/clientManager.php');
    require('class/Client.php');
     
    try {
     
    	$db = new PDO('mysql:host=localhost;dbname=hotels', 'root', '10111110');
    }
     
    catch(PDOException $e) {
     
    	echo 'Erreur de connexion ' . $e->getMessage();
    }
     
    $manager = new clientManager($db);
    $manager->getClient();
     
    session_start();
     
    $_SESSION['name'] = $name;
     
    header('location:admin/index.php');
    login.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    <?php
     
    require('process/process_login.php');
     
    ?>
     
    <!DOCTYPE html>
     
    <html lang="fr">
     
    <head>
    	<title>Espace Membres</title>
    	<meta charset="utf-8">
    	<link rel="stylesheet" type="text/css" href="css/styles.css">
    </head>
     
    <body>
    	<div id="wrapper">
    		<header>
    			<h1>Espace Membres</h1>
    		</header>
     
    		<form method="post" action="">
    			<table>
    				<thead>
    					<tr>
    						<th>Se connecter</th>
    					</tr>
    				</thead>
     
    				<tbody>
    					<tr>
    						<td><label for="name">Votre Nom</label></td>
    						<td><input type="text" name="username_form" id="name"></td>
    					</tr>
     
    					<tr>
    						<td><label for="mail">Votre Email</label></td>
    						<td><input type="text" name="useremail_form" id="mail"></td>
    					</tr>
    				</tbody>
     
    				<tfoot>
    					<tr>
    						<td><input type="reset" value="Effacer le formulaire"></td>
    						<td><input type="submit" name="submit_form" value="Se connecter"></td>
    					</tr>
    				</tfoot>
    			</table>
     
    			<?php if(isset($message)) echo $message ?>
    		</form>
    	</div>
    </body>
     
    </html>
    admin/index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    <?php
     
    require('../class/clientManager.php');
     
    session_start();
     
    if(!isset($_SESSION['name'])) {
     
    	echo 'Vous n\'avez pas les droits d\'accès à cette page<br>';
    	echo '<a href="../account_creation.php">retour vers la page d\'inscription</a>';
     
    	exit;
    }
     
    $name = $_SESSION['name'];
     
    try {
     
    	$db = new PDO('mysql:host=localhost;dbname=hotels', 'root', '10111110');
    }
     
    catch(PDOException $e) {
     
    	echo 'Erreur de connexion ' . $e->getMessage();
    }
     
    $manager = new clientManager($db);
    $manager->getClient();
     
    if(!isset($manager['name'])) {
     
    	echo 'Vous n\'avez pas les droits d\'accès à cette page<br>';
    	echo '<a href="../index.php">retour vers la page d\'inscription</a>';
     
    	exit;
    }
    Merci d'avance.

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Ceci est un autre sujet... mais bon, l'erreur dit que les arguments de la méthode getClient() ne sont pas correctes, car public function getClient(Client $clients) accepte un seul argument qui est l'instance $clients de la classe Client, alors que toi tu l'appelle sans aucune instance $manager->getClient();.

    Tu sais un peu ce que tu codes ou pas ?

  14. #14
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Quand on programme en POO, il faut penser et réfléchir POO.

    - Dans tes classes, tu ne fais jamais appel à la pseudo-variable "$this" qui représente l'instance de la classe en cours.
    - Pour vérifier si un "Client" existe, il est préférable de créer une méthode "exists(...)" par exemple dans ton objet Client.
    - Faire des "echo" dans tes classes, ça n'est pas judicieux. Tes méthodes de classes doivent plutôt remonter des "Exception" le cas échéant, un NULL, un objet vide, ...
    - Préfère le Controller pour envoyer des messages à la vue (MVC), la classe n'affiche rien sur la vue (sauf cas spécifique).

    Toufik est bien patient.

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Bonjour j'ai plus les messages d'erreurs, merci à toi.

    Je suis bien redirigé vers admin/index.php mais j'ai juste Vous n'avez pas les droits d'accès à cette page, retour vers la page d'inscription.

    Je ne vois pas très bien pourquoi le client n'a pas les droits d'accès.

    process_login.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     
    <?php
     
    session_start();  
     
    if(isset($_SESSION['name'])) {
     
      header('location:admin/index.php');
    }
     
    require('class/clientManager.php');
    require('class/Client.php');
     
    try {
     
    	$db = new PDO('mysql:host=localhost;dbname=hotels', 'root', '10111110');
    }
     
    catch(PDOException $e) {
     
    	echo 'Erreur de connexion ' . $e->getMessage();
    }
     
    $manager = new clientManager($db);
     
    if(isset($_POST['submit_form'])) {
     
    	$username_form = $_POST['username_form'];
    	$useremail_form = $_POST['useremail_form'];
     
    	if((empty($username_form)) OR (empty($useremail_form))) {
     
    		$message = '<p class="error">Tous les champs doivent être remplis !</p>';
    	}
    	else {
     
    		$clients_data = array(
     
    				'name' => $username_form,
    	            'email' => $useremail_form
            );
     
            $clients = new Client($clients_data);
            $manager->getClient($clients);
     
            session_start();
     
            $_SESSION['name'] = $name;
     
            header('location:admin/index.php');
        }
    }
    admin/index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    <?php
     
    require('../class/clientManager.php');
    require('../class/Client.php');
     
    session_start();
     
    if(!isset($_SESSION['name'])) {
     
    	echo 'Vous n\'avez pas les droits d\'accès à cette page<br>';
    	echo '<a href="../account_creation.php">retour vers la page d\'inscription</a>';
     
    	exit;
    }
     
    $name = $_SESSION['name'];
     
    try {
     
    	$db = new PDO('mysql:host=localhost;dbname=hotels', 'root', '10111110');
    }
     
    catch(PDOException $e) {
     
    	echo 'Erreur de connexion ' . $e->getMessage();
    }
     
    $manager = new clientManager($db);
    $clients = new Client($clients_data);
    $manager->getClient($clients);
     
    if(!isset($manager['name'])) {
     
    	echo 'Vous n\'avez pas les droits d\'accès à cette page<br>';
    	echo '<a href="../index.php">retour vers la page d\'inscription</a>';
     
    	exit;
    }
    clientManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    public function getClient(Client $clients) {
     
                $sql = 'SELECT id, name, email FROM client WHERE name = :name AND email = :email';
     
                $name = htmlentities($clients->getName());
                $email = htmlentities($clients->getEmail());
     
                $stmnt = $this->_db->prepare($sql);
                $stmnt->bindParam(':name', $name);
                $stmnt->bindParam(':email', $email);
     
                $stmnt->execute();
     
                while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
                    $result[] = $row;
                }   
     
                return $result;
        }

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    J'ai réussi, merci à tous & bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier qu'une entrée existe (ou non) dans la BDD
    Par Nenatio dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/01/2020, 13h44
  2. Réponses: 3
    Dernier message: 22/09/2018, 14h16
  3. [MySQL] vérifier si une entrée existe dans une table
    Par dafchap dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/11/2016, 16h51
  4. Vérifier si une modifié existe dans ma table
    Par hoangeric dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 01/07/2009, 17h37
  5. Réponses: 2
    Dernier message: 21/05/2007, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo