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

Résolu
etincelle01 Messages postés 10 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 27 mai 2010 - 14 mai 2010 à 00:52
etincelle01 Messages postés 10 Date d'inscription dimanche 4 octobre 2009 Statut Membre 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?

10 réponses

devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 mai 2010 à 04:14
tu pourra omettre la boucle et utiliser juste mysql_result($result,0,'champs1');
mysql_result($result,0,'champs2');
3
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 mai 2010 à 02:56
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 !
1
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 mai 2010 à 02:37
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 !
0
etincelle01 Messages postés 10 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 19:15
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
19 mai 2010 à 02:58
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
0
etincelle01 Messages postés 10 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 27 mai 2010
19 mai 2010 à 12:47
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.
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
19 mai 2010 à 17:25
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
0
etincelle01 Messages postés 10 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 27 mai 2010
20 mai 2010 à 00:41
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 )
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
20 mai 2010 à 02:42
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
0
etincelle01 Messages postés 10 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 27 mai 2010
21 mai 2010 à 19:23
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.
0
Rejoignez-nous