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 :

"Moulinette" mise à jour des données( qui ne fait pas la tache demandée) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut "Moulinette" mise à jour des données( qui ne fait pas la tache demandée)
    Bonjour à toutes et à tous,
    Ci dessous mon code (qui doit modifier les champs telephone, code postal) et créer une référence pour tous mes enregistrements.
    Ce code ne retourne pas d'erreur mais les modifications ne sont pas prises en compte. Auriez vous une idée ? D'avance merci.
    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
    <?php
    // parcourir tous les enregistrements de la table prospects
    require_once ('_conn-intranet.php');
    $telephone='';
    $cpostal='';
    $reponse = $bdd->query('SELECT idprospects, telephone, cpostal FROM prospects');
    while ($data = $reponse->fetch()) {
    	if(strlen($data['telephone'])==9) { // Si telephone a 9 chiffres, on ajoute 0 devant
    		$telephone = '0'.$data['telephone'];
    	}
    	if(strlen($data['cpostal'])==4) { // Si code postal a 4 chiffres, on ajoute 0 devant
    		$cpostal = '0'.$data['cpostal'];
    	}	
    	// Màj de l'enregistrement	
    	$req=$bdd->prepare('UPDATE prospects SET (telephone=:telephone , cpostal=:cpostal) WHERE idprospects=\''.$data['idprospects'].'\'');
    	$req->execute(array(':telephone' => $telephone, ':cpostal' => $cpostal ));
    }	 // end while 
    echo 'Téléphone et code postal modifiés<br />';
     
    /* Création de la référence */
    $reference ='';
    $cabinet='';
    $consultant='';
    $dossier='';
    $reponse = $bdd->query('SELECT idprospects, cpostal FROM prospects');
    while ($data = $reponse->fetch()) {
    	$departement = substr($data['cpostal'], 0, 2);
    	switch ($departement){
    		case 24: // Aquitaine, Dordogne
    			$cabinet='24'; // Périgueux
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 33: // Aquitaine, Gironde
    			$cabinet='33'; // Bordeaux
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 40: // Aquitaine, Landes
    			$cabinet='40'; // Mont de marsan
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 47: // Aquitaine, Lot et garonne
    			$cabinet='47'; // Agen
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;	
    		case 64: // Aquitaine, Pyrennees atlantique
    			$cabinet='64'; // Pau
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 09: // Midi Pyrennees, Ariège
    			$cabinet='09'; // Foix
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;					
    		case 12: // Midi Pyrennees, Aveyron
    			$cabinet='12'; // Rodez
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;		
    		case 31: // Midi Pyrennees, Haute garonne
    			$cabinet='31'; // Toulouse
    			$consultant='TRI'; // Triviaux
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;						
    		case 32: // Midi Pyrennees, Gers
    			$cabinet='32'; // Auch
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 46: // Midi Pyrennees, Lot
    			$cabinet='46'; // Cahors
    			$consultant='TRI'; // Triviaux
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 65: // Midi Pyrennees, Hautes Pyrennees
    			$cabinet='65'; // Tarbes
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 81: // Midi Pyrennees, Tarn
    			$cabinet='81'; // Albi
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 82: // Midi Pyrennees, Tarn et garonne
    			$cabinet='82'; // Montauban
    			$consultant='TRI'; // Triviaux
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 11: // Languedoc Roussillon, Aude
    			$cabinet='11'; // Carcassonne
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 30: // Languedoc Roussillon, Gard
    			$cabinet='30'; // Nimes
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    		case 34: // Languedoc Roussillon, Hérault
    			$cabinet='34'; // Montpellier
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;	
    		case 48: // Languedoc Roussillon, Lozère
    			$cabinet='48'; // Mende
    			$consultant='TRI'; // 
    			$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    			break;
    			default: // Languedoc Roussillon, Pyrennees orientales
    				$cabinet='66'; // Perpignan
    				$consultant='TRI'; // 
    				$dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    	} // End switch
    $reference = $cabinet.$consultant.$dossier;
    //echo $reference.'<br />';
    $req=$bdd->prepare('UPDATE prospects SET (reference=:reference) WHERE idprospects=\''.$_data['idprospects'].'\'');
    $req->execute(array(':reference' => $reference));
    } // end while 
    echo 'Référence ajoutée<br />Traitement terminé.';
    ?>

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Si tes champs en base de données sont de type numérique (int, mediumint...), c'est normal qu'il ne prenne pas en compte les "0" qui se trouvent devant, ceux-ci sont automatiquement supprimés par MySQL à l'insertion (comme tous les SGBD de ma connaissance d'ailleurs).

    Si tu souhaites les conserver, il te faut stocker tes données dans des champs "textes", comme par exemple un char(10) pour le numéro de téléphone.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Merci pour ta réponse, je te confirme que les champs telephone et cpostal sont en VARCHAR(10) et (5), je pense que j'ai problème dans la boucle...

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Il y a en effet un problème qui m'apparaît dans ta boucle, tu fais toujours l'update même s'il n'y en a pas besoin (tel qu'actuellement, ça doit décaler tes numéros de téléphone non ?).

    De plus, avec le code actuel tu ne tires aucun bénéfice des requêtes préparées étant donné que tu prepare ta requête à chaque tour de boucle.

    Voici un code qui me semblerait fonctionner :
    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
     
    $req = $bdd->prepare('UPDATE prospects SET (telephone=:telephone , cpostal=:cpostal) WHERE idprospects= :idprospects');
    $reponse = $bdd->query('SELECT idprospects, telephone, cpostal FROM prospects');
    while ($data = $reponse->fetch()) {
        $modif = false;
        if (mb_strlen($data['telephone']) == 9) { // Si telephone a 9 chiffres, on ajoute 0 devant
            $data['telephone'] = '0' . $data['telephone'];
            $modif = true;
        }
        if (mb_strlen($data['cpostal']) == 4) { // Si code postal a 4 chiffres, on ajoute 0 devant
            $data['cpostal'] = '0' . $data['cpostal'];
            $modif = true;
        }
        // Màj de l'enregistrement	
        if ($modif) {
            $req->execute(array(':telephone' => $data['telephone'], ':cpostal' => $data['cpostal'], ':idprospects' => $data['idprospects']));
        }
    }  // end while
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Bonjour.
    j'ai un peu de mal à comprendre l'utilité de ton switch case. Ne peux tu pas remplacer les lignes 27 à 118 par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $cabinet = substr($data['cpostal'], 0, 2); 
    $consultant='TRI';
    $dossier=str_pad($data['idprospects'], 6, "0", STR_PAD_LEFT);
    Participez vous aussi !
    Message utile
    Discussion résolue

  6. #6
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Pour cerner le problème d'update, je te conseille de debuguer en remplaçant en lignes 16 et 17 tes variables par des données en durs. Tu verras ainsi si ta requête a une erreur ou si se sont tes variables.et cela orientera la recherche du bug
    Participez vous aussi !
    Message utile
    Discussion résolue

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Spartacusply,
    Non, il ne se passe rien, mais ta boucle m'inspire...

    ypcman,
    Oui effectivement, logique que tu ne comprennes pas ! initialement, on utilisait le numéro du département pour trouver le nom du bureau (par exemple, si 24 alors 'PER' pour périgueux etc, donc inutile dans le cas de figure actuel. Merci de ta remarque.

  8. #8
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Bon bah déjà alors ptit débugagge pour voir ce qu'il se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $reponse = $bdd->query('SELECT idprospects, telephone, cpostal FROM prospects');
    $res = $reponse->fetchAll();
    print_r($res);
    exit;
    Le tableau contient bien t-il ce qui est attendu ?
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Excuse moi, je n'avais pas vu... oui pas de soucis

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut up ?
    Bonjour à toutes et tous,
    Je suis toujours à la recherche d'une idée...
    Les données sont OK, mais le "update" ne se fait pas.
    Merci,

  11. #11
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ben là...

    Faut y aller à la mano, en faisant du débugagge ligne par ligne...

    As-tu bien activer le renvoi d'un warning sur ton objet PDO ? (permet de voir s'il y a des erreurs sur ta requête)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  12. #12
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Bonjour.
    Hier je t'ai proposé une piste :
    Pour cerner le problème d'update, je te conseille de debuguer en remplaçant en lignes 16 et 17 tes variables par des données en durs. Tu verras ainsi si ta requête a une erreur ou si se sont tes variables.et cela orientera la recherche du bug
    So what ?
    Participez vous aussi !
    Message utile
    Discussion résolue

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Spartacusply,
    Oui

  14. #14
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Sans passer par une requête préparée ça donne quoi ? (fait le test proposé par ypcman également)
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Merci pour votre aide, après activation du renvoi des erreurs PDO, j'ai ça !
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(telephone='0467552668', cpostal='34270') WHERE idprospects= '1'' at line 1' in /media/www-dev/private/intranet/phpfiles/utilitaires-sgbd.php:23 Stack trace: #0 ./intranet/phpfiles/utilitaires-sgbd.php(23): PDOStatement->execute(Array) #1 {main} thrown in ./intranet/phpfiles/utilitaires-sgbd.php on line 23
    Pour info, si je fais : UPDATE prospects SET (telephone='0467552668', cpostal='34270') WHERE idprospects= '1'
    dans l'onglet sql de phpmyadmin, la réponse est sans appel et logique : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(telephone="0467552668", cpostal="34270") WHERE idprospects=1' at line 1

    Donc AU SECOURS

  16. #16
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ah oui, là du coup ça saute aux yeux..

    Enlève les parenthèses... (sisi je te jure, tout ça pour ça...)
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut [Résolu]
    Citation Envoyé par Spartacusply Voir le message
    Ah oui, là du coup ça saute aux yeux..

    Enlève les parenthèses... (sisi je te jure, tout ça pour ça...)

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut et surtout merci à toi Spartacusply
    Je crois que je vais aller dormir un peu, je fatigue là.

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

Discussions similaires

  1. [JTable] mise à jour des données
    Par tripop dans le forum Composants
    Réponses: 3
    Dernier message: 04/02/2009, 18h52
  2. Mise à jour des données
    Par Alex063 dans le forum Access
    Réponses: 6
    Dernier message: 31/01/2006, 17h16
  3. MySqlDAC et mise à jour des données
    Par charliejo dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/01/2006, 09h25
  4. mise à jour des données toutes les semaines...
    Par Toff !!!!! dans le forum Access
    Réponses: 20
    Dernier message: 22/12/2005, 11h38

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