[RESOLU] lire variables d'un tableau mysql_fetch_array

Eléphant du PHP | 67 Messages

19 janv. 2013, 14:07

Bonjour à tous ...
Quelle syntaxe dois-je utiliser pour extraire les données du tableau ci-dessous ?
<?php
$requete2 = "SELECT * FROM tblFicheCons INNER JOIN tblConsultants ON tblConsultants.Numéro=tblFicheCons.ConsultantNr
WHERE tblFicheCons.FicheNr = $ligne[NrFiche]
ORDER BY tblFicheCons.Position
";
$resultat2 = mysql_db_query("employability", $requete2) or die ('Erreur '.$requete.' '.mysql_error());

if (mysql_num_rows($resultat2) != 0) {
while ($ligne2 = mysql_fetch_array($resultat2))
{
echo "$ligne2[Nom_Cons][0]";
}
}

?>
J'ai 4 variables par 'ligne' du tableau : $ligne2[Nom_Cons] $ligne2[Pr_Cons] $ligne2[TitreFR] $ligne2[FonctionFR]
... et un maximum de 10 lignes ... et des zones <Input> (au nombre de 40) qui attendent que je les remplissent avec les variables extraites.
l' echo "$ligne2[Nom_Cons][0]"; ci dessus est juste pour voir ce que ça donne
J'ai essayé plusieurs solutions mais je ne m'en sort pas ... merci d'avance pour votre petit coup de pouce.
Modifié en dernier par philspain le 19 janv. 2013, 15:15, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 janv. 2013, 15:06

salut,


je te conseil :
- d'utiliser la concaténation : http://www.lephpfacile.com/cours/5-conc ... ux-chaines
- de revoir l'utilisation de chaine de caractère (les index, que tu utilise, des tableaux fournit par mysql_fetch_array en sont). et utiliser les ' en délimiteur plutot que " (cela te permettera aussi d'avoir des attributs html "correct")
- remplacer l'utilisation de l'extension mysql par l'extension mysqli (l'extension mysql est dépréciée et sera supprimée un jour).
<?php
$affich2 = '<font color="#000000"> '.$ligne2['Nom_Cons'] .' '.$ligne2['Pr_Cons'].', '.$ligne2['TitreFR'].' - '.$ligne2['FonctionFR'].'</font><br> ';

echo $ligne2['Nom_Cons'];

Il est totalement inutile (et contre performant) de mettre une variable dans une chaîne de caractère pour l'afficher ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 67 Messages

19 janv. 2013, 15:35

Merci Moogli, pour tes toujours bons conseils.

Mais en fait la ligne
$affich2 = '<font color="#000000"> '.$ligne2['Nom_Cons'] .' '.$ligne2['Pr_Cons'].', '.$ligne2['TitreFR'].' - '.$ligne2['FonctionFR'].'</font><br> ';
ne me sert à rien, si ce n'est à vérifier ce qu'il y a dans le tableau, mais je ne l'exploiterai pas.

Je voudrais juste pouvoir extraire chaque donnée du tableau séparément et la mettre sous forme de variable pour l'exploiter autre part et c'est là que je coince. Je voudrais pouvoir extraire $ligne2[Nom_Cons] de ma ligne 0 et la mettre en variable, ensuite la même chose pour $ligne2[Nom_Cons] de ma ligne 1 et ainsi de suite jusqu'à la ligne 9. Même opération ensuite pour $ligne2[Pr_Cons] ... etc ...

Comment puis-je faire ?
J'ai essayé différentes syntaxe sur echo $ligne2['Nom_Cons'][0]; avec quotes, sans quotes mais ça ne fonctionne pas
(echo à la place de $var1=$ligne2['Nom_Cons'][0]; ) pour voir ce que ça donne ...

Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 janv. 2013, 15:39

<?php
while ($ligne2 = mysql_fetch_array($resultat2))
{
$tab[] = $ligne2;
}
tu auras tous les résultats dans $tab, dans l'ordre fournit par la requête.

avec PDO tu peux faire cela en une seule ligne avec la méthoe fetchAll() ;) (un autre avantage pour changer).



@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 67 Messages

19 janv. 2013, 16:26

Bon ... J'ai ceci comme code :
<?php
$requete2 = "SELECT * FROM tblFicheCons INNER JOIN tblConsultants ON tblConsultants.Numéro=tblFicheCons.ConsultantNr
WHERE tblFicheCons.FicheNr = $ligne[NrFiche]
ORDER BY tblFicheCons.Position
";
$resultat2 = mysql_db_query("employability", $requete2) or die ('Erreur '.$requete.' '.mysql_error());

while ($ligne2 = mysql_fetch_array($resultat2))
{
$tab[] = $ligne2;
}

?>
Comment je fait maintenant pour mettre les données de ce tableau dans des variables séparées ?
Quand je fais un echo $tab, je n'ai comme affichage que le terme array ...

<?php
while ($ligne2 = mysql_fetch_array($resultat2))
{
$tab[] = $ligne2;
}
tu auras tous les résultats dans $tab, dans l'ordre fournit par la requête.

avec PDO tu peux faire cela en une seule ligne avec la méthoe fetchAll() ;) (un autre avantage pour changer).



@+

Eléphant du PHP | 343 Messages

19 janv. 2013, 17:52

Utilise print_r pour un tableau ;)
Développeur web

Eléphant du PHP | 67 Messages

19 janv. 2013, 18:08

Utilise print_r pour un tableau ;)
Mais comment je fais pour mettre une donnée de ce tableau dans une variable ??????

Merci

Eléphant du PHP | 67 Messages

19 janv. 2013, 18:28

Bon ... je suis désolé mais je suis à peu près nul et c'est la raison pour laquelle je pose ma question sur un forum qui s'appelle PHP débutant !
Mon code actuel:
$requete2 = "SELECT * FROM tblFicheCons INNER JOIN tblConsultants ON tblConsultants.Numéro=tblFicheCons.ConsultantNr
WHERE tblFicheCons.FicheNr = $ligne[NrFiche]
ORDER BY tblFicheCons.Position
";
$resultat2 = mysql_db_query("employability", $requete2) or die ('Erreur '.$requete.' '.mysql_error());
while ($ligne2 = mysql_fetch_assoc($resultat2))
{
$affich2 = '<font color="#000000"> '.$ligne2['Nom_Cons'] .' '.$ligne2['Pr_Cons'].', '.$ligne2['TitreFR'].' - '.$ligne2['FonctionFR'].'</font><br> ';
echo $affich2 ;
}
echo '<br>';
// ici, mise en variable d'une des données du tableau

?>

Le tableau existe bien puisque la ligne echo $affich2 me renvoie comme résultat 4 lignes et 4 colonnes
Colonne 1 - colonne 2 - colonne 3 - colonne 4

Vereecke Guy, Honours degree in Sociology, MBA (Chicago) - Managing Partner
Goffaux Nicolas, Commercial Engineer, MBA (Vlerick) - Consultant
Malak Muriel, Commercial Engineer - Partner
Tizard Alison, BSc Honours Degree in Linguistic and International Studies + Ecole Supérieure des Cadres Traducteurs Interprètes, Université de Toulouse - Partner

Comment je fais pour mettre dans une (et une seule) variable par exemple la donnée de la deuxième ligne, troisième colonne ???? => Commercial Engineer, MBA (Vlerick)

Je ne demande pas plus ...

Un grand merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 janv. 2013, 20:59

Utilise print_r pour un tableau ;)
Mais comment je fais pour mettre une donnée de ce tableau dans une variable ??????

Merci
print_r sert a afficher ça n'a pas l'air d'être ce qui est demandé ici.

@philspain : tu a demandé de tout récupérer dans une variable c'est ce que fait le 3 lignes que je t'ai donné.

maintenant si tu ne souhaite qu'une seule info il faut écrire ta requête SQL dans ce sens (avec une clause where).

Pour récupérer une infos c'est une affectation donc $variable = 'ce que tu veux'.

mysql_fetch_array() fournit un tableau indexé par les noms des colonnes.
donc un select nom, prenom from utilisateur, va fournir, pour chaque ligne retournée, un tableau avec un index nom, et un index prenom (avec ton code se serait $ligne2['nom'], $ligne2['prenom'] pour les utiliser).

Si tu explique ce que tu souhaite au total cela serait plus facile.
suivant ce que tu souhaite faire la réponse est différente.

tu est effectivement sur le forum phpdebutant c'est pourquoi je ne t'ai pas fournit un simple lien vers un tuto, mais des explications avec.

Tu peux aussi nous indiquer ce que tu ne sais pas faire, affectation, test ?


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 343 Messages

19 janv. 2013, 21:45

J'ai donné le print_r pour le debug et vu qu'il faisait un echo d'un tableau, j'ai pensé que ça suffirait pour l'aider. Après vu que je ne comprends pas trop le problème, dur d'aider.
Développeur web

Eléphant du PHP | 67 Messages

20 janv. 2013, 11:40

Salut les gars ... merci pour vos réponses.
Je me suis probablement mal exprimé ... et en plus je suis un peu à cran en ce moment (problèmes familiaux) ... désolé.

En fait, mon query va me chercher des données dans des tables liées et me donne comme résultat un tableau que je visualise virtuellement comme une table excel : 4 colonnes (toujours) et maximum 10 lignes.
Mes 4 colonnes ont pour noms : $ligne2['Nom_Cons'] / $ligne2['Pr_Cons'] / $ligne2['TitreFR'] et $ligne2['FonctionFR']
Mes 10 lignes ont pout noms : 0 / 1 / 2 / ... 9.
Ce me fait donc 40 'données' différentes (4 colonnes X 10 lignes)
Plus loin, j'ai 40 zones <input type="text"> que je voudrais remplir avec, pour chacune, une des données de ce tableau, (pas tout le tableau).
Je voudrais donc pouvoir mettre dans ma zone 1 : $ligne2['Nom_Cons'][0] (colonne 1, ligne 0) / Dans ma zone 2 : $ligne2['Nom_Cons'][1] (colonne 1, ligne 1) / Dans ma zone 3 : $ligne2['Nom_Cons'][2] (colonne 1, ligne 3) ... et ainsi de suite, pour mes 40 zones à remplir ...

C'est destiné à un formulaire d'inscription pré-rempli afin que l'utilisateur ne doive pas tout retaper lors d'une modification de ses coordonnées.
Je m'en sort bien pour les données provenant directement qu'un query et qui ne sont pas sous forme de tableau mais ici, mon problème est de savoir quelle syntaxe utiliser pour dire "Je veux afficher la donnée se trouvant (par exemple) dans la cellule $ligne2['TitreFR'] (troisième colonne) de la de la deuxième ligne [1]". Dans l'exemple du tableau affiché plus haut dans ce post, je devrait donc avoir 'Commercial Engineer, MBA (Vlerick)' comme résultat ... Dans la cas de l'exemple, le tableau n'a pas 10 lignes mais 4 ... mais ceci n'a pas d'importance, je crois.

Merci à vous

Eléphant du PHP | 67 Messages

20 janv. 2013, 14:10

J'ai trouvé !!!!

Je fait une concaténation du nom de variable dans la boucle :
$i=1;
while ($ligne2 = mysql_fetch_assoc($resultat2))
{
$nom = $ligne2['Nom_Cons'];
${'affnom'.$i} = "$nom";

$prenom = $ligne2['Pr_cons'];
${'affprenom'.$i} = "$prenom";

$titre = $ligne2['TitreFR'];
${'afftitre'.$i} = "$titre";

$fonction = $ligne2['FonctionFR'];
${'afffonction'.$i} = "$fonction";

$i=$i+1;
}
Ce n'est peut-être pas très orthodoxe comme manière de travailler mais ça marche ... j'ai mes 40 variables que je peux exploiter ... $affnom1 - $affnom2 - etc ..

Merci à tous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 janv. 2013, 15:42

a partir du 1er code que je t'ai fournis (le while a 3 lignes) tu peux utiliser le tableau généré simplement par l'index.
L'index 0 c'est la 1ere ligne et ainsi de suite.

donc avec ton code
<?php
while ($ligne2 = mysql_fetch_assoc($resultat2))
{
    $tab[] = $ligne2;
}

// le nom de la deuxième ligne 
$nom2emeLigne = $tab[1]['Nom_Cons'];
// etc etc
?>
cela te permet d’accéder rapidement et simplement à la ligne que tu souhaite (la numération commence à zéro ;) )


est tu certain que la table n'auras pas plus de 10 lignes ?

Pour l'être tu peux ajouter la clause limit 10 à la fin de la requête.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 67 Messages

20 janv. 2013, 16:01

Merci Moogli,

J'avais pas trop capté la solution, mais il semblerait que le résultat soir le même.

Merci aussi pour l'info LIMIT ...

Phil