1. #1
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut panier php frais de port calcule

    Bonjour,

    je souhaite calculer mes frais de port avec deux differents produits table et transat.

    tout fonctionne a part si dans le panier le client mais plus de deux table de categories différentes restant des tables je veux additioner la quantite pour calculer le frais de port sur la totalite des tables meme differentes voici mon code qui se met pas dans le if mais dans else.

    Je pense que c'est parce que je n'arrive pas recuperer les nom des codes de table pour voir si ce sont que des tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    $total = 0; //set initial total value
    		$b = 0; //var for zebra stripe table 
    		foreach ($_SESSION["cart_products"] as $cart_itm)
            {
    			//set variables to use in content below
    			$product_name = $cart_itm["product_name"];
    			$product_qty = $cart_itm["product_qty"];
    			$product_price = $cart_itm["product_price"];
    			$product_code = $cart_itm["product_code"];
    			$product_finition = $cart_itm["product_finition"];
    			$product_color = $cart_itm["product_color"];
    			$subtotal = ($product_price * $product_qty); //calculate Price x Qty
    			$qtetotal += $cart_itm["product_qty"];
     
    		   	$bg_color = ($b++%2==1) ? 'odd' : 'even'; //class for zebra stripe 
    		    echo '<tr class="'.$bg_color.'">';
    			echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
    			echo '<td>'.$product_name.'</td>';
    			echo '<td>'.$product_price.$currency.'</td>';
    			echo '<td>'.$subtotal.$currency.'</td>';
    			echo '<td>'.$product_finition.'  '.$product_color.'</td>';
    			echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
                echo '</tr>';
    			$total = ($total + $subtotal); //add subtotal to total var
     
            }
     
    	print_r($product_code);
    		/*si table orphe et table orphe avec plexi on additione les quantites*/
     
    	if($product_code == "table-orphe")
    		{
     
    			if($qtetotal  >= 1 && $qtetotal  <= 2)
    			{
    				$shipping_cost_table=20;
    			}
     
    			if($qtetotal  >= 3 && $qtetotal  <= 4)
    			{
    				$shipping_cost_table=30;
    			}
     
    			if($qtetotal >= 5 && $qtetotal  <= 10)
    			{
    				$shipping_cost_table=60;
    			}				
     
    			if($qtetotal  >10)
    			{
    				$shipping_cost_table=0;
    			}			
     
    		}
    		else
    		{
    			echo'2';
    		/*si table orphe ou table orphe avec plexi mais pas les deux en même temps*/
    			if($product_qty  >= 1 && $product_qty  <= 2)
    			{
    				$shipping_cost_table=20;
    			}
     
    			if($product_qty  >= 3 && $product_qty  <= 4)
    			{
    				$shipping_cost_table=30;
    			}
     
    			if($product_qty  >= 5 && $product_qty  <= 10)
    			{
    				$shipping_cost_table=60;
    			}				
     
    			if($product_qty  >10)
    			{
    				$shipping_cost_table=0;
    			}			
    		}
    voici ce que retourne le print_r($_SESSION["cart_products"]); en dehors du foreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [table-orphe] => Array ( [product_finition] => Miroir [product_qty] => 3 [product_code] => table-orphe [product_name] => Table basse Orphée sans plexi [product_price] => 590.00 ) [table-orphe-avec-plexi] => Array ( [product_finition] => Miroir [product_color] => Noir [product_qty] => 8 [product_code] => table-orphe-avec-plexi [product_name] => Table basse Orphée avec plexi [product_price] => 809.00 ) )
    et le print_r($product_code); en dehors du forreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table-orphe-avec-plexi2
    je n'ai qu'un code alors qu'il devrait en avoir 2 je sais que c'est parce qu'il doit etre recuperer dans le foreach mais meme en le mettant dans une session des que je sort du foreach ca marche plus soucis la quantite totale $qtetotal += $cart_itm["product_qty"]; ne donne que le bonne valeur hors foreach.

    merci pour votre aide.

  2. #2
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 353
    Points : 10 743
    Points
    10 743

    Par défaut

    Salut,

    je pense que tu t'es compliqué la vie pour rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $total_price = 0; //set initial total value
    $total_qty   = 0;
    $b           = -1; //var for zebra stripe table 
    foreach ($_SESSION["cart_products"] as $cart_itm)
    {
        //set variables to use in content below
        $product_name     = $cart_itm["product_name"];
        $product_qty      = $cart_itm["product_qty"];
        $product_price    = $cart_itm["product_price"];
        $product_code     = $cart_itm["product_code"];
        $product_finition = $cart_itm["product_finition"];
        $product_color    = $cart_itm["product_color"];
        $price            = $product_price * $product_qty;
        $total_qty       += $product_qty;
     
        $bg_color = ((++$b % 2) === 1) ? 'odd' : 'even'; //class for zebra stripe 
        echo '<tr class="'.$bg_color.'">';
        echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
        echo '<td>'.$product_name.'</td>';
        echo '<td>'.$product_price.$currency.'</td>';
        echo '<td>'.$price.$currency.'</td>';
        echo '<td>'.$product_finition.'  '.$product_color.'</td>';
        echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
        echo '</tr>';
        $total_price += $price;
    }
     
    $shipping_cost_table = 0;
     
    if ($total_qty <= 2) {
        $shipping_cost_table = 20;
    } elseif ($total_qty <= 4) {
        $shipping_cost_table = 30;
    } elseif ($total_qty <= 10) {
        $shipping_cost_table = 60;
    }
    # Dans la Création, tout est permis mais tout n'est pas utile...

  3. #3
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut

    Bonjour,

    merci pour le code le soucis est que j'ai après de teste j'ai des choses quI complique le tout dans le panier :

    - si je met deux transat différents dans le panier les quantités doivent s’additionner pour avoir les frais de ports sur la quantité totale des transats.
    - si je met deux table différents dans le panier les quantités doivent s’additionner pour avoir les frais de ports sur la quantité totale des tables.
    - si je met 1 transat et 1 table dans le panier les quantités doivent ne pas s’additionner pour avoir les frais de ports sur la quantité de transats et de tables.

    Il faut arriver a differencer les quantites pour transat et tables dans le panier j'ai ajouter un tableau pour les code produit qui m'aide a savoir ce qui est dans le panier mais comment associer la quantite de ce produit demandé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    $total = 0; //set initial total value
    		$b = 0; //var for zebra stripe table 
    		  // Déclaration d'un tableau vide
    		$tab_product_code = array();
    		$tab_product_qte = array();
    		foreach ($_SESSION["cart_products"] as $cart_itm)
            {
    			//set variables to use in content below
    			$product_name = $cart_itm["product_name"];
    			$product_qty = $cart_itm["product_qty"];
    			$product_price = $cart_itm["product_price"];
    			$product_code = $cart_itm["product_code"];
    			$product_finition = $cart_itm["product_finition"];
    			$product_color = $cart_itm["product_color"];
    			$subtotal = ($product_price * $product_qty); //calculate Price x Qty
    			$qtetotal += $cart_itm["product_qty"];
    			$tab_product_code[] = $cart_itm["product_code"];
    			$tab_product_qte[] = $cart_itm["product_qty"];
    		//	print_r($qtetotal);
     
    		   	$bg_color = ($b++%2==1) ? 'odd' : 'even'; //class for zebra stripe 
    		    echo '<tr class="'.$bg_color.'">';
    			echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
    			echo '<td>'.$product_name.'</td>';
    			echo '<td>'.$product_price.$currency.'</td>';
    			echo '<td>'.$subtotal.$currency.'</td>';
    			echo '<td>'.$product_finition.'  '.$product_color.'</td>';
    			echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
                echo '</tr>';
    			$total = ($total + $subtotal); //add subtotal to total var
     
     
    		}
     
    	/*si table orphe et table orphe avec plexi on additione les quantites*/
    		if(in_array("table-orphe",$tab_product_code) and in_array("table-orphe-avec-plexi",$tab_product_code))
    		{
    			if($qtetotal  >= 1 && $qtetotal  <= 2)
    			{
    				$shipping_cost_table=20;
    			}
     
    			if($qtetotal  >= 3 && $qtetotal  <= 4)
    			{
    				$shipping_cost_table=30;
    			}
     
    			if($qtetotal >= 5 && $qtetotal  <= 10)
    			{
    				$shipping_cost_table=60;
    			}				
     
    			if($qtetotal  >10)
    			{
    				$shipping_cost_table=0;
    			}			
     
    		}
    		elseif(in_array("table-orphe",$tab_product_code) or in_array("table-orphe-avec-plexi",$tab_product_code))
    		{
     
    		/*si table orphe ou table orphe avec plexi mais pas les deux en même temps*/
    			if($product_qty  >= 1 && $product_qty  <= 2)
    			{
    				echo'a';
    				$shipping_cost_table=20;
    			}
     
    			if($product_qty  >= 3 && $product_qty  <= 4)
    			{
    				$shipping_cost_table=30;
    			}
     
    			if($product_qty  >= 5 && $product_qty  <= 10)
    			{
    				$shipping_cost_table=60;
    			}				
     
    			if($product_qty  >10)
    			{
    				$shipping_cost_table=0;
    			}			
    		}
     
    	if(in_array("transat-vague",$tab_product_code) and in_array("transat-dune",$tab_product_code) and in_array("transat-ile",$tab_product_code))
    		{
    			//echo'1';
    			if($qtetotal  >= 1 && $qtetotal  <= 2)
    			{
    				$shipping_cost_transat=49;
    			}
     
    			if($qtetotal  >= 3 && $qtetotal  <= 4)
    			{
    				$shipping_cost_transat=79;
    			}
     
     
    			if($qtetotal  >4)
    			{
    				$shipping_cost_transat=0;
    			}			
     
    		}
    		else
    		{
    			//echo'2';
    		/*si transat vague ou transat dune ou transat ile amais pas les 3 en même temps*/
    			if($product_qty  >=1 && $product_qty  <= 2)
    			{
     
    				$shipping_cost_transat=49;
    			}
     
    			if($product_qty  >= 3 && $product_qty  <= 4)
    			{
    				$shipping_cost_transat=79;
     
    			}	
     
    			if($product_qty  >4)
    			{
    				$shipping_cost_transat=0;
    			}			
    		}
     
     
     
    		$shipping_cost = $shipping_cost_table + $shipping_cost_transat;
    si quelqu'un peut m'aider svp .

    pour recuperer la totalite de la quantite quand que des transats ou que des tables voici $qtetotal += $cart_itm["product_qty"]; et cela fonctionne mais c'est quand un transat et une table ca marche pas. Car la quantite recuperer n''est pas bonne car je ne vois pas comment recuperer la quantite au produits dans la ligne du panier.

  4. #4
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 353
    Points : 10 743
    Points
    10 743

    Par défaut

    Ok, c'est plus clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    $total_price = 0; //set initial total value
    $total_qty   = [];
    $b           = -1; //var for zebra stripe table 
    foreach ($_SESSION["cart_products"] as $cart_itm)
    {
        //set variables to use in content below
        $product_name     = $cart_itm["product_name"];
        $product_qty      = $cart_itm["product_qty"];
        $product_price    = $cart_itm["product_price"];
        $product_code     = $cart_itm["product_code"];
        $product_finition = $cart_itm["product_finition"];
        $product_color    = $cart_itm["product_color"];
        $price            = $product_price * $product_qty;
        if ( ! isset($total_qty[$product_code])) {
            $total_qty[$product_code] = 0;        
        } 
        $total_qty[$product_code] += $product_qty;
     
        $bg_color = ((++$b % 2) === 1) ? 'odd' : 'even'; //class for zebra stripe 
        echo '<tr class="'.$bg_color.'">';
        echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
        echo '<td>'.$product_name.'</td>';
        echo '<td>'.$product_price.$currency.'</td>';
        echo '<td>'.$price.$currency.'</td>';
        echo '<td>'.$product_finition.'  '.$product_color.'</td>';
        echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
        echo '</tr>';
        $total_price += $price;
    }
     
    $shipping_cost_table = 0;
    foreach ($total_qty as $product_code => $qty) {
        if (in_array($product_code, ['table_orphe', 'table-orphe-avec-plexi'], true)) {
            if ($qty <= 2) {
                $shipping_cost_table += 20;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 30;
            } elseif ($qty <= 10) {
                $shipping_cost_table += 60;
            }    
        } elseif (in_array($product_code, ['transat-vague', 'transat-dune', 'transat-ile'], true)) {
            if ($qty <= 2) {
                $shipping_cost_table += 49;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 79;
            }
        }        
    }
    Ce genre d'approche est une usine à gaz à maintenir, crois-moi...
    # Dans la Création, tout est permis mais tout n'est pas utile...

  5. #5
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut

    j'ai mis ton cote merci encore pour ton aide ca fonctionne mais pas completement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
        {
     
     
    		$total_price = 0; //set initial total value
    $total_qty   = [];
    $b           = -1; //var for zebra stripe table 
    foreach ($_SESSION["cart_products"] as $cart_itm)
    {
        //set variables to use in content below
        $product_name     = $cart_itm["product_name"];
        $product_qty      = $cart_itm["product_qty"];
        $product_price    = $cart_itm["product_price"];
        $product_code     = $cart_itm["product_code"];
        $product_finition = $cart_itm["product_finition"];
        $product_color    = $cart_itm["product_color"];
        $price            = $product_price * $product_qty;
        if ( ! isset($total_qty[$product_code])) {
            $total_qty[$product_code] = 0;        
        } 
        $total_qty[$product_code] += $product_qty;
     
        $bg_color = ((++$b % 2) === 1) ? 'odd' : 'even'; //class for zebra stripe 
        echo '<tr class="'.$bg_color.'">';
        echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
        echo '<td>'.$product_name.'</td>';
        echo '<td>'.$product_price.$currency.'</td>';
        echo '<td>'.$price.$currency.'</td>';
        echo '<td>'.$product_finition.'  '.$product_color.'</td>';
        echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
        echo '</tr>';
        $total_price += $price;
    }
     
    $shipping_cost_table = 0;
    foreach ($total_qty as $product_code => $qty) {
        if (in_array($product_code, ['table_orphe', 'table-orphe-avec-plexi'], true)) {
            if ($qty <= 2) {
                $shipping_cost_table += 20;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 30;
            } elseif ($qty <= 10) {
                $shipping_cost_table += 60;
            }    
        } elseif (in_array($product_code, ['transat-vague', 'transat-dune', 'transat-ile'], true)) {
            if ($qty <= 2) {
                $shipping_cost_table += 49;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 79;
            }
        }        
    }
    je te donne l'adresse si tu peux m'aider :
    http://piscine-gdinox.com/Checkout-master/view_cart.php

    vois tu quand je met 2 table et 3 transat il affiche 79€ quand j'ai descendu la quantité table il reste à 0€ pour table.

    merci de ton aide.

  6. #6
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut

    c'est Table basse Orphée sans plexi qui reste a 0€.

    trouve if (in_array($product_code, ['table-orphe', 'table-orphe-avec-plexi'], true)) {
    corriger le nom est c'est bon je verifie le reste merci

  7. #7
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut

    Tout à l'air presque bon à part l'addition quand meme article si transat meme différentes categories devrait s'additioner puisque cela reste des transat idem pour le tables.
    - si je met deux transat différents dans le panier les quantités doivent s’additionner pour avoir les frais de ports sur la quantité totale des transats.
    - si je met deux table différents dans le panier les quantités doivent s’additionner pour avoir les frais de ports sur la quantité totale des tables.

    Actuellement si je rentre un transat ile et un transat dune il met deux fois les frais de port j'arrive donc 98€ qui devrait etre diviser par 2.

    Les frais de ports deviendrai trop eleve a la fin.
    Il faut trouver un moyens pour differencier quand que des tables et que transat dans le panier on addition qte et applique les frais de port sur la quantite totale.
    Si un mixte on on additione les transats et les tables et frais de ports sur le total de la qte de chacun.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    		$total_price = 0; //set initial total value
    $total_qty   = [];
    $b           = -1; //var for zebra stripe table 
    foreach ($_SESSION["cart_products"] as $cart_itm)
    {
        //set variables to use in content below
        $product_name     = $cart_itm["product_name"];
        $product_qty      = $cart_itm["product_qty"];
        $product_price    = $cart_itm["product_price"];
        $product_code     = $cart_itm["product_code"];
        $product_finition = $cart_itm["product_finition"];
        $product_color    = $cart_itm["product_color"];
        $price            = $product_price * $product_qty;
        if ( ! isset($total_qty[$product_code])) {
            $total_qty[$product_code] = 0;        
        } 
        $total_qty[$product_code] += $product_qty;
     
        $bg_color = ((++$b % 2) === 1) ? 'odd' : 'even'; //class for zebra stripe 
        echo '<tr class="'.$bg_color.'">';
        echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
        echo '<td>'.$product_name.'</td>';
        echo '<td>'.$product_price.$currency.'</td>';
        echo '<td>'.$price.$currency.'</td>';
        echo '<td>'.$product_finition.'  '.$product_color.'</td>';
        echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
        echo '</tr>';
        $total_price += $price;
    }
     
    $shipping_cost_table = 0;
    foreach ($total_qty as $product_code => $qty) {
     
        if (in_array($product_code, ['table-orphe', 'table-orphe-avec-plexi'], true)) {
            if ($qty <= 2) {
                $shipping_cost_table += 20;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 30;
            } elseif ($qty <= 10) {
                $shipping_cost_table += 60;
            }    
        } elseif (in_array($product_code, ['transat-vague', 'transat-dune', 'transat-ile'], true)) {
            if ($qty <= 2) {
                $shipping_cost_transat += 49;
            } elseif ($qty <= 4) {
                $shipping_cost_transat += 79;
            }
        }        
     
    $shipping_cost = $shipping_cost_table + $shipping_cost_transat;
    }
    merci encore pour l'aide je reste bloqué.

  8. #8
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 353
    Points : 10 743
    Points
    10 743

    Par défaut

    Ok, et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    $total_price = 0; //set initial total value
    $total_qty   = [];
    $b           = -1; //var for zebra stripe table
    foreach ($_SESSION["cart_products"] as $cart_itm)
    {
        //set variables to use in content below
        $product_name     = $cart_itm["product_name"];
        $product_qty      = $cart_itm["product_qty"];
        $product_price    = $cart_itm["product_price"];
        $product_code     = $cart_itm["product_code"];
        $product_finition = $cart_itm["product_finition"];
        $product_color    = $cart_itm["product_color"];
        $categ            = explode('-', $product_code)[0];   // table, transat... 1er mot situé à gauche du tiret dans $product_code
        $price            = $product_price * $product_qty;
        if ( ! isset($total_qty[$categ])) {
            $total_qty[$categ] = 0;
        }
        $total_qty[$categ] += $product_qty;
        $total_price       += $price;
     
        $bg_color = ((++$b % 2) === 1) ? 'odd' : 'even'; //class for zebra stripe
        echo '<tr class="'.$bg_color.'">';
        echo '<td><input type="text" size="2" maxlength="2" name="product_qty['.$product_code.']" value="'.$product_qty.'" /></td>';
        echo '<td>'.$product_name.'</td>';
        echo '<td>'.$product_price.$currency.'</td>';
        echo '<td>'.$price.$currency.'</td>';
        echo '<td>'.$product_finition.'  '.$product_color.'</td>';
        echo '<td><input type="checkbox" name="remove_code[]" value="'.$product_code.'" /></td>';
        echo '</tr>';
    }
     
    $shipping_cost_table = 0;
    foreach ($total_qty as $categ => $qty) {
        if ($categ === 'table') {
            if ($qty <= 2) {
                $shipping_cost_table += 20;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 30;
            } elseif ($qty <= 10) {
                $shipping_cost_table += 60;
            }
        } elseif ($categ === 'transat') {
            if ($qty <= 2) {
                $shipping_cost_table += 49;
            } elseif ($qty <= 4) {
                $shipping_cost_table += 79;
            }
        }
    }
    # Dans la Création, tout est permis mais tout n'est pas utile...

  9. #9
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut

    ca a l'air tout bon je fais encore des test merci pour ton aide. je confirme ce midi.

  10. #10
    Membre habitué
    Inscrit en
    janvier 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 1 040
    Points : 133
    Points
    133

    Par défaut

    merci tout a l'air bon par contre si le transat ou table de doit pas être additionner avant calcule frais de port sur le total transat et total table car je changerai de politique et que ca serait frais de port sur chaque produit je devrait simplement utilisé celui que tu m'avais donné avant le dernier code.

    Ce code n'additionnera pas les transats ou table si j'ai bien compris ?



    MERCI.

  11. #11
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 353
    Points : 10 743
    Points
    10 743

    Par défaut

    soit tu gères les frais d'expédition par catégorie, soit tu les gères par produit (effectivement, c'est l'avant dernier code).
    Bref pour calculer des frais d'expédition, il y a moult manières de faire.

    Il faut que tu t'assures de bien comprendre le code quand même, ce n'est pas de la magie non plus.

    @++
    # Dans la Création, tout est permis mais tout n'est pas utile...

Discussions similaires

  1. [CS3] Comment réaliser calculer le frais de port
    Par hoangeric dans le forum Dreamweaver
    Réponses: 8
    Dernier message: 04/06/2009, 18h05
  2. Comment réaliser calculer le frais de port
    Par hoangeric dans le forum Fonctions
    Réponses: 2
    Dernier message: 04/06/2009, 14h50
  3. Calcul d'un panier + frais de port différents
    Par vitosss dans le forum JavaScript
    Réponses: 0
    Dernier message: 08/05/2009, 17h25
  4. Calcul des frais de port poids/prix d'un caddie
    Par spawns dans le forum PHP & MySQL
    Réponses: 4
    Dernier message: 13/01/2009, 16h58
  5. inclure les frais de port dans le panier
    Par osmanSG dans le forum E-Commerce
    Réponses: 0
    Dernier message: 25/08/2008, 20h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo