problème d'offset aléatoire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème d'offset aléatoire

par Truc » 02 avr. 2006, 20:55

j'avais pensé exactement à la même chose
Ahhh absolument pas la même chose mon code comporte une boucle qui n'est pas interrompue par un "break;" elle se déroule donc normalement.

Même si le résultat est le même :wink:

par sam01 » 02 avr. 2006, 19:56

j'avais pensé exactement à la même chose et ça marche.
merci mile fois.
voilà ce que j'ai utilisé

if($qtem == 0) 
												{ 
												// si la 'nouvelle' quantité est égale à zero 
													$nbid = count($_SESSION['panier']);
													$finboucle = false;
													for($i=0;$i<$nbid;$i++)
														{
														if ($finboucle) 
														{
														break;
														}
														
														/*echo '<pre>';
														var_dump($_SESSION['panier']); 
														echo '</pre>';*/
													// on fait une boucle qui passe en revue chaque élément du panier... 
														if ($_SESSION['panier'][$i]['id'] == $_GET['id']) 
														{ 
															// dès qu'on tombe sur la valeur à 'modifier'(ici en l'occurence il s'agit de supprmier ..) 
															array_splice($_SESSION['panier'],$i,1); 
															$finboucle = true;
														} 
													} 
												} 

:D :D :D

par Truc » 02 avr. 2006, 00:16

C'est en effet une piste...

Tu comptes le nombres d'éléments au total dans le panier
Puis si l'élément est dans le panier tu le supprimes
MAIS la boucle continue sur la totalité du panier (tableau).

Proposition de boucle pour sortir dès que l'élément est trouvé ou fin de panier:
$nbid = count($_SESSION['panier']);

$i=0;
$trouve = false;

while(!trouve && $i < $nbid)
{
// on fait une boucle qui passe en revue chaque élément du panier...
  if ($_SESSION['panier'][$i]['id'] == $_GET['id'])
  {
	 // dès qu'on tombe sur la valeur à 'modifier'(ici en l'occurence il s'agit de supprmier ..)
	 array_splice($_SESSION['panier'],$i,1);
	 $trouve = true;
  }
} 
étant donné que ton panier est construit à l'envers
$_SESSION['panier'][$i]['id']
au lieu de
$_SESSION['panier']['id'][$i]

On n'as pas d'autre choix sinon on aurait pu utiliser in_array() au lieu de la boucle :wink:

par sam01 » 01 avr. 2006, 23:59

je viens de m'apercevoir d'une chose.
Le message n'apparait pas quand je supprime le dernier produit de la liste. Dès que je veux supprimer un produit qui n'est pas le dernier de la liste, le message d'erreur appara^t.
Cela peut être une psite non?

par sam01 » 01 avr. 2006, 23:42

désolé mais je ne vois pas la différence...
peux-tu me donner la ligne qui diffère?
pour info, je ne me suis pas inspiré de ton tuto .

par Cyrano » 01 avr. 2006, 20:45

Il y a un résultat pas vraiment normal dans cette sortie affichée, ça devrait ressembler à ceci:

Code : Tout sélectionner

array(3) { [0]=> array(2) { ["id"]=> string(1) "1" ["qte"]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(1) "2" ["qte"]=> int(1) } [2]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(3) } }
Et là il n'y aurait pas d'erreur, Le problème doit se poser au moment de l'ajout d'éléments dans le panier. As-tu vu le tuto sur la construction de panier que j'avais fait, et le cas échéant t'en es-tu inspiré ?

par sam01 » 01 avr. 2006, 19:45

désolé,

voilà le résultat, si vous puviez m'aider à l'interpréter :

Code : Tout sélectionner

array(3) { [0]=> array(2) { ["id"]=> string(1) "1" ["qte"]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(1) "2" ["qte"]=> int(1) } [2]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(3) } } 1 array(3) { [0]=> array(2) { ["id"]=> string(1) "1" ["qte"]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(1) "2" ["qte"]=> int(1) } [2]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(3) } } 2 array(2) { [0]=> array(2) { ["id"]=> string(1) "1" ["qte"]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(3) } }
Notice: Undefined offset: 2 in c:\program files\easyphp1-7\www\lldiffusion\pannier_ajout.php on line 348

merci d'avance.

par Cyrano » 01 avr. 2006, 17:12

Si tu avais mis les balises <pre> comme je te l'ai suggéré, ce serait plus facile à lire :-k

par sam01 » 01 avr. 2006, 17:01

je ne connais pas cette fonction,
mais voilà le résultat que j'ai un obtenu (j'ai un peu de mal à l'interpréter..)

si vous pouvez m'aider...

0array(3) { [0]=> array(2) { ["id"]=> string(1) "1" ["qte"]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(1) "2" ["qte"]=> int(3) } [2]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(4) } } 1array(2) { [0]=> array(2) { ["id"]=> string(1) "2" ["qte"]=> int(3) } [1]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(4) } } 2array(2) { [0]=> array(2) { ["id"]=> string(1) "2" ["qte"]=> int(3) } [1]=> array(2) { ["id"]=> string(1) "3" ["qte"]=> int(4) } }
Notice: Undefined offset: 2 in c:\program files\easyphp1-7\www\lldiffusion\pannier_ajout.php on line 346

par Cyrano » 01 avr. 2006, 11:15

fais donc la chose suivante :
<pre>
<?php
var_dump($_SESSION['panier']);
?>
</pre>
Je parie que ton panier ressemble davantage à $_SESSION['panier']['id'] qu'à $_SESSION['panier'][0]['id'] :-k

problème d'offset aléatoire

par sam01 » 01 avr. 2006, 11:08

j'ai un code pour suprimer un article :

if($qtem == 0) 
                                    { 
                                    // si la 'nouvelle' quantité est égale à zero 
                                       $nbid = count($_SESSION['panier']); 
                                       for($i=0;$i<$nbid;$i++) 
                                       { 
                                       // on fait une boucle qui passe en revue chaque élément du panier... 
                                          if ($_SESSION['panier'][$i]['id'] == $_GET['id']) 
                                          { 
                                             // dès qu'on tombe sur la valeur à 'modifier'(ici en l'occurence il s'agit de supprmier ..) 
                                             array_splice($_SESSION['panier'],$i,1); 
                                          } 
                                       } 
                                    } 


                                     
le souci c'est que j'ai l'erreur suivante :

Notice: Undefined offset: 1 in c:\program files\easyphp1-7\www\lldiffusion\pannier_ajout.php on line 346

la ligne concernée est la suivante

if ($_SESSION['panier'][$i]['id'] == $_GET['id']) 

en faisant un echo $nbid, j'ai la valeur 1. cela signifie qu'il y a un élément dans mon panier.

mais j'ai tout de même l'erreur au 1er passage.

cela signifie donc que la valeur :

$_SESSION['panier'][0]['id'] n'existe pas???
pourtant il y a bien un élément dans mon panier...
je commence à m'rracher les cheveux :?

pouvez-vous me dire quel est le souci...

pour info, mon pannier est alimenté de cete façon :


$_SESSION['panier']=array(); 
    
                                       // on rajoute le produit et la quantité... 
                                       array_push($_SESSION['panier'],array("id" => $_GET['id'],"qte" => $_GET['qte'])); 
merci d'vance pour votre aide :wink: