Récupérer les valeurs de la première colonne d'une table dans un tableau [Résolu]

Messages postés
10
Date d'inscription
dimanche 4 octobre 2009
Dernière intervention
27 mai 2010
- - Dernière réponse : etincelle01
Messages postés
10
Date d'inscription
dimanche 4 octobre 2009
Dernière intervention
27 mai 2010
- 21 mai 2010 à 19:23
Bonsoir,

Dans PHP, il y a la fonction mysql_fetch_array() qui place les enregistrements résultats d'une requête dans un tableau.
Mais il n'y a pas de fonction qui récupère les colonnes résultats de la requête.
J'aimerais récupérer les éléments de la première colonne de ma table dans un tableau (array) mais je suis bloquée.
J'ai écrit le code suivant:
$select =  'SELECT * from table';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
       
    while($row = mysql_fetch_array($result)) {
?>

  <tr> 
 
   <td> <?php echo $row["identifiant"] ?> </td>
    <td><?php echo $row["Designation"] ?></td>
  <td><?php echo $row["Prix"] ?></td>
    </tr>
 
<?php }
 

Après j'ai compté le nombre de lignes et j'ai mis ce nombre dans la variable $total.
$total  = mysql_num_rows($result);

L'idée m'est venue de faire une boucle mais je sais pas trop comment faire.
Pouvez-vous m'aider?
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
195
Date d'inscription
dimanche 18 mars 2007
Dernière intervention
11 juillet 2015
3
Merci
tu pourra omettre la boucle et utiliser juste mysql_result($result,0,'champs1');
mysql_result($result,0,'champs2');

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de devil_may_cry
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Dernière intervention
7 février 2011
0
Merci
Salut,
Le problème ne vient pas de php.
Avant d'exécuter des requètes SQL, ça serait chouette d'apprendre le SQL.
SELECT * FROM ... WHERE ... récupère toutes les "colonnes" (ou domaines) de ta table.
Si ta table contient par exemple les colonnes prout, pipi, caca, pour récupérer uniquement la première colonne, un bête SELECT prout FROM ... WHERE ... suffit.
Et si jamais tu souhaites récupérer toutes tes colonnes via SQL mais pouvoir les traiter séparément en php, alors $row["colonne"] est là pour toi (dans mon exemple $row["prout"]).

Cordialement, uaip.
________________________________________________________________________
Tu es musicien, dessinateur, écrivain, poète ou fan de cinéma et tu cherches à te faire connaître ?
Rejoins notre communauté d'artistes sur winky !
Commenter la réponse de uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Dernière intervention
7 février 2011
0
Merci
Au temps pour moi, j'avais lu ton code en diagonale.
Alors du coup, la seule solution que je vois est une boucle, comme tu as fait, mais je pense qu'il y a bien plus élégant !

Cordialement, uaip.
________________________________________________________________________
Tu es musicien, dessinateur, écrivain, poète ou fan de cinéma et tu cherches à te faire connaître ?
Rejoins notre communauté d'artistes sur winky !
Commenter la réponse de uaip
Messages postés
10
Date d'inscription
dimanche 4 octobre 2009
Dernière intervention
27 mai 2010
0
Merci
Merci devil_may_cry, j'ai fait une boucle qui met les valeurs de la première colonne dans un tableau.
$tableau[]=array();
for ($i=0; $i<$total; $i++)
{
$tableau[] = mysql_result($result,$i);
 }


Maintenant, j'ai une table ligne_commande qui contient deux colonnes: num_commande et id_produit.
J'ai par exemple récupéré 3 valeurs dans mon tableau $tableau:
1,2 et 3.
J'aimerai enregistrer les valeurs de $tableau dans ma table ligne_commande comme suit:
num_commande | id_produit
1 | 1
1 | 2
1 | 3

Pouvez-vous m'aider?
Commenter la réponse de etincelle01
Messages postés
195
Date d'inscription
dimanche 18 mars 2007
Dernière intervention
11 juillet 2015
0
Merci
la solution que je vais te proposer ne marche que si num_comande n'est pas un index ou clef primaire de la table avec tu peut essayer ca
for ($i=0; $i<$total; $i++)
{
$tableau[] = mysql_result($result,$i);
}
//
for($i=1; $i<$total+1;$i++) {

//test si c'est la premiere fois
//qu'on entre dans la boucle
if($i==1) {
mysql_query("INSERT INTO ligne_commande(num_commande,id_produit) values ('','".$tableau[$i]."');
} else {

// on recuperer le dernier insert_id
$lastid = mysql_insert_id();
mysql_query("INSERT INTO ligne_commande(num_commande,id_produit) values ('".lastid."','".$tableau[$i]."');
}
}
voila j'espere que tu y trouvera une soluce
Commenter la réponse de devil_may_cry
Messages postés
10
Date d'inscription
dimanche 4 octobre 2009
Dernière intervention
27 mai 2010
0
Merci
En fait la table ligne_commande a deux clés primaires: num_commande et id_produit.
Et l'enregistrement se fait dans une autre page où id_produit est un nombre généré aléatoirement avec la fonction rand().
Mais je vais faire simple et supposer que je travaille sur la même page car c'est pas là mon problème.
Donc j'ai fait le code suivant:
$j=rand();
for ($i=0; $i<$total; $i++)
{
$tableau[] = mysql_result($result,$i);
} 

 for($k=1; $k< $total+1;$k++) {
 $select="INSERT INTO ligne_commande ( num_commande, id_produit) values ($j,'". $tableau[$k]."')";
 $result= mysql_query($select,$link)or die("Erreur lors de l'enregistrement");
}

Mais rien ne se produit.
J'ai donc modifié mon code pour tester:
$j=rand();
for ($i=0; $i<$total; $i++)
{
$tableau[] = mysql_result($result,$i);
} 

 for($k=1; $k< $total+1;$k++) {
 $select="INSERT INTO ligne_commande ( num_commande, id_produit) values ($j,$k)";
 $result = mysql_query($select,$link)or die("Erreur lors de l'enregistrement");
}

Mais pas d'enregistrement non plus et même l'erreur n'apparaît pas.
La requête est correcte, je l'ai testée.
Commenter la réponse de etincelle01
Messages postés
195
Date d'inscription
dimanche 18 mars 2007
Dernière intervention
11 juillet 2015
0
Merci
1 | 1
1 | 2
1 | 3
si tu veut enregistrer de cette maniere au moins num_commande ne peut etre une cle primaire tu vois bien qu'elle est en double ici puis qu'elle n'est pas unique mysql te signalera une erreur mais tu peut crrer un autre champs id qui sera lui la clef primaire et tester ce code
//
for($i=1; $i<$total+1;$i++) {

//test si c'est la premiere fois
//qu'on entre dans la boucle
if($i==1) {
mysql_query("INSERT INTO ligne_commande(num_commande,id_produit) values ('','".$tableau[$i]."');
} else {

// on recuperer le dernier insert_id
$lastid = mysql_insert_id();
mysql_query("INSERT INTO ligne_commande(num_commande,id_produit) values ('".lastid."','".$tableau[$i]."');
}
} 

sinon fait moi un print_r de ton tableau pour voir comment il est disposer
Commenter la réponse de devil_may_cry
Messages postés
10
Date d'inscription
dimanche 4 octobre 2009
Dernière intervention
27 mai 2010
0
Merci
Je crois qu'on peut avoir deux clés primaires: num_commande et id_produit, il suffit que chaque couple de ces valeurs soit unique.
La preuve: J'ai exécuté la requête sql directement sur phpMyAdmin et elle marche, j'ai répété les valeurs de num_commande et id_produit et il n'y a pas de problème car j'ai défini ces deux champs comme clés primaires au début.
Par contre il y a un problème au niveau du code car le print_r du tableau m'affiche:

Array ( [0] => Array ( ) [1] => 45HFFDU6776 )
Array ( [0] => Array ( ) [1] => 45HFFDU6776 [2] => 45JDK455 )
Array ( [0] => Array ( ) [1] => 45HFFDU6776 [2] => 45JDK455 [3] => 5465FF667 )
Commenter la réponse de etincelle01
Messages postés
195
Date d'inscription
dimanche 18 mars 2007
Dernière intervention
11 juillet 2015
0
Merci
El zodiacJe crois qu'on peut avoir deux clés primaires: num_commande et id_produit, il suffit que chaque couple de ces valeurs soit unique. j'ai pas dit le contraire mais avec cette disposiion que tu m'a faite 1 | 1
1 | 2
1 | 3 avec celle ci mysql n'acceptera pas puisque tu aura deux enregistrement avec num_commande qui est egale a 1 c'est ce que je veux dire et pour le tableau j'ai bien mis
for($i=1; $i<$total+1;$i++) je saute le array 0 teste le code que je t'ai fournit et si ne marche pas on verra d'autre soluce
Commenter la réponse de devil_may_cry
Messages postés
10
Date d'inscription
dimanche 4 octobre 2009
Dernière intervention
27 mai 2010
0
Merci
Je comprends ce que tu veux dire, mais les enregistrements 1 |1
1 |2
1 |3
sont un exemple.
Dans la première colonne, je met une variable $j=rand(), et dans la deuxième les valeurs de la première colonne d'une autre table qui sont de type chaîne de caractères donc on ne peut pas avoir la même valeur dans les deux champs.
En tout cas, j'ai trouvé un code plus simple pour enregistrer les valeurs de la première colonne de la table "table" dans la table "ligne_commande" sans passer par un tableau intermédiaire.
Voici le code:
$select="INSERT INTO ligne_commande ( num_commande, id_produit) SELECT $j, identifiant FROM table";	



Merci beaucoup pour ton aide.
Commenter la réponse de etincelle01

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.