Session Pb pour supprimer une ligne d'un tableau

RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006 - 7 juin 2005 à 16:12
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 8 juin 2005 à 09:53
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 16:27
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...?
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
7 juin 2005 à 16:43
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?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 16:51
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...?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 17:00
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]);
0

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

Posez votre question
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
7 juin 2005 à 17:00
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]
.....
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
7 juin 2005 à 17:11
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é!
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
7 juin 2005 à 17:13
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."
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 17:20
Ah ok,

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

Pourquoi tu ne fais pas, alors :

$_SESSION['achats'][$_POST['Id']] = array ();
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
7 juin 2005 à 17:33
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!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 17:40
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);
?>
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
7 juin 2005 à 17:59
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?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 18:02
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).
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2005 à 18:06
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...
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
8 juin 2005 à 08:40
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juin 2005 à 09:03
Bonjour :-) Ca va ce matin...?

Je n'ai pas compris ton dernier message : tes lignes ne sont pas limites ... c'est a dire ?
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
8 juin 2005 à 09:17
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');
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
8 juin 2005 à 09:20
J'ai atteint... mon but qui était de supprimer mes lignes, avec plus ou moins d'élégance!Soit!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juin 2005 à 09:30
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).
0
RDLG2A Messages postés 44 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 24 mars 2006
8 juin 2005 à 09:40
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juin 2005 à 09:53
lol non mais ce n'est pas ca que je demande : je ne vois pas la difference, ou est-elle ?
0
Rejoignez-nous