IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Manipulation de tableaux


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut Manipulation de tableaux
    salut tout le monde,

    je programme un panier en php et je bloque sur la fonction de suppression d'un article.

    j'ajoute un produit a mon panier, il s'affiche grace a une boucle for dans une <table>,
    mais quand je veux supprimer un des articles, il s'efface bien (nom et prix) mais la ligne
    dans laquelle etait inscrit l'article reste (vide) alors qu'elle devrait disparaitre.

    mon compteur d'articles continue de garder le nombre d'articles meme si ils sont effacés ...

    exemple: si j'ajoute 2 articles dans mon panier et que j'efface le premier,
    le deuxieme prend la place du premier (dans la <table> ) et laisse son ancienne ligne (la deuxieme
    donc) vide, mais elle n'est pas totalement supprimée et la ligne ou je compte les articles reste sur 2.

    en bref je n'arrive pas a manier les tableaux du type :

    $_SESSION['panier'][$n]=array ($codeprod,$nomprod,$prixprod)

    ce que je voudrais donc, ce serait de pouvoir supprimer l'index $n correspondant a l'article supprimé puis
    de remonter les autres index pour combler le vide

    la fonction unset() marche nickel pour vider le panier completement,
    mais je n'arrive pas a l'utiliser pour les index.

    j'ai essayé la fonction array_splice() mais elle fonctionne comme decrit plus haut.

    je met mon code a la suite au cas où (ce code fonctionne a moitié donc il y a surement des erreurs) :

    ajout-panier.php (qui cree un panier si ce n'est pas deja fait, puis ajoute l'article)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $codeprod = $_POST['codeprod']; 
    $nomprod = $_POST['nomprod']; 
    $prixprod = $_POST['prixprod']; 
     
    if(isset($_SESSION['n']))  
     $_SESSION['n']++; 
    else  
    { 
      $_SESSION['n']=0; 
      $_SESSION['panier'][]=array(); 
    } 
     
    $n=$_SESSION['n'];// n sera l'indice du produit dans le tableau 
    $_SESSION['panier'][$n]=array ($codeprod,$nomprod,$prixprod);
    // pour l'instant pas de probleme

    ---------------------------------------------------------

    panier.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    if ($_GET['retirer'] == "RETIRER" ) // le probleme est ici 
    {     
     
     array_splice($_SESSION['panier'], $_SESSION['n']); 
     
     unset($_GET['index']); 
     
    } 
     
    if ($_GET['vider'] == "VIDER" ) // ici ca marche nickel 
    { 
     unset($_SESSION['panier']); 
     $_SESSION['n']=0; 
    } 
     
    if(isset($_SESSION['n'])) 
    { 
    $n=$_SESSION['n']; 
     
    // sur cette ligne, le $n n'est pas actualisé, donc le nombres d'articles n'est pas mis a jour lors d'une suppression ... 
    echo '<td align=center><font size="5"><b>Articles dans le panier : '.$n.'</b></font></td></b>  <td><a href="panier.php?vider=VIDER">vider</a></td></tr>'; 
     
    for ($i=0; $i<$n; $i++) 
    { 
    $i=$i+1; 
    echo ' <tr> 
    <td align=center><font size="5">'.$_SESSION['panier'][$i][1].'</font></td>  
    <td align=right><font size="5">'.$_SESSION['panier'][$i][2].' &euro;</font></td> 
    <td align=center><font size="5">'.$_SESSION['panier'][$i][0].'</font></td>  
    <td><a href="panier.php?retirer=RETIRER&id_prod='.$_SESSION['panier'][$i][0].'&index='.$n.'">supprimer</a></td></tr>';  
    $i=$i-1; 
    } 
    }
    voila merci de m'avoir lu et merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    salut,
    2 solutions (enfin j'en vois que 2 pour l'instant ) soit tu passe par une gestion base de données et lors de la suppression tu réindex ta table soit tu passe par du récurssif en utilisan ta manière et donc en se baladant depuis la ligne 'supprimer' et en remonter tout les lignes d'un cran mais de mémoire il n'est pas possible de réindexer un élément de session.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut
    salut,

    d'abord merci pour ta reponse,
    ensuite en ce qui concerne ta premiere solution ce n'est pas cela que je desire faire, etant donné que ma base ne comprend pas de table panier et
    que je valide tout a la fin du processus de commande ...

    enfin pour l'autre methode, j'ai compris ce que tu veux dire mais je ne sais pas le faire , mais durant mes nombreuses heures de vagabondage sur le net a la recherche d'une solution, j'ai cru voir une fonction "array_values" qui servirait apparement a re-indexer les tableaux mais je n'en sais pas plus, et encore moins sur son utilisation ...

  4. #4
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    bon ba après une légère recherche ici je crois que cela devrait répondre à ta question.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut
    j'ai lu et essayé mais je n'arrive pas a utiliser les differentes fonctions ...

    mon tableau commence a 1 et quand j'efface un element du tableau,
    l'indice devient 0, or pour l'indice 0 la ligne est vide.

    je vous met mon code modifié :

    pour effacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    // si le lien "supprimer" est cliqué
    if ($_GET['retirer'] == "RETIRER")
    {
     
    // si le panier existe et qu'il contient un nombre de produits superieur ou egal à 1
    	if(isset($_SESSION['panier']) && count($_SESSION['panier']) >= 1)
    	{
     
    // pour $i de 0 à inferieur ou egal au nombre total de produits dans le panier,	
    // on ajoute 1 a $i apres chaque ligne
    		for ($i=1; $i <= count($_SESSION['panier']); $i++)
    		{
     
    // si la clé contenue dans $i existe dans le tableau panier 
    			if(array_key_exists($i, $_SESSION['panier']))
    			{
     
    // si la variable index est egale au code produit d'indice $i
    				if($_GET['index'] == $_SESSION['panier'][$i][0])
    				{
    					array_splice($_SESSION['panier'], $_SESSION['panier'][$_GET['index']], 1);
    					//array_values($_SESSION['panier'][$_SESSION['n']]);
    				}
    				else
    				{
    // si le panier existe et que le nombre total de produits est egal a 0 
    					if(isset($_SESSION['panier']) && count($_SESSION['panier']) == 0)
    					{
    						unset($_SESSION['panier']);
    						$_SESSION['n']=0;
     
    					}
    					echo '<td><h2>La clé '.$i.' existe</h2></td>';
    				}
    			}
    					else
    					echo '<td><h2>La clé '.$i.' n\'existe pas</h2></td>';
     
    		}
    	}
    	else
    	echo '<td><h2>Le panier n\'existe pas</h2></td>';
    }
    et pour afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if(isset($_SESSION['n']))
    {
    	$n=$_SESSION['n'];
    	$nb=count($_SESSION['panier']);
     
    	echo '	<td align=center><font size="5"><b>Articles dans le panier : '.$nb.'</b></font></td></b>
    			<td><a href="panier.php?vider=VIDER">vider</a></td></tr>';
     
    	for ($i=0; $i<$nb; $i++)
    		{
    			$i=$i+1;
    			echo '	<tr>
    						<td align=center><font size="5">'.$_SESSION['panier'][$i][1].'</font></td> 
    						<td align=right><font size="5">'.$_SESSION['panier'][$i][2].' &euro;</font></td>
    						<td align=center><font size="5">'.$_SESSION['panier'][$i][0].'</font></td> 
    						<td><a href="panier.php?retirer=RETIRER&index='.$_SESSION['panier'][$i][0].'">supprimer</a></td>
    					</tr>'; 
    			$i=$i-1;
    		}
     
    }
    je ne sais plus quoi faire

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut
    j'ai reussi, je suis trop puissant

    je tiens a remercier les modos qui ont baladé mon sujet un peu partout sur le forum ... pour rien en fait

    par contre un vrai merci a Vil'Coyote qui a tenté de m'aider

    et au cas où des gens tres intelligents, mais pas assez pour m'aider, me demanderais de mettre ma solution, vous n'aurez qu'à faire comme moi ...

    postez un message sur le forum, faites en sorte que votre sujet se fasse balader dans les diverses categories du forum puis quand vous en aurez marre vous trouverez la solution ...

    ps: je suis rancunier mais pas mechant, si quelqu'un en a vraiment besoin, qu'il me le demande par mp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipulation des tableaux
    Par driss80 dans le forum Fortran
    Réponses: 4
    Dernier message: 18/01/2008, 09h51
  2. manipulation des tableaux
    Par amine556 dans le forum Informix
    Réponses: 4
    Dernier message: 26/11/2007, 16h20
  3. Problème de manipulation de tableaux
    Par proff dans le forum Pascal
    Réponses: 8
    Dernier message: 01/04/2007, 11h07
  4. Manipulation de tableaux de tableaux
    Par vargasvan dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2006, 14h54
  5. [Tableaux] Manipulation de tableaux
    Par orus8 dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo