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

etincelle01 10 Messages postés dimanche 4 octobre 2009Date d'inscription 27 mai 2010 Dernière intervention - 14 mai 2010 à 00:52 - Dernière réponse : etincelle01 10 Messages postés dimanche 4 octobre 2009Date d'inscription 27 mai 2010 Dernière intervention
- 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
devil_may_cry 195 Messages postés dimanche 18 mars 2007Date d'inscription 11 juillet 2015 Dernière intervention - 14 mai 2010 à 04:14
3
Merci
tu pourra omettre la boucle et utiliser juste mysql_result($result,0,'champs1');
mysql_result($result,0,'champs2');

Merci devil_may_cry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de devil_may_cry
uaip 1470 Messages postés mardi 20 février 2007Date d'inscription 7 février 2011 Dernière intervention - 14 mai 2010 à 02:37
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
uaip 1470 Messages postés mardi 20 février 2007Date d'inscription 7 février 2011 Dernière intervention - 14 mai 2010 à 02:56
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
etincelle01 10 Messages postés dimanche 4 octobre 2009Date d'inscription 27 mai 2010 Dernière intervention - 18 mai 2010 à 19:15
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
devil_may_cry 195 Messages postés dimanche 18 mars 2007Date d'inscription 11 juillet 2015 Dernière intervention - 19 mai 2010 à 02:58
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
etincelle01 10 Messages postés dimanche 4 octobre 2009Date d'inscription 27 mai 2010 Dernière intervention - 19 mai 2010 à 12:47
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
devil_may_cry 195 Messages postés dimanche 18 mars 2007Date d'inscription 11 juillet 2015 Dernière intervention - 19 mai 2010 à 17:25
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
etincelle01 10 Messages postés dimanche 4 octobre 2009Date d'inscription 27 mai 2010 Dernière intervention - 20 mai 2010 à 00:41
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
devil_may_cry 195 Messages postés dimanche 18 mars 2007Date d'inscription 11 juillet 2015 Dernière intervention - 20 mai 2010 à 02:42
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
etincelle01 10 Messages postés dimanche 4 octobre 2009Date d'inscription 27 mai 2010 Dernière intervention - 21 mai 2010 à 19:23
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.