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 :

conflit requête UPDATE [PDO]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    photographe
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : photographe

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut conflit requête UPDATE
    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
     
    if(isset($_POST['emailVerif'])){
     
        $email=htmlspecialchars($_POST['email']);
        $query=$db->query("SELECT email, nom, prenom, phone FROM clients WHERE email = '$email' ");
        $count= $query->rowCount(); 
        if($count == 1){
             while($cont=$query->fetch()){
                 //echo $cont[1];
                 $cl_email=$cont['email'];
                 $cl_nom=$cont['nom'];
                 $cl_prenom=$cont['prenom'];
                 $cl_phone=$cont['phone'];
             }
        }else{ $mess='le client n\'existe pas';}
    }
     
    if(isset($_POST['action'])) {
        $nom=htmlspecialchars($_POST['nom']);
        $prenom=htmlspecialchars($_POST['prenom']);
        $email=htmlspecialchars($_POST['email']);
        $phone=htmlspecialchars($_POST['phone']);
        $dateDebut =htmlspecialchars($_POST['debut']);
        $dateFin =htmlspecialchars($_POST['fin']);
     
                if(!empty($email)&& !empty($nom)&& !empty($prenom)) {
                    try{
                    require("../includes/bdd/config.php");
                    $query=$db->query("SELECT email, nom, prenom, phone FROM clients WHERE email = '$email' ");
                        $count = $query->rowCount(); 
                        if($count == 1){
                            //echo $nom;
                        //_____________________________ LE PROBLEME EST ICI
                            $req=(" UPDATE clients SET email='$email',phone='$phone', WHERE email=$email ");
                            $req->execute();
                        //__________________________________________________   
     
                        }else{
                            $req=$db->prepare("INSERT INTO clients  VALUES ('$email','$nom','$prenom', '$phone')");
                            $req->execute();
                        }
     
                        $req=$db->prepare("INSERT INTO reservation VALUES ('$titre', '$description','$dateDebut','$dateFin')");
                        $req->execute();
     
                        $msg="Evénement enregistré !";
     
                    }catch(PDOEXCEPTION $e) {
                        echo $e;
                    }
     
                }
                }
            }
    Bonjour à tous,

    je débute avec pdo et je suis autodidacte... Merci pour votre compréhension, j'essaye de m'améliorer chaque jour !

    Je réalise une petite application d'administration : une table 'clients' où il ne peut pas y avoir de redondance (l'id unique au niveau de l'email).

    - L'admin vérifie si l'email du client existe via un 'submit' d'un premier formulaire avec un seul 'input'. Si oui, remplissage d'un deuxième formulaire avec les infos de la table clients -> OK
    - L'email existe, les infos se remplissent dans le form , il veut mettre à jour l'email du client qui a changé -> ça marche pas, php retourne une page blanche, ça foire au niveau de ' UPDATE clients ' ( quand j'enlève la requête et que je fais un echo '$nom', php me retourne bien la valeur de $nom ).

    En fait, tout fonctionne sauf 'UPDATE' ( il n'y a pas de problème de connexion, ';' , ou autres fautes d'inattention )... j'ai fais des recherches mais je ne vois pas.

    Merci pour vos lumières

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        //_____________________________ LE PROBLEME EST ICI
                            $req=(" UPDATE clients SET email='$email',phone='$phone', WHERE email=$email ");
                            $req->execute();
                        //__________________________________________________
    Tu lui demandes un drôle de truc là.
    Dans ton interface d'administration de ta base, quand tu testes la requête, tu dois avoir un message d'erreur du genre "on ne peut pas modifier un truc qui est au même moment un critère de filtre". En anglais, probablement, mais l'idée y est.
    Autre chose, tu dis que ton identifiant cllient est le mail... pas bien logique. Ca impliquerait qu'il ne peut pas changer de mail.
    Le plus logique, c'est un id autoincrémenté, un identifiant unique, du genre construit automatiquement nom_prenom_dateNaissance.
    Des trucs qui ne changent pas quoi et tu auras peu de chance d'avoir deux fois le même.
    Pourquoi un id autoincrementé ? parce que c'est bien pratique le jour où tu veux savoir quel est le dernier client par exemple...
    Ensuite, tu pourras faire tous les update que tu veux en filtrant sur cet identifiant par définition impossible à modifier.

    Dans une base idéale, tu as ta table client avec que des données du type 1 client = 1 enregistrement. (id, identifiant, nom, prenom,genre,date_naissance,date_inscription)
    Et une autre table téléphone, reliant ton id client avec n téléphones possibles, une table mail reliant ton id client avec n mails possibles, une table compte reliant ton id client avec n comptes possibles etc.
    Et après, tu remets tout ça dans une vue plus facile à appréhender pour nous.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    create or replace view v_clients as
     
    select client.id,
    client.identifiant,
    client.nom,
    client.prenom,
    client.genre,
    date_format(client.date_naissance,"%d/%m/%Y") as naissance,
    date_format(client.date_inscription,"%d/%m/%Y") as inscription,
    mail.libelle as email,
    telephone.libelle as tel
     
    from client
    inner join mail on client.id=mail.client_id /*ici au moins un mail est obligé sinon client disparaît*/
    left outer join telephone on client.id=telephone.client_id /*ici on imagine que tous les clients n'ont pas forcément un tél*/

    PS : ne pas mettre de order by dans une vue, ça ne fait que consommer pour rien.
    Quand tu requêteras sur la vue, tu poseras ton filtre et ton order by.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Candidat au Club
    Femme Profil pro
    photographe
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : photographe

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci Dendrite pour cette réponse rapide et précise,

    j’ai compris le fait de séparer les données en plusieurs tables pour la maintenance et la notion d’UPDATE. Aussi, le fait qu’un email ne peut être l’id de la table.
    J’ai de mauvaises bases et je dois les revoir… Je manque de temps.

    Encore merci pour tes conseils, je vais tenter de les mettre en pratique et aussi lire ton tuto sur PHP ( ça ne me fera pas de tort non plus !).

  4. #4
    Candidat au Club
    Femme Profil pro
    photographe
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : photographe

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Il y avait aussi en plus une grosse faute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //_____________________________ LE PROBLEME EST ICI
            $req=(" UPDATE clients SET email='$email',phone='$phone', WHERE email=$email ");
            $req->execute();
    //__________________________________________________
    ... l'oubli de la connexion préparée à la db :
    $req=$db->prepare(" UPDATE clients SET email='$email',phone='$phone', WHERE email=$email ") ... Je ne sais pas comment j'ai fait pour ne pas la voir ! (trop le nez dans le guidon).

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

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Ma requète update est elle conforme ?
    Par CBTech dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 24/05/2005, 21h25
  3. [VB.NET] [ODBC] Pb requête UPDATE avec clé primaire..?
    Par Pleymo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/03/2005, 18h46
  4. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 08h16
  5. PB Requête update
    Par cassi2 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 25/10/2004, 14h15

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