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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    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

    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
    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.

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    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

    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
    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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    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.

  6. #6
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    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 : 601
    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);

  7. #7
    Membre Expert

    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
    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 ?

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

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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    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,

  10. #10
    Membre Expert

    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
    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);

  11. #11
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    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 : 601
    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

  12. #12
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    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 : 601
    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 ?

+ 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