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 :

[SQL] Affectation d'une variable dans une boucle


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut [SQL] Affectation d'une variable dans une boucle
    Bonjour,
    Je voudrais utiliser une variable créé dans ma boucle précédente pour affecter les données de ma table à de nouvelles variables.
    TestAffectation.php
    ma variable $AffectVariable est exactementce que je veux écrire à ce moment-là.
    QUand je le fais à la main, en recopiant sa valeur, c'est bon, mais pas dans ma programmation. Il y a quelque chose que je n'ai pas compris.
    Merci pour votre aide.

  2. #2
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Sans un bout de code cela n'est pas simple de te répondre.
    Voici quand meme le principe.

    Tu initialises une variable juste avant la boucle que tu laisses vide comme ceci :
    Dans ta boucle quand tu tiens ta valeur, tu la lui assignes et ensuite tu peux la réutiliser...
    Car si tu intialises une variable dans une boucle, elle n'est valabale que pour la boucle


    @+
    cadou

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut Affectation d'une variable dans une boucle
    Je joins mon code, ce sera évidemment plus parlant.
    Milles excuses cadoudal56
    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
    <?php 
    //Affectation de la donnéee à une variable
    	include ("connexion.php");
    //Creation de la table
    mysql_query ('CREATE TABLE `fiche` (
      `FicID` smallint(6) NOT NULL auto_increment,
      `Fic_Nom` varchar(30) collate latin1_general_ci NOT NULL,
      `Fic_Ville` varchar(30) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`FicID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1') ;
     
    //-- 
    //-- Contenu de la table `fiche`
    //-- 
     
    mysql_query ("INSERT INTO `fiche` (`FicID`, `Fic_Nom`, `Fic_Ville`) VALUES 
    (1, 'DUPONT', 'PARIS'),
    (2, 'FRIGIDAIRE', 'LILLE'),
    (3, 'MOBYLETTE', 'ST ETIENNE'),
    (4, 'POUBELLE', 'NICE')");
     
     
    // Affectation des données de la fiche 2 à la variable nommée dans la boucle 
    $FicID = 2;
    $ma_table = 'fiche';
    // 1ère boucle pour récuperer le nom des colonnes de ma table
    // Recherche des colonnes de ma table
    $mon_tableau = mysql_query("SHOW COLUMNS FROM ".$ma_table);
    // Si des colonnes sont trouvés (ouf, je ne me suis pas trompé de table !)
    	if (mysql_num_rows($mon_tableau) > 0) {
    //	$NbChamps = mysql_num_rows($mon_tableau);
    	   while ($row = mysql_fetch_assoc($mon_tableau)) {
    // j'extraie le nom du champ
    			$Champ = $row[Field];
    // je les concatène pour avoir une variable unique que j'introduis dans ma boucle ci-dessous.
    			$AffectVariable = $AffectVariable.'$'.$Champ.' = $donnees['.$Champ.'];';
    		} 
    	}
     
    //2ème boucle pour affecter les valeurs de chaque champ dans une variable qui porte le même nom que le champ
    //	Recherche de données pour un ID 
    	$requete ='SELECT * FROM '.$ma_table.' WHERE FicID ='.$FicID;
    	$retour = mysql_query($requete);
    	while($donnees = mysql_fetch_array($retour))
    		{
    // Affectation à un nom de variable avec la valeur trouvée dans le fichier
    //avec cette ligne, cela ne marche pas: où est mon erreur de syntaxe ou mon incompréhension de la programmation php ?
    		echo $AffectVariable;
    //avec cette ligne, bien évidemment, cela fonctionne !
    //		$FicID = $donnees[FicID];$Fic_Nom = $donnees[Fic_Nom];$Fic_Ville = $donnees[Fic_Ville];
    		} 
     
    //Vérification
    	echo '<br />Nom ='.$Fic_Nom.'<br />'; // Nom =FRIGIDAIRE
    	echo 'Ville ='.$Fic_Ville; 		//Fic_Ville =LILLE
    ?>

  4. #4
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    $donnes['FicID']

    Il faut quoter les noms des champs topé en SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $AffectVariable = $AffectVariable.'$'.$Champ.' = $donnees["'.$Champ.'"];'
    Devrait marcher mieux

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Merci Linio, j'ai essayé, mais ce n'est pas là le 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php 
    //Affectation de la donnéee à une variable
    	include ("connexion.php");
    //Creation de la table
    mysql_query ('CREATE TABLE fiche (
      FicID smallint(6) NOT NULL auto_increment,
      Fic_Nom varchar(30) collate latin1_general_ci NOT NULL,
      Fic_Ville varchar(30) collate latin1_general_ci NOT NULL,
      PRIMARY KEY (FicID)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1') ;
     
    //-- 
    //-- Contenu de la table fiche
    //-- 
     
    mysql_query ("INSERT INTO fiche (FicID, Fic_Nom, Fic_Ville) VALUES 
    (1, 'DUPONT', 'PARIS'),
    (2, 'FRIGIDAIRE', 'LILLE'),
    (3, 'MOBYLETTE', 'ST ETIENNE'),
    (4, 'POUBELLE', 'NICE')");
     
     
    // Affectation des données de la fiche 2 à la variable nommée dans la boucle 
    $FicID = 2;
    $ma_table = 'fiche';
    // 1ère boucle pour récuperer le nom des colonnes de ma table
    // Recherche des colonnes de ma table
    $mon_tableau = mysql_query("SHOW COLUMNS FROM ".$ma_table);
    // Si des colonnes sont trouvés (ouf, je ne me suis pas trompé de table !)
    	if (mysql_num_rows($mon_tableau) > 0) {
    //	$NbChamps = mysql_num_rows($mon_tableau);
    	   while ($row = mysql_fetch_assoc($mon_tableau)) {
    // j'extraie le nom du champ
    			$Champ = $row[Field];
    // je les concatène pour avoir une variable unique que j'introduis dans ma boucle ci-dessous.
    			$AffectVariable = $AffectVariable.'$'.$Champ.' = $donnees['.$Champ.'];';
    		} 
    	}
     
    //2ème boucle pour affecter les valeurs de chaque champ dans une variable qui porte le même nom que le champ
    //	Recherche de données pour un ID 
    	$requete ='SELECT * FROM '.$ma_table.' WHERE FicID ='.$FicID;
    	$retour = mysql_query($requete);
    	while($donnees = mysql_fetch_array($retour))
    		{
    // Affectation à un nom de variable avec la valeur trouvée dans le fichier
    //avec cette ligne, cela ne marche pas: où est mon erreur de syntaxe ou mon incompréhension de la programmation php ?
    		echo $AffectVariable;
    //avec cette ligne, bien évidemment, cela fonctionne !
    //		$FicID = $donnees[FicID];$Fic_Nom = $donnees[Fic_Nom];$Fic_Ville = $donnees[Fic_Ville];
    		} 
     
    //Vérification
    	echo '<br />Nom ='.$Fic_Nom.'<br />'; // Nom =FRIGIDAIRE
    	echo 'Ville ='.$Fic_Ville; 		//Fic_Ville =LILLE
    ?>

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    C'est dommage, Linio.

    Je serai plutôt tenter de dire que j'ai une erreur dans ma 2ème boucle au niveau de echo $AffectVariable;
    Je pense que je n'utilise pas cette variable comme il devrait.

    Je ne veux pas l'afficher à l'écran, je veux l'écrire dans mon programme.
    Bref, qu'il fasse le travail à ma place...
    Merci et bon appétit

  7. #7
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Il faut que tu utilises la fonction eval et non pas echo.

    Heu et merci (MacDo beurk)

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Il vous manque une interprétation de votre variable $AffectVariable (fonction eval) mais personnellement je ne vois pas l'intérêt de cette approche : vous pouvez très bien faire tout cela de manière générique (extract, itération avec mysql_num_fields ou mysql_fetch_field, ...) sans passer par une requête SHOW COLUMNS.

    PS : l'itération while est inutile sur le résultat de la requête SELECT de par la structure de votre table et la requête effectuée : vous n'aurez qu'un seul et unique résultat (voir aucun).

  9. #9
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Je suis plutôt d'accord avec julp, le code me parait simplifiable (à moins que tu n'aies un réel intérêt à stocker le traitement, mais là c'est pas trivial)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Merci de votre aide combien précieuse.
    Le réponse de Linio est la solution à mon problème.
    Merci à julp. Je vais en effet simplifié le code avec ta proposition

    A bientôt

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2009, 14h21
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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