Appliquer une fonction independamment a differentes lignes

Mammouth du PHP | 568 Messages

01 mars 2006, 15:50

Excuse moi, je comprends pas là...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 159 Messages

01 mars 2006, 15:53

c'est bon maintenant ca "marche" sauf pour le premier produit present dans le panier
c'est le seul pour lequel ca ne fait rien, j'ai affiché l'indice et tout les produits ont bien le leur meme le premier produit

je ne comprends pas :?:

Eléphant du PHP | 159 Messages

01 mars 2006, 15:55

pardon en fait ca ne marche que pour le dernier, desole :oops:

Mammouth du PHP | 568 Messages

01 mars 2006, 16:04

Tu récupère bien les id de tes produits par l'élément caché du formulaire (idart) ? Parceque je vois que tu as laissé idpdt dans l'url d'action du formulaire...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 159 Messages

01 mars 2006, 16:10

oui en fait dans la gestion c'est comme ca :
//Selection de l'ID du produit
	if(isset($_POST['indice']) && isset($_POST['idart'])) {
        $idproduit=$_POST['idart'];
		$num='QTE_'.$_POST['indice'];
        if ($_SESSION['achats'][$idproduit] != $_POST[$num]) {
            $_SESSION['achats'][$idproduit] = $_POST[$num];
         }
   }
   else
      $idproduit=$_GET['idpdt']; 

Mammouth du PHP | 568 Messages

01 mars 2006, 16:17

Bon pardon, j'ai un peu décroché à un moment là !


Il faut que idart et indice évolue de la même façon que QTE... (idart_1, idart_2, etc...)

Dans la page suivante, tu parcours le $_POST et à chaque idart, tu insère une variable session...

Désolé de ne pas avoir vu ça plus tôt...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 159 Messages

01 mars 2006, 16:41

Bon bah voila pour la gestion j'ai mis ca :
	//Selection de l'ID du produit
	if(isset($_POST['indice'])) {
        $numid='idart_'.$_POST['indice'];
		$idproduit=$_POST[$numid];
		$num='QTE_'.$_POST['indice'];
        if ($_SESSION['achats'][$idproduit] != $_POST[$num]) {
            $_SESSION['achats'][$idproduit] = $_POST[$num];
         }
   }
   else
      $idproduit=$_GET['idpdt']; 
et dans le formulaire j'ai mis ca :
...
<input name="idart_<? echo $indice;?>" value="<? echo $cat['IDARTICLE'];?>" type="hidden">
...
mais ca marche toujours que pour le dernier

Mammouth du PHP | 568 Messages

01 mars 2006, 17:25

As tu vérifier dans le code source généré de ton formulaire à pour chaque ligne un idart customisé ?
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 159 Messages

01 mars 2006, 17:38

pour chaque produit y a :

QTE_x qui a pour valeur la quantité
idart_x qui a pour valeur l'ID du produit

Mammouth du PHP | 568 Messages

01 mars 2006, 17:42

Bon je scotche là ;) Tu veux bien afficher tes codes, parceque là, je vois plus...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 159 Messages

01 mars 2006, 17:47

y a pas de souci
donc pour la gestion du panier voila le code :
<?
session_start();
if(array_key_exists('action', $_GET)){
	$actionpanier=$_GET['action'];
	//Selection de l'ID du produit
	if(isset($_POST['indice'])) {
        $numid='idart_'.$_POST['indice'];
		$idproduit=$_POST[$numid];
		$num='QTE_'.$_POST['indice'];
        if ($_SESSION['achats'][$idproduit] != $_POST[$num]) {
            $_SESSION['achats'][$idproduit] = $_POST[$num];
         }
   }
   else
      $idproduit=$_GET['idpdt']; 			
	//Supprimer une ligne
	if ($actionpanier=='supprligne'){
		$idproduit=$_GET['idsuppr'];
		unset($_SESSION['achats'][$idproduit]);
	}
	//Vider le panier
	if ($actionpanier=='vider') unset($_SESSION['achats']);
	//Modification de la quantité
	if($_SESSION['verif_value'] == $_GET['verif_value']){ //Permet de ne pas réaliser a nouveau une action quand on actualise
    	//Ajouter un article a partir du catalogue ou de la fiche produit	
		if ($actionpanier == 'AJOUT'){
   			$idproduit = $_GET['id'];
   			if (!isset($_SESSION['achats'][$idproduit])) {
      			$_SESSION['achats'][$idproduit] = 0;
   			}
   		$_SESSION['achats'][$idproduit]++;
		}
	//Saisie de la quantité
	$_SESSION['verif_value'] = rand(1,1000000);  //Choix alétoire d'une valeur pour gérer problème de l'actualisation
}
?>
<script>
window.location.replace('index2.php?panier=1.php');
</script>
<?
}
?>


pour le panier voila le code :
<form name="Formpanier" method="POST" action="index2.php?panier=1&action=1&idpdt=<? echo $cat['IDARTICLE'];?>"> 
<table width="100%" border="0" align="center" cellpadding="3" cellspacing="1" class="texte">
<tr bgcolor="#B3DCFD" class="texte3">
<td align="center" height="30"><b>Photos</b></td>
<td align="center" height="30"><b>Réf.</a></b></td>
<td align="center" height="30"><b>Marque</b></td>
<td align="center" height="30"><b>Désignation</b></td>
<td align="center" height="30" width="80"><b>Prix Unitaire</b></td>
<td align="center" height="30"><b>Quantité</b></td>
<td align="center" height="30"><b>Montant Total</b></td>
<td align="center" height="30" width="135">&nbsp;</td>
</tr>
<?
$i=0;
$total=0;
$articletotal=0;
if (!$_SESSION['achats']){
?>
<tr bgcolor="#FFFFFF">
<td colspan="8" align="center">
<b>
<br>
VOTRE PANIER NE CONTIENT AUCUN N'ARTICLE
<br><br>
</b>
</td>
</tr>
<?
}
else
{
$indice=1;
foreach($_SESSION['achats'] as $idart => $qte) {
$idarticle=$idart;
$qtearticle=$qte;
$query=("SELECT * FROM ARTICLE WHERE IDARTICLE='$idarticle'");
$result=mysql_query($query);
while($cat = mysql_fetch_array($result)){
if ($i%2==0){
	$couleurfond='#FFFFFF';
	}
else
	$couleurfond='#F3F3F3';
?>
<tr bgcolor="<? echo $couleurfond;?>">
<td align="center">
<?
$chaine=$cat['Photo'];
$adrphoto=str_replace("\\", "/", $chaine);
$findme='/';
$pos=strrpos($adrphoto, $findme);
$tailleadrphoto=strlen($adrphoto);
$nomimage=substr($adrphoto, $pos+1);
?>
<img src="imagesproduit/produit/<? echo $nomimage;?>" width="40" height="40">
</td>
<td align="center">
<? echo $cat['CodeArticle'];?>
</td>
<td align="center">
<? echo $cat['Marque'];?>
</td>
<td align="left">
<b><? echo $cat['Designation'];?></b><br>
<? echo stripslashes($cat['Notes']);?>
</td>
<td align="center">
<font color="#0000CC">
<b>
<?
RecupPrix($_SESSION['CodeEts'],$cat['CodeArticle'],$cat['CodeFamille']);
if ($prixR==0){
	echo '-';
	$prixcorr=0;
}
else{
	$prixcorr = number_format($prixR,2, ',', ' ');
	echo $prixcorr.' € TTC';
}
?>
</b>
</font>
</td>
<td align="center">
<table align="center" class="texte">
<tr> 
<td rowspan="2" align="right">
<input type="text" name="QTE_<? echo $indice;?>" value="<? echo $qtearticle;?>" align="right" size="2">
<input name="idart_<? echo $indice;?>" value="<? echo $cat['IDARTICLE'];?>" type="hidden">
<input name="indice" value="<? echo $indice;?>" type="hidden">
<a href="#" onclick="Formpanier.submit()"><? echo 'name=\"idart_'. $indice.'-'.$indice;?>-Envoyer</a>
</td>
<td align="left" valign="bottom">
<a href="javascript:plusmoins('QTE_<? echo $indice;?>',2);">
<img src="images/boutonplus.gif" border="0">
</a>
</td>
</tr>
<tr> 
<td align="left" valign="top">
<?
if ($qtearticle > 1) {?>
<a href="javascript:plusmoins('QTE_<? echo $indice;?>',1);">
<img src="images/boutonmoins.gif" border="0">
</a>
<? 
}
?>
</td>
</tr>
</table>
</td>
<td align="center">
<font color="#0000CC">
<b>
<?
$couttotarticle = $prixR * $qtearticle;
$coutcorr = number_format($couttotarticle,2, ',', ' ');
echo $coutcorr.' € TTC';
$total += $couttotarticle;
$articletotal += $qtearticle;
?>
</b>
</font>
</td>
<td align="center"><a href="index2.php?panier=1.php&action=supprligne&idsuppr=<? echo $cat['IDARTICLE'];?>" onclick="return confirm('Voulez vous réellement supprimer cette article de votre panier ?')">Supprimer</a>
</td>
</tr>
<?
}
$i++;
$indice++;
}
}
?>
<tr bgcolor="#B3DCFD">
<td colspan="6" align="right">
<b>Total :</b><br>dont T.V.A :
</td>
<td align="center">
<b>
<?
$_SESSION['cout']=$total;
$_SESSION['nbarticle']=$articletotal;
$total = number_format($_SESSION['cout'],2, ',', ' ');
echo $total;
?> &euro;</b><br><?
$tva = $_SESSION['cout']-($_SESSION['cout']/1.196);
$tvacorr = number_format($tva,2, ',', ' ');
echo $tvacorr;
?> &euro;
</td>
<? if ($vide!=1){?>
<td>&nbsp;</td>
<? }?>
</tr>
<tr>
<td colspan="8" align="center" bgcolor="#B3DCFD">
<?
if ($vide<>1){
?>
<a href="index2.php?panier=1.php&action=vider" onclick="return confirm('Voulez vous réellement vider votre panier ?')">Vider le panier</a>
<?
}
else{
	echo '&nbsp;';
}
?>
</td>
</tr>
</table>
</form>
tout ceci se trouve dans la meme page

Mammouth du PHP | 568 Messages

01 mars 2006, 18:25

ok... C'est un truc dont je me doutais... dans ton script de gestion, arrête moi si je me trompe, le but est de mettre en variable session tous les produits 1 à 1...

Seulement, comme tu ne parcours pas ton tableau $_POST à la recherche de chaque idart, il ne récupère que celui dont la valeur et celui de l'indice...... Or dans ton formulaire, tu donnes tu as x champs indice qui ont comme nom : indice... il n'en récupère qu'un seul et n'utilise que cette valeur... Donc je suppose qu'il récupère le dernier et donc, tu n'as que le dernier qui est traité ensuite... fais varier aussi indice !

Et dans la gestion, boucle sur le $_POST et à chaque indice, tu insères dans la variable session...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 mars 2006, 19:19

si je peux me permettre....
il semble que c'est effectivement un problème de répétion de champ "indice", pour éviter d'indicer l'attribut name. Donc éviter d'avoir plusieurs champs suffit de sortir de la boucle (en fin de boucle)cette ligne:
<input name="indice" value="<? echo $indice;?>" type="hidden"> 
le champ contiendra donc la valeur maxi des indices, (attention à soustraire 1 puisque tu as un $indice++). Donc un champ et tu peux parcourir de cette valeur à 1 pour la récupération des champs.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 159 Messages

02 mars 2006, 09:31

Et voila maintenant ca marche enfin je pense, j'effectue encore quelque tests :
if(isset($_POST['indice'])) {
        $indicemax=$_POST['indice'] - 1;
	for ($ip = 1; $ip <= $indicemax; $ip++) {
		$numid='idart_'.$ip;
		$idproduit=$_POST[$numid];
		$num='QTE_'.$ip;
		if ($_SESSION['achats'][$idproduit] != $_POST[$num]) {
		        $_SESSION['achats'][$idproduit] = $_POST[$num];
		}
	}
}
else
      $idproduit=$_GET['idpdt']; 
sinon j'ai un autre probleme mais c'est du encore a mon formulaire je peux demander ici ou il vaut mieux créer un autre topic dans la partie PHP

Eléphant du PHP | 159 Messages

02 mars 2006, 09:40

bon finalement tout parait correct

merci a tous