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 :

Insertion des données dans des tables [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut Insertion des données dans des tables
    Bonjour,

    Je travaille sur deux postes différents (une à la maison, l'autre en entreprise) j'ai fait des fonctions pour l'insertion des données en base qui fonctionnent bien à la maison mais qui fonctionnent partiellement en entreprise. Le poste de la maison est un win10 et le serveur WAMP ancienne version, celui de l'entreprise Win7 prof et serveur WAMP 3.1.0 64bit, Php 5.6.31 Mysql 5.7.19 Maria BD 10.2.8

    J'appelle ces fonctions lors de l'exécution. Dans ces fonctions les premières requêtes sont ignorées alors que les deuxièmes sont exécutées. Je ne sais pas pourquoi ça marche à la maison et ne marche pas en entreprise ?

    Peut-être auriez vous une lumière sur ce problème. Voilà les deux fonctions qui contiennent entre autre une question que je pose aussi sur le retour des traitements !

    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
     
    function ajoutEntreprise($nom_ent,$tel_ent,$adr_ent,$resum_ent_fr,$resum_ent_en,$desc_ent_fr,$desc_ent_en,$tel_contact_ent,$email_contact_ent,$url_site_ent,$num_com_phot,$engagement_ent,$adr_ip_ent,$valide_ent,$ville_ent,$date_ent,$num_loc,$num_act,$url_phot){
        $bdd=getBdd();
        $sql="Insert into entreprises(nom_ent,tel_ent,adr_ent,resum_ent_fr,resum_ent_en,desc_ent_fr,desc_ent_en,tel_contact_ent,email_contact_ent,url_site_ent,num_com_phot,engagement_ent,adr_ip_ent,valide_ent,ville_ent,date_ent,num_loc,num_act) values(:nom_ent,:tel_ent,:adr_ent,:resum_ent_fr,:resum_ent_en,:desc_ent_fr,:desc_ent_en,:tel_contact_ent,:email_contact_ent,:url_site_ent,:num_com_phot,:engagement_ent,:adr_ip_ent,:valide_ent,:ville_ent,:date_ent,:num_loc,:num_act)";
     
        try{
            $trait = $bdd->prepare($sql);       
            $retour = $trait->execute(array('nom_ent'=>$nom_ent,'tel_ent'=>$tel_ent,'adr_ent'=>$adr_ent,'resum_ent_fr'=>$resum_ent_fr,'resum_ent_en'=>$resum_ent_en,'desc_ent_fr'=>$desc_ent_fr,'desc_ent_en'=>$desc_ent_en,'tel_contact_ent'=>$tel_contact_ent,'email_contact_ent'=>$email_contact_ent,'url_site_ent'=>$url_site_ent,'num_com_phot'=>$num_com_phot,'engagement_ent'=>$engagement_ent,'adr_ip_ent'=>$adr_ip_ent,'valide_ent'=>$valide_ent,'ville_ent'=>$ville_ent,'date_ent'=>$date_ent,'num_loc'=>$num_loc,'num_act'=>$num_act));
     
        }catch(PDOException $e){
     
            echo "ERREUR INSERTION ENTREPRISE EN BASE: ajoutEntreprise()" .$e->getMessage() ."</br>";
        }
     
        //--insertion photo
     
        $sql1="Insert into photos(num_com_phot, type_phot,titre_phot_fr, titre_phot_en, url_phot, valid_phot) values(:num_com_phot, :type_phot,:titre_phot_fr, :titre_phot_en, :url_phot, :valid_phot)";
            $type_phot="ENTREPRISE";
            $val_phot="NON";
            try{
                $ltrait=$bdd->prepare($sql1);
                    $retour1=$ltrait->execute(array('num_com_phot'=>$num_com_phot, 'type_phot'=>$type_phot,'titre_phot_fr'=>$nom_ent, 'titre_phot_en'=>$nom_ent, 'url_phot'=>$url_phot, 'valid_phot'=>$val_phot));
            }catch(PDOException $e){
                echo "ERREUR INSERTION PHOTOS BASE: ajoutEntreprise() " .$e->getMessage() ."</br>";
            }
        //-- comment savoir que les insertions se sont bien passées pour affecter 1 à $ltrait ici ?
        $ltrait=1;
        return $ltrait;
     
        if($bdd){
            $bdd = NULL;
        }
     
    }
     
     
     
    function ajoutDe($titre_dal_fr,$titre_dal_en, $resum_dal_fr, $resum_dal_en, $desc_dal_fr,$desc_dal_en,$num_com_phot,$date_debut_dal,$date_fin_dal,$adr_ip_dal,$date_enr_dal,$valide_dal,$num_ent,$num_cat_dal,$url_phot){
     
        $bdd=getBdd();
        $sql="Insert into deal(titre_dal_fr,titre_dal_en, resum_dal_fr, resum_dal_en, desc_dal_fr,desc_dal_en,num_com_phot,date_debut_dal,date_fin_dal,adr_ip_dal,date_enr_dal,valide_dal,num_ent,num_cat_dal ) values(:titre_dal_fr,:titre_dal_en, :resum_dal_fr, :resum_dal_en, :desc_dal_fr,:desc_dal_en,:num_com_phot,:date_debut_dal,:date_fin_dal,:adr_ip_dal,:date_enr_dal,:valide_dal,:num_ent,:num_cat_dal )";
        try{
            $trait = $bdd->prepare($sql);
     
            $retour = $trait->execute(array('titre_dal_fr'=>$titre_dal_fr,'titre_dal_en'=>$titre_dal_en, 'resum_dal_fr'=>$resum_dal_fr, 'resum_dal_en'=>$resum_dal_en, 'desc_dal_fr'=>$desc_dal_fr,'desc_dal_en'=>$desc_dal_en,'num_com_phot'=>$num_com_phot,'date_debut_dal'=>$date_debut_dal,'date_fin_dal'=>$date_fin_dal,'adr_ip_dal'=>$adr_ip_dal,'date_enr_dal'=>$date_enr_dal,'valide_dal'=>$valide_dal,'num_ent'=>$num_ent,'num_cat_dal'=>$num_cat_dal ));
     
        }catch(PDOException $e){
     
            echo "ERREUR INSERTION DEAL EN BASE: ajoutDeal()" .$e->getMessage() ."</br>";
        }
     
        //--insertion photo
     
        $sql1="Insert into photos(num_com_phot, type_phot, titre_phot_fr, titre_phot_en, url_phot, valid_phot) values(:num_com_phot, :type_phot, :titre_phot_fr, :titre_phot_en, :url_phot, :valid_phot)";
            $type_phot="DEL";
            $val_phot="NON";
            try{
                $ltrait=$bdd->prepare($sql1);
                    $retour1=$ltrait->execute(array('num_com_phot'=>$num_com_phot, 'type_phot'=>$type_phot,'titre_phot_fr'=>$titre_dal_fr, 'titre_phot_en'=>$titre_dal_en, 'url_phot'=>$url_phot, 'valid_phot'=>$val_phot));
            }catch(PDOException $e){
                echo "ERREUR INSERTION PHOTOS BASE: ajoutDe() " .$e->getMessage() ."</br>";
            }
     
        //-- comment savoir que les insertions se sont bien passées pour affecter 1 à $ltrait ici ?
     
        $ltrait=1;
        return $ltrait;
     
        if($bdd){
            $bdd = NULL;
        }
     
     
    }
    Les insertions des photos marchent bien, mais pas d'insertions dans les tables entreprises et deal. Cependant chez moi toutes les insertions sont faites.

    Je vous remercie d'avance de votre éclairage.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu obtiens des erreurs ou simplement rien ne se passe ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Bonjour et merci de votre réponse. En effet, j'obtiens les erreurs suite au fait qu'il n'y ait au cun enregistrement. Je m'explique.
    Dans un fichier autre j'appelle ces fonctions si tout se passe bien puis j'appelle une autre fonction qui interrogera la table qui vient d'être insérée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $resp=ajoutDe($titre_dal_fr,$titre_dal_en, $resum_dal_fr, $resum_dal_en, $desc_dal_fr,$desc_dal_en,$num_com_phot,$date_debut_dal,$date_fin_dal,$adr_ip_dal,$date_enr_dal,$valide_dal,$num_ent,$num_cat_dal,$url_phot);
    if($resp==1){
    		//--récupération du numéro du deal
    		$lenumDeal=getNumDeal($num_com_phot);
    	}
    Normal si le deal n'a pas été inséré il y aura une erreur et l'erreur c'est que lenumDeal est indefinie.
    Encore merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Il n'y a personne pour m'aider ?
    Je ne comprends pas pourquoi il ne m'affiche pas d'erreur lors des insertions dans les tables entreprises et deal s'il y en a ! Mais ce qui est bizarre c'est que les insertions dans la table photos sont bien faites.
    S'il vous plaît de l'aide !!!!!!!

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    pour lancer les exceptions afin de gérer les erreurs avec PDO il suffit, dans un bloc try/catch, définir un gestionnaire d'erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        $bdd=getBdd();
        $bbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    pour savoir qu'une insertion s'est bien passée tu peux soit utiliser les transactions(voir la doc php pdo) soit vérifier que la méthode execute() renvoie true dans le cas d'un succès sinon false si l'insertion a échouée.

    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
     
    function ajoutEntreprise($nom_ent,$tel_ent,$adr_ent,$resum_ent_fr,$resum_ent_en,$desc_ent_fr,$desc_ent_en,$tel_contact_ent,$email_contact_ent,$url_site_ent,$num_com_phot,$engagement_ent,$adr_ip_ent,$valide_ent,$ville_ent,$date_ent,$num_loc,$num_act,$url_phot){
        $bdd=getBdd();
        $sql="Insert into entreprises(nom_ent,tel_ent,adr_ent,resum_ent_fr,resum_ent_en,desc_ent_fr,desc_ent_en,tel_contact_ent,email_contact_ent,url_site_ent,num_com_phot,engagement_ent,adr_ip_ent,valide_ent,ville_ent,date_ent,num_loc,num_act) values(:nom_ent,:tel_ent,:adr_ent,:resum_ent_fr,:resum_ent_en,:desc_ent_fr,:desc_ent_en,:tel_contact_ent,:email_contact_ent,:url_site_ent,:num_com_phot,:engagement_ent,:adr_ip_ent,:valide_ent,:ville_ent,:date_ent,:num_loc,:num_act)";
     
        try{
            $bbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $trait = $bdd->prepare($sql);       
            $retour = $trait->execute(array('nom_ent'=>$nom_ent,'tel_ent'=>$tel_ent,'adr_ent'=>$adr_ent,'resum_ent_fr'=>$resum_ent_fr,'resum_ent_en'=>$resum_ent_en,'desc_ent_fr'=>$desc_ent_fr,'desc_ent_en'=>$desc_ent_en,'tel_contact_ent'=>$tel_contact_ent,'email_contact_ent'=>$email_contact_ent,'url_site_ent'=>$url_site_ent,'num_com_phot'=>$num_com_phot,'engagement_ent'=>$engagement_ent,'adr_ip_ent'=>$adr_ip_ent,'valide_ent'=>$valide_ent,'ville_ent'=>$ville_ent,'date_ent'=>$date_ent,'num_loc'=>$num_loc,'num_act'=>$num_act));
     
      //--insertion photo
        if($retour === TRUE ){ // la requête précédente s'est exécutée avec succès, alors dans ce cas on lance la seconde
     
         $sql1="Insert into photos(num_com_phot, type_phot,titre_phot_fr, titre_phot_en, url_phot, valid_phot) values(:num_com_phot, :type_phot,:titre_phot_fr, :titre_phot_en, :url_phot, :valid_phot)";
            $type_phot="ENTREPRISE";
            $val_phot="NON";
            $ltrait=$bdd->prepare($sql1);
            $retour1=$ltrait->execute(array('num_com_phot'=>$num_com_phot, 'type_phot'=>$type_phot,'titre_phot_fr'=>$nom_ent, 'titre_phot_en'=>$nom_ent, 'url_phot'=>$url_phot, 'valid_phot'=>$val_phot));
       return $retour1; // si true c'est que la seconde requête s'est bien passée false sinon et on sort de la fonction
       }
     
     
        }catch(PDOException $e){
     
            echo "Erreur lors de l'insertion " .$e->getMessage() ."</br>";
            return false; // on sort de la fonction
        }
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci de votre retour,
    le test sur la variable $retour me renvoie FALSE cela veut dire que la requête de l'insertion dans la table entreprises a échoué mais je ne sais pas pourquoi, il n'y a aucun message d'erreur. Dans le fichier php_error.log j'ai un Undefined variable sur retour !
    Ma fonction getBdd() contient déjà le tableau en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getBdd(){
        try{
            $bdd = new PDO('mysql:host=localhost;dbname=labase;charset=utf8',
              'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        }catch(PDOException $e){
            echo 'ERREUR OUVERTURE BASE : => getBdd() ' . $e->getMessage();
        }
     
        return $bdd ;
    }
    Ce que je trouve bizarre c'est que cette requête marche bien à mon domicile sur un autre WAMP ancien.
    Merci encore

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    est-ce-que tu as activé l’affichage des erreurs dans le fichier php.ini de ton serveur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error_reporting = E_ALL
    display_errors = On

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Oui c'est bien activé dans php.ini du serveur ! C'est très bizarre cette histoire !
    Merci du retour

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Bonjour, Merci de me venir en aide !
    Voilà les caractéristiques des deux environnements
    à la maison j'ai
    wampserver 2.4
    php 5.4.12
    Mysql 5.6.12
    Apache 2.4.4
    en entreprise j'ai
    Wampserver 3.1 64bits
    php 5.6.31
    Mysql 5.7.19
    Apache 2.4.27

    Je ne sais pas si c'est à ce niveau que peut provenir cette anomalie ?
    Juste pour rappel, les deux fonctions marchent bien à la maison (insertion des données dans les tables entreprises, deal et photos) alors qu'en entreprise dans les deux fonctions il n'y a que l'insertion dans la table photos, mais les autres insertions ne marchent pas ?
    Je suis bloqué depuis quelques jours à ce niveau et ne trouve pas ou vient l'erreur.
    Je vous remercie de votre aide

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    le problème que ton script n'affiche pas d'erreurs c'est un peu troublant.sinon dans une de tes pages essaies d'enlever un point-virgule et consulte cette page afin de voir si elle génère une erreur de syntaxe.
    Essaie d'isoler la partie qui ne marche pas et exécute la en faisant un déboggage des variables injectées dans la requête sql:
    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
     
     
     
    function ajoutEntreprise($nom_ent,$tel_ent,$adr_ent,$resum_ent_fr,$resum_ent_en,$desc_ent_fr,$desc_ent_en,$tel_contact_ent,$email_contact_ent,$url_site_ent,$num_com_phot,$engagement_ent,$adr_ip_ent,$valide_ent,$ville_ent,$date_ent,$num_loc,$num_act,$url_phot){
     
        $sql="Insert into entreprises(nom_ent,tel_ent,adr_ent,resum_ent_fr,resum_ent_en,desc_ent_fr,desc_ent_en,tel_contact_ent,email_contact_ent,url_site_ent,num_com_phot,engagement_ent,adr_ip_ent,valide_ent,ville_ent,date_ent,num_loc,num_act) values(:nom_ent,:tel_ent,:adr_ent,:resum_ent_fr,:resum_ent_en,:desc_ent_fr,:desc_ent_en,:tel_contact_ent,:email_contact_ent,:url_site_ent,:num_com_phot,:engagement_ent,:adr_ip_ent,:valide_ent,:ville_ent,:date_ent,:num_loc,:num_act)";
     
        try{
            $bdd = new PDO('mysql:host=localhost;dbname=labase;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            $trait = $bdd->prepare($sql);       
            $retour = $trait->execute(array('nom_ent'=>$nom_ent,'tel_ent'=>$tel_ent,'adr_ent'=>$adr_ent,'resum_ent_fr'=>$resum_ent_fr,'resum_ent_en'=>$resum_ent_en,'desc_ent_fr'=>$desc_ent_fr,'desc_ent_en'=>$desc_ent_en,'tel_contact_ent'=>$tel_contact_ent,'email_contact_ent'=>$email_contact_ent,'url_site_ent'=>$url_site_ent,'num_com_phot'=>$num_com_phot,'engagement_ent'=>$engagement_ent,'adr_ip_ent'=>$adr_ip_ent,'valide_ent'=>$valide_ent,'ville_ent'=>$ville_ent,'date_ent'=>$date_ent,'num_loc'=>$num_loc,'num_act'=>$num_act));
     
     
           echo "<pre>";
           $trait->debugDumpParams(); // débogage de la requête
           echo "</pre>";
           return $retour;
        }catch(PDOException $e){
            echo "Erreur lors de l'insertion " .$e->getMessage() ."</br>";
            return false; // on sort de la fonction
        }
    }
    après tu testes cette fonction en lui attribuant des paramètres en dur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ajout = ajoutEntreprise("nom de l'entreprise","00 00 00 00 00","20 rue xxxx, 75000 Paris",.....); // renseigne tous les paramètres de la fonction
    var_dump($ajout); // true si ajout false sinon
    d'après le débogage de la requête tu verras s'il ya bel et bien eu insertion.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Oufff,

    j'ai pu savoir ce qui n'allait pas, mais je ne sais pas ce qui c'est passé pour que les erreurs s'affichent sur la page !

    Voilà, les éléments à insérer, il y avait un dont la taille était plus grande que celle définie dans la base(adr) ! Et là je ne sais pas pourquoi je n'avais pas d'erreur affichée !

    Mais bon tout est rentré dans l'ordre

    Je vous remercie énormément du temps passé à résoudre ce problème.

    Merci beaucoup !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/12/2013, 14h29
  2. Réponses: 2
    Dernier message: 10/12/2013, 09h42
  3. insertion de donnée dans une table (2 bd)
    Par robert_trudel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/01/2007, 17h41
  4. Réponses: 5
    Dernier message: 26/01/2007, 08h11
  5. Réponses: 7
    Dernier message: 12/10/2004, 16h43

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