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 :

le traitement de ma requ�te cr�e des doublons [MySQL]


Sujet :

PHP & Base de donn�es

  1. #1
    Membre �clair� Avatar de MelkInarian
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    260
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 260
    Par d�faut le traitement de ma requ�te cr�e des doublons
    Bonjour et meilleurs v�ux � toutes et � tous,
    je suis emb�t�, je suis n�ophyte et souhaite, � l'aide d'une base/table MySQL alimenter une page html.
    voici la partie de mon code php (pour lequel j'ai r�cup�r� les infos ici et l�), auquel j'ai retir� les valeurs des variables : $serveur, $nom_base et $pwd, qui concerne mon probl�me.
    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
     
    		<?php
    			$charset = "utf8";	// Le charset "utf8"
     
    			$Table = array();		// Cr&eacute;ation et initialisation de variable : La table entière
    			$LignPHP = array();	// Cr&eacute;ation et initialisation de variable : 1 ligne de la table
    			global $TablPHP;		// Cr&eacute;ation de variable globale pour la port&eacute;e soit pour la page entière et non seulement pour la fonction locale
    			$TablPHP = array();	// Cr&eacute;ation et initialisation de variable : La table entière
    			//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
    			//             MA REQUETE dans la base 'adc' table 'occupations'
    			//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    			// connexion &agrave; MySQL en utilisant PDO
    			try //  PHP essaie d'exécuter les instructions à l'intérieur du bloc try. S'il y a une erreur, il rentre dans le bloc catch et fait ce qu'on lui demande (ici, on arrête l'exécution de la page en affichant un message décrivant l'erreur).
    			{
    				$bdd = new PDO('mysql:host='.$serveur.';dbname='.$nom_base.';charset='.$charset, $login, $pwd);
    			}
    			catch (Exception $e) // S'il y a une erreur, il rentre dans le bloc catch et fait ce qu'on lui demande (ici, on arrête l'exécution de la page en affichant un message décrivant l'erreur).
    			{
    					die('Erreur : ' . $e->getMessage());    // En cas d'erreur, on affiche un message et on arrête tout
    			}
    			// Si tout va bien, on peut continuer
     
    			$Table = $bdd->query('SELECT * FROM occupations');// On récupère tout le contenu de la table occupations
     
     
    			// les deux boucles imbriquées 'foreach', ci-dessous, servent à créer un tableau PHP '$TablPHP' contenant la table 'occupations'
    			// Le premier foreach() lit chaque ligne du tableau
    			foreach($Table as $LignTab) 			// la boucle foreach : &Agrave; chaque tour de boucle, la valeur de l'&eacute;l&eacute;ment suivant, du tableau $Table, est mise dans la variable $LignTab (qui est elle même un tableau.
    			{
    				// Le deuxième foreach() lit chaque tableau de chaque ligne. On accède à ses propriétés et à ses valeurs avec les variables $cle et $valeur.
    				//foreach($LignTab as $cle=>$valeur) 		// la boucle foreach : &Agrave; chaque tour de boucle, la valeur de l'&eacute;l&eacute;ment suivant, du tableau $LignTab, est mise dans la variable $element.
    				foreach($LignTab as $valeur) 		// la boucle foreach : &Agrave; chaque tour de boucle, la valeur de l'&eacute;l&eacute;ment suivant, du tableau $LignTab, est mise dans la variable $element.
    				{
    					array_push($LignPHP,$valeur);	// Je rentre la valeur contenue dans '$valeur' dans '$LignPHP' 
    				}
    				array_push($TablPHP,$LignPHP); 		// Je rentre la valeur contenue dans '$LignPHP' dans '$TablPHP'
    				$LignPHP = array();					// pour vider mon tableau de ligne je le redéfinis
    			}
     
    			$Table->closeCursor(); 					// Termine le traitement de la requête
    		?>
    mon probl�me est que mon tableau $TablPHP contenant, je crois, l'int�gralit� de ma table 'occupations' est enti�rement doubl�, toutes les lignes sont dupliqu�es alors que dans la table MySQL d'origine �� n'est pas le cas.
    Je me doute bien que j'ai "p�ch�" quelque part, mais �� fait plusieurs jours que je trime dessus et je ne vois pas o�.
    quelqu'un peut-il m'expliquer ce que j'ai fait de mal ?
    Je le r�p�te, je suis n�ophyte, aussi, j'ai besoin d'explications vulgaris�es!
    merci beaucoup

  2. #2
    Membre �clair� Avatar de MelkInarian
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    260
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 260
    Par d�faut pr�cision
    En fait ce ne sont pas "toutes les lignes qui sont dupliqu�es" mais dans chaque ligne, toutes les valeurs sont en double.
    un peu comme si dans la boucle interne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    foreach($LignTab as $valeur)
    {
    	array_push($LignPHP,$valeur);	// Je rentre la valeur contenue dans '$valeur' dans '$LignPHP' 
    }
    le array_push($LignPHP,$valeur); s'ex�cute 2 fois � chaque fois.

  3. #3
    Mod�ratrice
    Avatar de Celira
    Femme Profil pro
    D�veloppeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 40
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par d�faut
    Tu fais la r�cup�ration des donn�es de fa�on implicite : autrement dit, en utilisant directement le r�sultat dans une boucle foreach au lieu d'appeler la fonction fetch. Tu utilises donc le mode de r�cup�ration par d�faut qui est PDO::FETCH_BOTH. Or FETCH_BOTH remonte les donn�es dans un tableau index� par nom de colonne ET par num�ro de colonne. Autrement dit, chaque donn�e est remont�e deux fois. D'o� tes informations en double.

    Tu peux pr�ciser le mode en utilisant la fonction setFetchMode :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $Table = $bdd->query('SELECT * FROM occupations');// On récupère tout le contenu de la table occupations
    $Table->setFetchMode(PDO::FETCH_ASSOC);
    Mod�ratrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "�a ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'�diteur) et [C=php][/C]

  4. #4
    Membre �clair� Avatar de MelkInarian
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    260
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 260
    Par d�faut Corrig�
    Merci Celira, �� fonctionne comme souhait�, c'est la premi�re fois que j'utilise PDO, il est dit dans le manuel que PDO est l'avenir, alors j'ai voulu m'adapter mais ce n'est pas intuitif (je trouve) !

    Merci encore.

  5. #5
    Mod�ratrice
    Avatar de Celira
    Femme Profil pro
    D�veloppeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 40
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par d�faut
    Hum.. c'est peut-�tre parce que tu as utilis� la r�cup�ration implicite. Personnellement, je pr�f�re utiliser une boucle while avec un appel � fetch.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    $Table = $bdd->query('SELECT * FROM occupations');// On récupère tout le contenu de la table occupations
    $Table->setFetchMode(PDO::FETCH_ASSOC);
     
    // les deux boucles imbriquées 'foreach', ci-dessous, servent à créer un tableau PHP '$TablPHP' contenant la table 'occupations'
    // Le premier foreach() lit chaque ligne du tableau
    while ($LignTab = $Table->fetch()) 			// while à la place de la boucle foreach : &Agrave; chaque tour de boucle, la valeur de l'&eacute;l&eacute;ment suivant, du tableau $Table, est mise dans la variable $LignTab (qui est elle même un tableau.
    {
    Mod�ratrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "�a ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'�diteur) et [C=php][/C]

  6. #6
    Membre �clair� Avatar de MelkInarian
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    260
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 260
    Par d�faut Merci Celira
    Le bout de code que j'ai utilis� est b�ti comme le votre, mais je ne suis pas arriv� � le faire fonctionner comme je voulais alors j'ai modifi� pour du foreach.

    Mais j'avais plusieurs probl�mes et celui-ci �tait le dernier en date. Peut-�tre que le fonctionnement aurait �t� correct si je n'avais pas eu les autres soucis et je ne suis pas revenu en arri�re apr�s les avoir corrig�.

    Et comme maintenant �� fait exactement ce que je voulais que �� fasse, je ne vais pas prendre le risque de casser autre chose.

    Merci encore, c'est vraiment sympa.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Num�roAuto qui cr�e des doublons!
    Par Chrysostome dans le forum VBA Access
    R�ponses: 21
    Dernier message: 03/05/2016, 16h02
  2. Requ�te sur des doublons
    Par renaudjuif dans le forum Requ�tes
    R�ponses: 10
    Dernier message: 22/02/2010, 15h43
  3. REPLACE cr�e des doublons ?
    Par �ric1 dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 25/08/2009, 16h07
  4. saveOrUpdate() qui cr�e des doublons lors de l'update
    Par tamiii dans le forum Hibernate
    R�ponses: 1
    Dernier message: 21/04/2009, 15h44
  5. Un EDIT/UPDATE me cr�e des doublons
    Par apprenti46 dans le forum VBA Access
    R�ponses: 2
    Dernier message: 29/09/2008, 13h58

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