array associatif nom champ + valeur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : array associatif nom champ + valeur

par Berzemus » 04 févr. 2008, 15:08

Oui, tu récupères un résultat, avec plusieurs colonnes (un tableau associatif si tu veux).

En fait, pour faire simple (tu compliques légèrement), je crois que ce que tu veux obtenir revient tout simplement à ceci;
$user = mysql_fetch_assoc($result));
 
Alors, tout as tout simplement un tablea associatif $user, avec des clés et des valeurs comme dans ta db. Et vu qu'il n'y a qu'un résultat, pas besoin de faire une boucle. :D

par Invité » 04 févr. 2008, 14:59

en fait je sais faire cette opération quand les données viennent d'un formulaire :
foreach (array_keys($_POST) as $key) 
{ 
	$$key = $_POST[$key];      
	
	print "$key => ${$key}<br />";	 //affiche nomChampForm => valeurChampForm
}
Comment appliquer ce principe à des champs et valeurs venant d'une bdd?

par Invité » 04 févr. 2008, 14:52

oui je vois effectivement. c'est normal qu'il n'y ait qu'un élément dans mon tableau car je boucle sur un seul enregistrement. c'est ça?

Dans ce cas quelle est la bonne méthode pour créer un tableau associatif avec:
- en clés, les noms des champs dans la table
- en valeurs, les valeurs des champs pour l'enregistrement concerné

par Berzemus » 04 févr. 2008, 11:03

Alors, si tu lis bien:
while ($row = mysql_fetch_array($result))
{
    $field = mysql_field_name($result, $i) ;
    $user[$field] = $row[$field];
    $i++;
}
Tu prends la première ligne de résultat (en plus, y'en a qu'une)
Puis, du demandes le nom du premier champ, Ok,
Puis, tu mets la valeur du premier champ dans le tableau.

Puis, c'est fini :D

Quand on parle de tableaux, on parle de colonnes et de rangées. Ici, tu prends une rangée, et tu ne traites que de la première colonne. Relis-bien la doc sql, et essaie ceci pour mieux comprendre ce qui se passe:
while ($row = mysql_fetch_array($result))
{
    print_r($row);
}

par Invité » 03 févr. 2008, 19:43

désolé si je suis pas très clair, j'essaye.

Pour résumer tout ça, je cherche simplement à afficher, pour un enregistrement, le nom du champ t sa valeur.

Si j'ai une table user contenant des utilisateurs (nom, prénom, email), comment faire pour afficher:
nom : dubois
prenom : jérôme
email: [email protected]

Sachant que dans l'affichage, "nom", "prenom" et "email" sont les noms des champs dans la table, affichés dynamiquement et pas codés en dur dans la page.

par Invité » 03 févr. 2008, 19:35

c'est un simpe select avec un paramètre id qui retourne un enregistrement. c'est bien le but rechreché et ça fonctionne parfaitement.

Mon problème est plutôt de lister tous les champs de la table pour cet enregistrement, en y associant la valeur pour chaque champ.

Actuellement dans mon tableau, je n'ai que idFiche qui es l'id le l'enregistrement. Il me manque donc + de 15 autres champs et leur valeur (nom, prénom,email...)

Ma question est: pourquoi mon code n'affiche t-il que le premier nom de champ de l'enregistrement + sa valeur, pas les autres noms de champs et leur valeur?

par Berzemus » 03 févr. 2008, 19:21

Salut ,

On peut quand même voir ta requête sql ?

Parce qu'une si requête est un "........code pour sélectionner un seul enregistrement......", je trouve normal qu'il ne retourne qu'un seul enregistrement alors ^-^

par Invité » 03 févr. 2008, 19:02

Petite erreur: dans mon post j'ai oublié d'initialiser l'incrémentation de $i en faisant
$i = 0;
avant la boucle while.
Mais ce la figure bien dans le code que j'ai testé et qui ne me donne pas le résultat attendu;

array associatif nom champ + valeur

par Invité » 03 févr. 2008, 18:59

Bonjour à tous,

J'effectue une requete mysql pour récupérer un enregistrement dans une table.
Je voudrais créer un tabeau associatif $user dont la clé est le nom du champ dans la table et dont la valeur est la valeur du champ pour cet enregistrement. Du type:
$user = array ("nomChampTable" =>"valeurChamp");
Avec les résultats de ma requete, je crée mon tableau user de la façon suivante:
$query  = "........code pour sélectionner un seul enregistrement......";
$result = mysql_query($query);

while ($row = mysql_fetch_array($result))
{
	$field = mysql_field_name($result, $i) ;
	$user[$field] = $row[$field];
	$i++;
}
un var_dum sur user me donne:
array(1) {
  ["idfiche"]=> string(1) "1"
}
J'ai + de 15 champs dans ma table, il n'y a que le 1er et sa valeur qui sont affichés, pas les autres.
Voyez vous ce qu'il manque?
Merci pour vos réponses.