Session Pb pour supprimer une ligne d'un tableau

Signaler
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour,

Je tente de créer un caddie :
Dans un caddie j'ai créé un formulaire qui me renvoie à une session!
Je poste :
[Caddie.php?Id='.$Id.'&Action=SUPPRIMER Supprimer]
Que je recueille dans ma session['achats'] :

session_start('achats');
if ($_GET['Action'] == "AJOUT")
{
$_SESSION['achats'][] = array ("Id" => $_GET['Id'], "Qte" => $_GET['Qte']);
}
else
if ($_GET['Action'] == "SUPPRIMER")
{
$NbLigne = count($_SESSION['achats']);
for ($i=0; $i < $NbLigne; $i++)
{
if ($i == $_GET['Id'])
{
array_splice($_SESSION['achats'], $i, 1);
}
}
}
session_register('achats');

Résultat, je supprime des lignes.... sauf celle que je veux!
Je craaaaaaaaaaaaaaaaqqqqqqqqqqqquuuuuuuuuuuue

20 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,



pourquoi tu ne fais pas :

if ($_GET['Action'] == "SUPPRIMER") {

array_splice($_SESSION['achats'], $_GET['Id'], 1);

}



plutot...?



Ensuite, teste bien ton $_GET['Id'] pour etre sur que c'est bon.

N'oublie pas que le offset commence a 0, ensuite...pas a 1.

Pour le 3eme parametre, ok : 1, parfait.



Tu es sur que ton id correspond a la bonne clef dans ton tableau hein...?
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Mon $_Get['Id'] correspond à l'Id de mon produit dans ma table Produits.

Avec ta ligne de code épurée donc interessante je supprime les lignes précédentes à celle de ma sélection!

Là je craque!

Comment pourrais je envoyer mon numero de ligne?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ca j'avais bien compris, mais ce qui vient de se passer veut dire que ton id=0

Ce que je ne pige pas c'est comment tu fais la relation entre ta session achat et l'id...?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Heu attends non...

array_splice en partant a l'offset = id et sur une longueur de 1 supprime tout ce qu'il y a AVANT le positionnement de ton id...? Ah.

Fais un print_r ($_SESSION[achats]);
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Dans ma session['Achats'] quand j'ajoute un produit, j'envoie l'Id du produit et la quantité demandée!

Donc ma session se compose ainsi :
ligne 0 [Id1] [Qte1]
ligne 1 [Id2] [Qte2]
.....
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Voila le tableau que j'obtiens :
Array ( [0] => Array ( [Id] => 1 [Qte] => 10 )
[1] => Array ( [Id] => 11 [Qte] => 20 )
[2] => Array ( [Id] => 16 [Qte] => 10 ) )

Ce que je recherche donc c'est à supprimer la ligne [2] ou
Array ( [Id] => 16

Je suis débutant et je me prends la tête depuis ce matin.

Alors je dois manquer de lucidité!
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Tu peux expliquer en clair?
"array_splice en partant a l'offset = id et sur une longueur de 1 supprime tout ce qu'il y a AVANT le positionnement de ton id...? Ah."
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ah ok,

$_SESSION['achats'][] = array ("Id" => $_GET['Id'], "Qte" => $_GET['Qte']);

Pourquoi tu ne fais pas, alors :

$_SESSION['achats'][$_POST['Id']] = array ();
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Je suis paumé de chez paumé là! Je n'y retrouve plus mes petits!


Quand j'ajoute je fais cela!
$_SESSION['achats'][] = array ("Id" => $_GET['Id'], "Qte" => $_GET['Qte']);

mais pour supprimer cette taing de ligne!

J'en perds le peu de latin que j'ai...
Je crois que je vais aller à la plage! ça me refroidira les neurones!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Je t'ai mis un exemple :
La je cree un tableau similaire au tien, ok ?
Et je cherche a supprimer le tableau la ou id = 1.
ok ?

<?php
$tab['achats'][0]['id']=0;
$tab['achats'][1]['id']=1;
$tab['achats'][0]['qte']=3;
$tab['achats'][1]['qte']=4;
$tab = array_splice ($tab,-1 );

print_r ($tab);


foreach ($tab['achats'] as $clef => $val) {
if ($val['id'] == 1) { // la, il faudra mettre ton $_POST['Id'] a la place de mon 1
$tab['achats'][$clef] = array ();
}
}
echo '

';
print_r ($tab);
?>
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Je crois que je viens de piger.....
Si je résume ma session pourrait avoir cette gueule :
session_start('achats');
if ($_GET['Action'] == "AJOUT")
{
$_SESSION['achats'][$_GET['Id']] = array ();
$_SESSION['achats'][$_GET['Qte]] = array ();
else
if ($_GET['Action'] == "SUPPRIMER")
{ f
oreach ($_SESSION['achats'] as $clef => $val) {
if ($val['id'] == $GET['Id'];) { // la, il faudra mettre ton $_POST['Id'] a la place de mon 1
$_SESSION['achats'][$clef] = array ();
}
}

Correct?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Non le debut etait bon, j'ai adapte mon script a ton tableau lol.
Donc tu peux le garder tel qu'il etait.

Pour la suite : oui, c'est exactement ca. Ca devrait marcher (ca marche sur mon tableau fictif qui devrait etre identique au tien, donc ca devrait aller).
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Sauf que tu vas garder un sous-tableau avec une clef a un moment.
Dans mon exemple, je me retrouve avec
<!--StartFragment -->Array( [achats] => Array ( [0] => Array ( [id] => 0 [qte] => 3 ) [1] => Array ( ) ))

Donc la clef 0 a ete conserve (ok), mais la clef 1 aussi, simplement, c'est un tableau vide.

Desavantage de ne pas utiliser array_splice() mais c'etait complique avec cette structure...
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Si ton code fonctionne bien dans ton tableau il ne résoud pas mon probleme de caddie.

1-> mes lignes ne sont pas limitées

Donc je reprend :
Dans une page produits j'ai un formulaire
J'ouvre ma session('achats')

Je recueille ma selection de produits dans ma page caddie

Je reviens vers vous.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Bonjour :-) Ca va ce matin...?

Je n'ai pas compris ton dernier message : tes lignes ne sont pas limites ... c'est a dire ?
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

Bingo! J'ai réglé mon problème!
Au début de ma boucle
$NbArt = count($_SESSION['achats']);
for ($i=0; $i < $NbArt; $i++)//debut boucle
{
$NumLigne = $i;


<td>'.$ProdNom.'</td>
<td>
'.$ProdPrix.'
</td>
<td></td>';


<td>
[Caddie.php?Id='.$NumLigne.'&Action=SUPPRIMER Supprimer]
</td>';

Et ma session achats devient alors :
session_start('achats');
if ($_GET['Action'] == "AJOUT")
{
$_SESSION['achats'][] = array ("Id" => $_GET['Id'],"Qte" => $_GET['Qte']);
}
else
if ($_GET['Action'] == "SUPPRIMER") {
array_splice($_SESSION['achats'], $_GET['Id'], 1);
}
session_register('achats');
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

J'ai atteint... mon but qui était de supprimer mes lignes, avec plus ou moins d'élégance!Soit!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Heu...cool, mais quelle est la difference avec la 1ere solution que j'ai tache de te donner lol ?
(je demande ca par interet hein, c'etait complique ton truc lol, alors j'aimerais piger la solution).
Messages postés
44
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
24 mars 2006

D'abord je répare un oubli : Merci de ta collaboration!


Je ne critique pas ta solution mais comme je suis buté, (breton du 2A), j'ai exploré ma piste à fond!

Le seul intérêt que je vois par rapport à ta solution c'est uniquement la ligne unique de code pour action Supprimer.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
lol non mais ce n'est pas ca que je demande : je ne vois pas la difference, ou est-elle ?