Creation de variable dynamique

[Résolu]
Signaler
Messages postés
27
Date d'inscription
vendredi 25 août 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
Messages postés
27
Date d'inscription
vendredi 25 août 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
Bonjour,

Voici ma question :

J'utilise une fonction qui récupère des valeurs de champs dans une  bdd
J'ai fait en sorte que les variable soient créées dynamiquement  pour sauter
le travail d'affectation.

Ce qui me donne :

<?php
function lire_bdd($id)
{   $query mysql_query("SELECT id_fiche, nom, adresse, ville FROM fiche_contact WHERE id_fiche $id")
   or die("Erreur SQL ! pendant l'acces a la table fiche_contact ".mysql_error());
  
   $row = mysql_fetch_array($query);

    while(list($key,$val) = each($row))
    {
        // création dynamique de la variable
        ${$key} = $val;
       
    }
 
}
?>

- Si je fait "echo $ville;" pour tester, j'obtiens :
=> " Undefined variable: ville in /home/.... "
=> mais également  l'affichage de sa valeur !!!!

-J'en déduis que l'erreur PHP se justifie par la non-déclaration des variables
mais qu'elle s'affiche néanmoins car elle existe.....

J'ai ajouté "@" devant, ce qui ignore l'erreur, mais  est-ce une véritable solution ?
Comment rendre accessible ces variables en dehors de la boucle "while" ?

Merci,

.|Anselme&co|.
A voir également:

8 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Parce que faire un return dans la fonction ne règlera rien au problème... : il faudra retourner un tableau et elle n'aura jamais ses $nom, $ville etc.
Messages postés
83
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
14 décembre 2011
1
Salut,

J'ai pratiqué cette manière de faire, pour affecter mes variables ...et cela fonctionne très bien !
$this->$key = $value ... // je travaille avec une class

Il y a peut-être un souci avec l'utilisation de mysql_fetch_array,  cfr : http://fr.php.net/manual/fr/function.mysql-fetch-array.php ?

Conseil : affiche dans un echo les valeurs de $key 

   while(list($key,$val) = each($row))
    {
        // création dynamique de la variable

        ${$key} = $val; 
        
      // vérifications :          echo ( "key $key , $key " . $$key ) ;

    }

Tiens moi au courant
Messages postés
27
Date d'inscription
vendredi 25 août 2006
Statut
Membre
Dernière intervention
5 juin 2008

Merci,

Voici ce que j'obtiens sur ma page web :

"key 0 , 0 2key id_fiche , id_fiche 2key 1 , 1 Rabouankey nom , nom Rabouankey 2 , 2 Anselmekey prenom , prenom Anselme...........

"
et pas d'erreur php.....

Ceci etant fait, comment restituer ces variables à la sortie de cette fonction.?
(Par exemple, dans la continuité de mon code, je souhaite utiliser directement $adresse, $ville, $nom)

.|Anselme&co|.
Messages postés
337
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
4 janvier 2011

Bonjour

comment veux tu les utiliser ailleurs si tu n'as pas de return dans ta fonction?

-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
Messages postés
27
Date d'inscription
vendredi 25 août 2006
Statut
Membre
Dernière intervention
5 juin 2008

Pardon,

Comment formuler mon "return",
si tu préfère ?

Merci,




.|Anselme&co|.
Messages postés
337
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
4 janvier 2011

http://fr.php.net/manual/fr/function.return.php



-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

<?php
function lire_bdd($id)
{
    $aData = array();   $query mysql_query("SELECT id_fiche, nom, adresse, ville FROM fiche_contact WHERE id_fiche $id")
   or die("Erreur SQL ! pendant l'acces a la table fiche_contact ".mysql_error());
  
   $row = mysql_fetch_array($query, MYSQL_ASSOC);

    while(list($key,$val) = each($row))
    {
        // création dynamique de la variable
       $aData[$key] = $val;
       
    }
     return $aData;
}
extract(lire_bdd($id), <tt>EXTR_SKIP</tt>);
?>

Mais c'est moche comme façon de coder. Qu'est-ce qui t'empêche d'utiliser directement le tableau ?
Messages postés
27
Date d'inscription
vendredi 25 août 2006
Statut
Membre
Dernière intervention
5 juin 2008

Salut et merci à Malalam !

Toujours dans dans le même genre :
J'ai besoin de créer et initialiser des variables qui corespondent aux noms de colonnes d'une table de ma BDD
Je souhaite qu'elles existent mais que leur valeur soit nulle.

($nom; $prenom; $ville)

De la sorte je pourrai laisser mon code tel quel :

<?php
$form .= <label for="nom">Nom</label>
;
?>

sans afficher de message d'erreur  .

Voici où j'en suis :

<?php
//récupère tout les champs d'un table
$fields=mysql_list_fields('ma_bdd','ma_table');
// récupère le nombre de champs d'un table
$columns=mysql_num_fields($fields);

$aField = array();

for($i=0;$i<$columns;$i++)
{
// on affecte les valeurs du tableau
$aField[$i] = mysql_field_name($fields,$i);
}
?>

Oui, mais voilà,  je suis coinçé ...
Comment toucher mon but en partant de mon tableau $aField ?

Merci

.|Anselme&co|.