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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 511
    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 511
    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 511
    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 511
    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

+ 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