[PHP] korting bij meerdere producten

Pagina: 1
Acties:
  • 154 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 04-06 11:20
Onderstaande code is een klein stukje uit een webshop.
Als er van $postban_een 2 producten zijn, dan moet er 0,50 cent van de prijs afgaan, zijn het er 3, gaat er 1,00 van de prijs af, bij 4 gaat er 1,50 af en bij 5 gaat er 2,00 van de prijs af. Maar zijn het er meer dan 5, dan telt hij telkens per 5 producten, er kan dus maximaal 2,00 van de prijs afgaan.

als je er dus 7 hebt, gaan er over de eerste 5 2,00 af en over die overige 2 gaat er 0,50 af. Hoe kan ik dit het beste doen? Dit geldt overigens alleen als sessie 'contractant' geset is, als dit niet het geval is, dan gaat er alleen als er 5 worden besteld 2,00 af per product, als er 10 zijn weer 2,00 per product etc...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
if($pro['postban'] == 1){ 
    $postban_een++; 
} 
elseif($pro['postban'] == 2){ 
    $postban_twee++; 
} 
elseif($pro['postban'] == 3){ 
    $postban_drie++; 
} 
$soort=mysql_query("SELECT * FROM ".$tabel_soorten." WHERE id=".$or['kleur']); 
while($soor=mysql_fetch_assoc($soort)){ 
    if($_SESSION['contractant'] == 1){ 
        $prijs = $soor['prijs_contractant_een']; 
                //hier zou dus berekening moeten komen? 
    } 
    else { 
        $prijs = $soor['prijs_standaard_een']; 
    } 
    $maat = $soor['soort']; 
} 

?> 


Nu heb ik dit geprobeerd:

PHP:
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
<?php
if($haal['postban'] == 1){
    $postban_een++; //posters
}
elseif($haal['postban'] == 2){
    $postban_twee++; //banners
}
else{
    $postban_drie++; //lijsten
}
$soort=mysql_query("SELECT * FROM ".$tabel_soorten." WHERE id=".$get['kleur']);  
while($soor=mysql_fetch_assoc($soort)){  
    if($_SESSION['contractant'] == 1){  
      $aantal = $postban_een;  
      $aantalMaal2euro = floor($aantal / 5);  
      $resterende = $aantal % 5;  

      $korting = 2 * $aantalMaal2euro;  
      $korting2 = ($resterende - 1) * .5;  
      $korting2 = ($korting2 < 0 ) ? 0 : $korting2;  
      $prijs = $soor['prijs_contractant_een']-$korting2; 
    }  
    else {  
      $prijs = $soor['prijs_standaard_een']; 
    }  
    $maat = $soor['soort']; 
}
?>


maar het is niet helemaal wat ik bedoelde, stel dat de prijs van 1 product 22,00 is dan moet het zo worden:

aantal prijs
2 40,00 //5 stuks dus bij elke moet er 2,00 af...
1 20,00
1 20,00
1 20,00

met het script wat ik probeerde is het zo:
aantal prijs
2 44,00
1 21,50
1 21,00
1 20,50

nog een voorbeeld van hoe het zou moeten worden:
aantal prijs
1 20,00 (prijs van product per stuk bij aantal=5 (valt binnen de eerste 5)
3 60,00 (3x 20,00) (valt binnen de eerste 5)
2 41,50 (20,00 + 21,50 (1 valt er binnen de eerste 5, de 2e valt binnen de volgende 'set')
1 21,50 (prijs van product per stuk bij aantal=2 (valt binnen de laatste 'set' van dus 2 stuks)

[ Voor 16% gewijzigd door robg1984 op 03-02-2006 18:55 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
6
7
$aantalGroepjesVanVijf = floor($aantalProducten / 5);
$laatsteGroep = $aantalProducten % 5;
$korting = $aantalGroepjesVanVijf * 2;

if ($laatsteGroep > 1) {
  $korting += $laatsteGroep * 0.5;
}

Niet getest, maar lijkt me vrij eenvoudig? :)

[ Voor 12% gewijzigd door NMe op 03-02-2006 22:44 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 18686

-NMe- schreef op vrijdag 03 februari 2006 @ 22:36:
...
Niet getest, maar lijkt me vrij eenvoudig? :)
Ik zat er toch ook even op te kraken, maar soms denk je moeilijker dan nodig... :Y)

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 04-06 11:20
jammer...
dit heeft hetzelfde resultaat als wat ik had...
ik krijg dus weer de eerste normaal, de 2e met 0,50 korting, de 3e met 1,00 korting etc...
ik wil dus als er 1 is de prijs normaal blijft,
bij 2 gaat er bij beide 0,50 af,
bij 3 bij alle 3 1,00 euro,
bij 4 gaat er bij elke 1,50 af en bij 5 gaat er van elk product 2,00 af...

als er 6 zijn gaat er over de eerste 5 van elk product 2,00 af en de 6e blijft normaal
als er 7 zijn gaat er over de eerste 5 van elk product 2,00 af en van de overige 2 0,50
als er 11 zijn gaat er over de eerste 5 van elk product 2,00, over de 3e set van 5 ook en die ene die over blijft blijft normaal

snappen jullie het systeem nog?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Dan hoef je toch nog steeds maar heel weinig aan te passen? Zet gewoon alle producten/prijzen in een array, en dan zijn de eerste 5 x $aantalGroepjesVanVijf elk 2 euro goedkoper, en de laatste paar elementen van die array ($laatsteGroep) hebben dan $laatsteGroep - 1 * 0.5 euro korting. Is toch gewoon simpele basisschoolwiskunde? :o

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Croga
  • Registratie: Oktober 2001
  • Laatst online: 07:35

Croga

The Unreasonable Man

PHP:
1
2
3
4
5
6
7
8
9
<?
$aantalGroepjesVanVijf = floor($aantalProducten / 5);
$laatsteGroep = $aantalProducten % 5;
$korting = $aantalGroepjesVanVijf * 10;

if ($laatsteGroep > 1) {
  $korting += (($laatsteGroep - 1) * 0.5) * $laatsteGroep;
}
?>
Pagina: 1