Page 1 sur 1

erreur sur une boucle

Posté : 18 févr. 2009, 22:22
par x@v
Bonsoir,
j'ai un panier, avec des caractéristiques dans une variable de session de type tableau qui me renvoie une erreur sur internet mais fonctionne en local ?
http://www.6tnline.com/index.php?page=produits&cat=1
					<br /><?php
						if(isset($nomOption) && !empty($nomOption)):
							foreach ($_SESSION['proprieteOption'] as $cle => $varProprite):
								if($cle == $idclient) 
									echo $nomOption.' : '.$varProprite;
							endforeach;
						endif;?>
un test sur la variable semble bon
var_dump($_SESSION['proprieteOption']);
array(1) { [7]=>  string(4) "vert" } couleur : vert 
mais lorsque j'ai plusieurs valeurs sa me renvoie cette erreur, et sa se transforme en String ?
string(0) ""
Warning: Invalid argument supplied for foreach() in /home/web/6tnline.com/ftp/www/panier.php on line 68
Apparament c'est quand j'ajoute plusieurs articles avec des caractéristiques que le bug survient mais pas en local
Merci

Posté : 20 févr. 2009, 14:32
par rolusseum
et sa se transforme en String?
Quelle variable se transforme en string?
Un array serait caster en string?

J'avoue ne pas avoir compris ton souci.

Posté : 20 févr. 2009, 14:45
par x@v
dans mon constructeur je met les variables en type array()
	public function __construct()
	{
		session_start();
		// chargement du caddie
		if (isset($_SESSION['caddie']))
		{
			$this->caddie = $_SESSION['caddie'];
			$this->nomOption= $_SESSION['nomSession'];
			$this->proprieteOption= $_SESSION['proprieteOption'];
		}
		else
		{
			$this->caddie=array();
			$this->nomOption=array();
			$this->proprieteOption=array();
		}
	}
ensuite le traitement se fait ici :
	// ajoute un formulaire avec le nom et nombre d'article comme variable, grenade comme le fruit ;)
	public function setFormulaireAjout($nombreGrenade, $grenade, $nomOption, $proprieteOption)
	{
		if (isset($_GET[$grenade]))
		{
			if(isset($_GET[$nombreGrenade]))
			{
				$this->caddie[$grenade]=0;
				$this->caddie[$grenade]+=$_GET[$nombreGrenade];
			}
			else
			{
				$this->caddie[$grenade] +=$_GET[$nombreGrenade];
			}
			if (isset($_GET['nomOption']))
			{
				$this->nomOption[$grenade]=$_GET['nomOption'];
				$this->proprieteOption[$grenade]=$_GET['proprieteOption'];
				$_SESSION['nomOption']=$this->nomOption;
				$_SESSION['proprieteOption']=$this->proprieteOption;
			}
			$_SESSION['caddie']=$this->caddie;
		}?>
		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="get">
			<div><input type="hidden" name="page" value="detailProduit" /></div>
			<div><input type="hidden" name="idProduit" value="<?php echo $_GET['idProduit'];?>" /></div>
			<div><input type="hidden" name="categorie" value="<?php echo $_SESSION['categorie'];?>" /></div>
			<div style="">
				<label>quantité</label>
      			<select name="<?php echo $nombreGrenade;?>">
      				<?php for($i=1; $i<=20; $i++)
      					echo '<option value="'.$i.'">'.$i.'</option>';?>
      			</select>
			</div>
        	<?php 
        	if(isset($nomOption) && !empty($nomOption)):
        		$proprieteOption=explode(" ",$proprieteOption);?>
	        	<div style="margin: -25px 0 0 132px; width: 200px;">
	        		<div><input type="hidden" name="nomOption" value="<?php echo $nomOption;?>" /></div>
	        		<label><?php echo $nomOption;?></label>
	        		<select name="proprieteOption">
	        		<?php foreach ($proprieteOption as $prop):
	        			echo '<option value="'.$prop.'">'.$prop.'</option>';
	        		endforeach;?>
	        		</select>
	        	</div><?php 
	        endif;?>
			<div><input type="hidden" name="<?php echo $grenade;?>" value="<?php echo $grenade;?>" /></div>
			<div><input type="hidden" name="transfertUi" value="effet" /></div>
			<div style="
			<?php echo (!isset($nomOption) || empty($nomOption)) ? 'margin:-25px 0 0 130px;' :'margin:10px 0 0 0px; padding:0 10px;';?>">
				<input type="submit" value="ajouter" />
			</div>
		</form><?php
	}
la variable caddir fonctionne parfaitement
$_SESSION['caddie']=$this->caddie;
Au fond je me demande d'ou vient cette difference entre le local et le serveur ?
Puisque c'est au deuxième ajout que sa se tranforme en string.
C'est ce code qui ne fonctionne pas
			if (isset($_GET['nomOption']) && !empty($_GET['nomOption']))
			{
				$this->nomOption[$grenade]=$_GET['nomOption'];
				$this->proprieteOption[$grenade]=$_GET['proprieteOption'];
				$_SESSION['nomOption']=$this->nomOption;
				$_SESSION['proprieteOption']=$this->proprieteOption;
			}
Pourtant assez clair ?

Posté : 21 févr. 2009, 00:50
par rolusseum
Désolé, je n'ai pas vraiment d'idée.

Eventuellement
  if (isset($_GET['nomOption']))
            {
                $this->nomOption[$grenade]=$_GET['nomOption'];
                $this->proprieteOption[$grenade]=$_GET['proprieteOption'];
                $_SESSION['nomOption']=$this->nomOption;
                $_SESSION['proprieteOption']=$this->proprieteOption;
            } 
Remplacé par
 if (isset($_GET['nomOption']))
            {
                $this->nomOption[$grenade]=$_GET['nomOption'];
                $this->proprieteOption[$grenade]=$_GET['proprieteOption'];
                $_SESSION['nomOption']=$_GET['nomOption'];
                $_SESSION['proprieteOption']=$_GET['proprieteOption'];
            } 

Posté : 21 févr. 2009, 00:59
par x@v
le problème c'est résolus il semble que c'est un conflit avec le nom du paramètre de la méthode.
Sa fonctionne je ne sais pas pourkoi...