Rechercher : dans
Par :

[PHP] afficher avec une boucle un array

Dernière réponse le 3 déc 2008 à 20:04:22 okuni, le 29 nov 2008 à 15:47:32 
 Signaler ce message aux modérateurs

Bonjour,

Je suis en train de créer un panier virtuel pour mon site et j'aimerais savoir comment faire pour afficher tout le panier virtuel.
Il est construit dans un array en session comme suit :

/* Initialisation du panier */
    $_SESSION['panier'] = array();
    /* Subdivision du panier */
    $_SESSION['panier']['id_produit'] = array();
    $_SESSION['panier']['nom_produit'] = array();
    $_SESSION['panier']['quantite'] = array();
    $_SESSION['panier']['taille'] = array();
    $_SESSION['panier']['couleur'] = array();
    $_SESSION['panier']['prix'] = array();

Sur une page, j'aimerais donc afficher tout le contenu de l'array à l'aide d'un while sauf que je ne sais pas quoi mettre comme condition pour le while.

Quelqu'un sait m'aider? L'amour, c'est comme les spaghettis; quand c'est mou, c'est ­cuit. (proverbe belge)

Meilleures réponses pour « [PHP] afficher avec une boucle un array » dans :
[Webmaster] Afficher facilement le code php/xhtml de vos pages Voir Si vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
[PHP] Lister le contenu d'un répertoire VoirGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function...
[PHP] Comment afficher l'adresse IP d'un visiteur ? VoirPour afficher l'adresse IP d'un visiteur sur votre site, insérez ce code dans la zone où vous voulez qu'elle s'affiche.
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Parser du XML VoirIntroduction à XML PHP permet l'analyse syntaxique (parsage ou parsing en anglais) d'un document XML. Le langage XML (eXtensible Markup Language, traduisez Langage à balises extensibles) est un métalangage, c'est-à-dire un langage permettant de...

3

giheller, le 29 nov 2008 à 16:21:38

Bonjour,

voir si :
$limite = sizeof( $_SESSION['panier']);
ne donne pas le nombre de ligne. JL,  m'enfin c'est juste mon avis @+

Répondre à giheller

4

okuni, le 29 nov 2008 à 16:59:09

Sa ne marche pas tout a fait.
voici le résultat :
J'ai ajouter 2 séries d'articles
donc 2 fois le prix, la taille,...

Nom  	Prix unitaire  	Quantité  	Prix total  	Supprimer
test5 	50 € 		200 € 	Supprimer
test5 	50 € 		100 € 	Supprimer
	€ 		0 € 	Supprimer
	€ 		0 € 	Supprimer
	€ 		0 € 	Supprimer
	€ 		0 € 	Supprimer
	€ 		0 € 	Supprimer

Par observation, je dirais que la fonction que tu m'as donné compte le nombre de ligne seulement dans l'array panier et pas ceux des autres array qui sont dans l'array panier comme par exemple l'array id qui contient 2 id (qui s'affiche ici).


EDIT : après avoir chipotter un peu, j'ai réussi a adapter ta fonction.
merci pour ton aide :D L'amour, c'est comme les spaghettis; quand c'est mou, c'est ­cuit. (proverbe belge)

Répondre à okuni

5

giheller, le 29 nov 2008 à 17:02:24

Ok mais regarder alors côté foreach ($_SESSION['panier']
JL,  

Répondre à giheller

6

Alain_42, le 29 nov 2008 à 17:42:02

En complément:

/* Initialisation du panier */
    $_SESSION['panier'] = array();
    /* Subdivision du panier */
    $_SESSION['panier']['id_produit'] = array();
    $_SESSION['panier']['nom_produit'] = array();
    $_SESSION['panier']['quantite'] = array();
    $_SESSION['panier']['taille'] = array();
    $_SESSION['panier']['couleur'] = array();
    $_SESSION['panier']['prix'] = array();
	
	
	//il faut faire deux boucles inbriquees
	
	foreach($_SESSION['panier'] as $cle1=>$s_array){
		//tu parcours l'array $_SESSION['panier']
		echo "<br />Contenu de ".$cle1;"<br />";
		foreach($s_array as $cle2=>$value){
			// la tu parcours les sous array 
			echo $value."<br />";
		}
	}

Répondre à Alain_42

7

giheller, le 29 nov 2008 à 18:02:04

Oui Alain tout à fait JL,  

Répondre à giheller

8

okuni, le 29 nov 2008 à 19:19:33

Si j'utilise un foreach, je ne pourrais pas afficher plusieurs donnée différentes sur une même ligne.
Car mon code n'est pas prévu pour mettre un foreach.
voici mon code :

foreach ($_SESSION['panier'] as $key1=>$array)
		{
			foreach ($array as $key2=>$value)
			{
				?>
					<tr>
						<td><?php echo $_SESSION['panier'][$key2][$value];?></td>
						<td><?php echo $_SESSION['panier'][$key2][$value].' €';?></td>
						<td><?php echo '<input type="text" style="text-align:center;" class="formulaire" name="nombre_produit' . $numLine . '" value="'.$_SESSION['panier'][$key2][$value].'" />';?></td>
						<td><?php echo $_SESSION['panier'][$key2][$value] * $_SESSION['panier'][$key2][$value].' €';?></td>
						<td><a href="?page=commander&mod=<?php echo $_SESSION['panier'][$key2][$value];?>">Supprimer</a></td>
					</tr>
				<?php
				$prix = $_SESSION['panier'][$key2][$value] * $_SESSION['panier'][$key2][$value];
				$prixtot = $prix + $prixtot;
				
				//Incrémentation
				$numLine++;
			}
		}

Comme on peut le voir, j'ai un peu bidouiller pour l'utilisation du foreach mais sa ne marche pas, je m'embrouille avec les sessions et les foreach.
et forcément si je met partout la variable $variable, je n'aurai pas du tout ce qu'il me faut. L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge)

Répondre à okuni

9

Alain_42, le 29 nov 2008 à 20:20:37

Oui tu n'as pas saisi le principe du foreach

cette boucle parcours un array et à chaqu epassage associe l'index $cle avec la valeur $value

donc tu peux travailler dessu à chaque passage avec ces variables

dans ton cas si tu connais ce qu'il y a dans le sous array pas besoin de 2 ième boucle

<?php
$numLine=1;
foreach ($_SESSION['panier'] as $key1=>$array){
	//si tu sais ce qu'il y a dans ce sous array pas besoin de 2 ieme boucle
	$nom=$array[0];
	$prix_unit=$array[1];
	$quantite=$array[2];
	$prix_total=$array[3];
	$supprimer=$array[3];
			
			
			
				?>
					<tr>
						<td><?php echo $nom;?></td>
						<td><?php echo $prix_unit.' &euro;';?></td>
						<td><?php echo '<input type="text" style="text-align:center;" class="formulaire" name="nombre_produit' . $numLine . '" value="'.$quantite.'" />';?></td>
						<td><?php echo $prix_unit * $quantite.' €';?></td>
						<td><a href="?page=commander&mod=<?php echo $nom;?>">Supprimer</a></td>
					</tr>
				<?php
								
				//Incrémentation
				$numLine++;
}

Répondre à Alain_42

10

okuni, le 29 nov 2008 à 20:34:51

Très bizarre, voici mon résultat :

Nom  	Prix unitaire  	Quantité  	Prix total  	Supprimer
4 	€ 		0 € 	Supprimer
test5 	€ 		0 € 	Supprimer
4 	€ 		0 € 	Supprimer
s 	€ 		0 € 	Supprimer
s 	€ 		0 € 	Supprimer
50 	€ 		0 € 	Supprimer
L'amour, c'est comme les spaghettis; quand c'est mou, c'est ­cuit. (proverbe belge)

Répondre à okuni

11

Alain_42, le 30 nov 2008 à 10:09:14

Quel est le contenu des array ? nom, prix unit etc..

est ce que tu les remplis pour chaque index, même si vide ?

Répondre à Alain_42

13

okuni, le 30 nov 2008 à 11:25:32

Chaque array contient une donnée, aucun champ n'est vide et il y a 6 array différent dans l'array panier

$_SESSION['panier']['id_produit']
	    $_SESSION['panier']['nom_produit']
	    $_SESSION['panier']['quantite']
	    $_SESSION['panier']['taille']
	    $_SESSION['panier']['couleur']
	    $_SESSION['panier']['prix']

voila les 6 arrays différents. L'amour, c'est comme les spaghettis; quand c'est mou, c'est ­cuit. (proverbe belge)

Répondre à okuni

14

Alain_42, le 30 nov 2008 à 15:54:45

Oui mais au niveau en dessous ?

/* Initialisation du panier */
$_SESSION['panier'] = array();
/* Subdivision du panier */
$_SESSION['panier']['id_produit'] = array();
$_SESSION['panier']['nom_produit'] = array();
$_SESSION['panier']['quantite'] = array();
$_SESSION['panier']['taille'] = array();
$_SESSION['panier']['couleur'] = array();
$_SESSION['panier']['prix'] = array();


que contieneent les array() ainsi définis

Répondre à Alain_42

15

okuni, le 30 nov 2008 à 20:14:06

Je ne comprend pas très bien.
a ce moment dans le code, comme les array sont crééent, elle sont vide mais des que je rajoute une donnée (ajout d'un t-shirt) toute les array sont complétées en même temps. L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge)

Répondre à okuni

16

Alain_42, le 30 nov 2008 à 20:20:21

elle sont vide mais des que je rajoute une donnée (ajout d'un t-shirt) toute les array sont complétées en même temps.

comment écris tu dans ces array ? par un index numéroté de 0 à ...

ou par un index chaine par exemple prix_unitaire

Répondre à Alain_42

17

okuni, le 1 déc 2008 à 19:13:28

array_push($_SESSION['panier']['id_produit'],$select['id_pro­duit']);
            array_push($_SESSION['panier']['nom_produit'],$select['nom_p­roduit']);
            array_push($_SESSION['panier']['quantite'],$select['quantite­']);
            array_push($_SESSION['panier']['taille'],$select['taille']);­
            array_push($_SESSION['panier']['couleur'],$select['couleur']­);
            array_push($_SESSION['panier']['prix'],$select['prix']);

voila ce que j'ai pour chaque ajout.
Je crée l'array $select au début de page et tout les $select sont remplient. L'amour, c'est comme les spaghettis; quand c'est mou, c'est ­cuit. (proverbe belge)

Répondre à okuni

12

Alain_42, le 30 nov 2008 à 10:18:08

En complement:

$prix_total=$prix_unit*$quantite;
$_SESSION['panier']['id_produit'] = array("nom"=>"toto","prix_unit"=>"20","quantite"=>"5","prix_total"=>"".$prix_total."","supprimer"=>"supprimer");

//ce qui donnera pour l'affichage:

<?php
$numLine=1;
foreach ($_SESSION['panier'] as $key1=>$array){
	//si tu sais ce qu'il y a dans ce sous array pas besoin de 2 ieme boucle
	$nom=$array['nom'];
	$prix_unit=$array['prix_unit'];
	$quantite=$array['quantite'];
	$prix_total=$array['prix_total'];
	$supprimer=$array['supprimer'];
 //etc...

Répondre à Alain_42

18

Alain_42, le 3 déc 2008 à 18:55:13

Bonsoir,

Essayes comme ça, j'aienfin compris comment sont organisés tes array

<?php
/* Initialisation du panier */
    $_SESSION['panier'] = array();
    /* Subdivision du panier */
    $_SESSION['panier']['id_produit'] = array();
    $_SESSION['panier']['nom_produit'] = array();
    $_SESSION['panier']['quantite'] = array();
    $_SESSION['panier']['taille'] = array();
    $_SESSION['panier']['couleur'] = array();
    $_SESSION['panier']['prix'] = array();
	
	
	// en fait il faut afficher les sous array
	
	// taille des sous array: (on part du principe qu'ils ont tous la même longueur)
	
	$nb_index=sizeof($_SESSION['panier']['id_produit']); 
	
	//par une boucle on les parcours en affichant leur valeur
	for($i=0;$i<$nb_index;$i++){
?>
		<tr>
			<td><?php echo $_SESSION['panier']['nom_produit'][$i];?></td>
			<td><?php echo $_SESSION['panier']['prix'][$i].' €';?></td>
			<td><?php echo '<input type="text" style="text-align:center;" class="formulaire" name="nombre_produit'.$i. '" value="'.$_SESSION['panier']['quantite'][$i].'" />';?></td>
						<td><?php echo $_SESSION['panier']['prix'][$i] * $_SESSION['panier']['quantite'][$i].' €';?></td>
						<td><a href="?page=commander&mod=<?php echo $_SESSION['panier']['id_produit'][$i];?>">Supprimer</a></td>
					</tr>

	
	<?php
	
	}
	
	?>


@lain

Répondre à Alain_42

19

okuni, le 3 déc 2008 à 19:48:46

Ok merci :)
mais tu n'utilise pas foreach dans cet exemple. L'amour, c'est comme les spaghettis; quand c'est mou, c'est ­cuit. (proverbe belge)

Répondre à okuni

20

 Alain_42, le 3 déc 2008 à 20:04:22

Non ,

foreach est intéressant si on veut utiliser le nom de l'index dans le cas d'un array avec index non numerique (string)

et de plus dans ton cas foreach ne parcourrait qu'un seul des array, hors la on affiche un index de chacun des array à chaque boucle

Répondre à Alain_42