Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2007, 11h20   #1
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations personnelles :
Âge : 56

Informations forums :
Inscription : avril 2006
Messages : 5
Points : 1
Points : 1
Envoyer un message via MSN à monlam
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.
monlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 11h34   #2
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
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
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 11h47   #3
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations personnelles :
Âge : 56

Informations forums :
Inscription : avril 2006
Messages : 5
Points : 1
Points : 1
Envoyer un message via MSN à monlam
Par défaut Affectation d'une variable dans une boucle

Je joins mon code, ce sera évidemment plus parlant.
Milles excuses cadoudal56
Code :
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
?>
monlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 12h25   #4
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
$donnes['FicID']

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

Code :
$AffectVariable = $AffectVariable.'$'.$Champ.' = $donnees["'.$Champ.'"];'
Devrait marcher mieux
__________________
Linio
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 12h32   #5
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations personnelles :
Âge : 56

Informations forums :
Inscription : avril 2006
Messages : 5
Points : 1
Points : 1
Envoyer un message via MSN à monlam
Merci Linio, j'ai essayé, mais ce n'est pas là le problème
Code :
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
?>
monlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 12h42   #6
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations personnelles :
Âge : 56

Informations forums :
Inscription : avril 2006
Messages : 5
Points : 1
Points : 1
Envoyer un message via MSN à monlam
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
monlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 13h35   #7
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
Il faut que tu utilises la fonction eval et non pas echo.

Heu et merci (MacDo beurk)
__________________
Linio
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 13h35   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 13h44   #9
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
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)
__________________
Linio
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 14h41   #10
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations personnelles :
Âge : 56

Informations forums :
Inscription : avril 2006
Messages : 5
Points : 1
Points : 1
Envoyer un message via MSN à monlam
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
monlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web