login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Mysql prijzen tabel (Opgelost)

Offline sanderrebry - 14/11/2013 23:00 (laatste wijziging 14/11/2013 23:03)
Avatar van sanderrebryLid Ik heb een script waar er een artikel kan gekozen worden met bijhorende opties.
De prijs wordt berekend per vierkante meter of per formaat,afhankelijk van de instelling.

Ik heb een tabel structuur voor de artikelen:
ARTIKELID PRIJS MIN MAX SETTING
1 10 10 15 1
2 15 1 2 2

Tabel structuur voor optie montage
MONTAGEID PRIJS MIN MAX SETTING
1 10 10 15 1
2 15 1 2 2

Setting 1 -> per formaat
Setting 2 -> per vierkante meter

Wanneer er 100 cm / 100cm ingegeven wordt en de setting staat op 2 -> 1 vierkante meter neem de prijs van het artikel + de prijs van de bijhorende opties.

Hierbij heb ik een stukje code:


  1. // het geselecteerd artikel id
  2. $artikelid= $row_artikel['id'];
  3.  
  4. for($i=0;$i<count($_POST["txt_formaat1"]);$i++)
  5. {
  6. $type_ophangsysteem = $_POST["type_ophangsysteem"][$i];
  7. $type_laminatie = $_POST["type_laminatie"][$i];
  8. $type_montage = $_POST["type_montage"][$i];
  9. $input_lengte = $_POST["txt_formaat1"][$i];
  10. $input_breedte = $_POST["txt_formaat2"][$i];
  11.  
  12.  
  13. $query_pervierkantemeter = "SELECT pz.artikel_id,pz.page_id,pz.setting AS setting_artikel,pz.min_vierkant_m AS artikel_min,pz.max_vierkant_m AS artikel_max, pl.page_id,pl.laminatie_id,pl.setting AS setting_laminatie,pl.min_vierkant_m AS montage_min,pl.max_vierkant_m AS montage_max,pm.page_id,pm.montage_id,pm.setting AS setting_montage,pm.min_vierkant_m AS laminatie_min,pm.max_vierkant_m AS laminatie_max
  14. FROM printtoplate_prijzen pz
  15. INNER JOIN printtoplate_prijzen_laminatie pl
  16. ON (pl.laminatie_id='$type_laminatie' AND pl.page_id='$page_id')
  17. INNER JOIN printtoplate_prijzen_montage pm
  18. ON(pm.montage_id='$type_montage' AND pm.page_id='$page_id')
  19. WHERE pz.artikel_id='$artikelid' AND pz.page_id='$page_id'";
  20. $result_vierkant = mysql_query($query_pervierkantemeter) or die(mysql_error());
  21. $row_setting = mysql_fetch_assoc($result_vierkant);
  22. echo $setting_artikel = $row_setting['setting_artikel'];
  23. echo "<br/>";
  24. echo $setting_laminatie = $row_setting['setting_laminatie'];
  25. echo "<br/>";
  26. echo $setting_montage = $row_setting['setting_montage'];
  27. echo "<br/>";
  28. }

Iemand een idee hoe ik dit met een query kan doen?
Alvast bedankt!

2 antwoorden

Gesponsorde links
Offline Thomas - 15/11/2013 00:42
Avatar van Thomas Moderator Over het vraagstuk:
Het kan aan mij liggen, maar ik snap het verband tussen de artikelen tabel en de montage tabel niet helemaal. Zou je de betekenis van de (relevante) kolommen (voor je vraagstuk (verder)) kunnen toelichten? In je query gebruik je $page_id, wat betekent dit en waar komt deze waarde vandaan? Ook snap ik de berekeningen niet helemaal? Bevat de montagetabel ingeval setting 2 de prijs per vierkante meter van een specifiek artikel? Hoe luidt de berekening ingeval setting 1 (per formaat), en wat betekent "per formaat"? In het algemeen: hoe zien de verschillende berekeningen er uit? Misschien werkt het (zeer) verhelderend als je een praktijkvoorbeeld beschrijft.

Over de code:
- $page_id?
- gebruik mysql_real_escape_string() in je query, vooral als waarden waarmee je vergelijkt handmatig worden ingevoerd, wellicht wil je ook wat meer type-controles inbouwen (is je invoer numeriek?); en als een variabele slechts bepaalde waarden kan hebben: gebruik selectboxes (misschien doe je dat al maar het formulier zit er niet bij)
- weet je zeker dat het queryresultaat altijd uit precies één record bestaat? misschien verstandig om te controleren, zeker gezien je (handmatige?) invoer accepteert
- de rekensom hoeft niet per se in MySQL opgelost te worden, als het makkelijker is om dit in PHP te doen kun je deze altijd naar PHP verplaatsen
Offline sanderrebry - 15/11/2013 08:19 (laatste wijziging 15/11/2013 08:32)
Avatar van sanderrebry Lid Je kan via deze link een praktijkvoorbeeld zien: http://studiowe...age_id=123

In het formulier kan men meerdere formaten ingeven, 10 cm / 15 cm... 100 cm / 100 cm...
Er zijn twee soorten berekeningen per vierkante meter of per formaat, in de tabel artikelen heb je setting 2 die staat voor per formaat dus wanneer in tabel setting 2 met formaat 10/15 gevonden is neem deze prijs is setting 1 met 10/15 bereken totaal vierkante meter van alle formaten en zoek tussen 10-15 vierkante meter. Bij de opties moet het zelfde worden gedaan zoals bij de artikelen alleen hoeft de prijs opgeteld worden met het artikel.

Een voorbeeld hoe de vierkante meter wordt berekend maar dit is nog zonder deze setting erin:

  1. $artikelid = $_POST['artikelid'];
  2. for($i=0;$i<count($_POST["txt_formaat1"]);$i++)
  3. {
  4. $type_ophangsysteem = $_POST["type_ophangsysteem"][$i];
  5. $type_laminatie = $_POST["type_laminatie"][$i];
  6. $input_lengte = $_POST["txt_formaat1"][$i];
  7. $input_breedte = $_POST["txt_formaat2"][$i];
  8. $id= $_POST["id"][$i];
  9.  
  10.  
  11. /// VIERKANTE METER UITREKENEN + AANTAL STUKS OPTELLEN
  12. // ALS DE SETTING 1 is in de tabel artikelen, montage
  13. $lengte = $txt_lengte/100;
  14. $breedte = $txt_breedte/100;
  15. $vierkantemeter = $lengte*$breedte*$txtaantalstuks;
  16. $totaal_vierkantemeter += $vierkantemeter;
  17. $aantalstuks += $txtaantalstuks;
  18. $profiel_prijs+= $prijs_profiel;
  19. $totaalmeter_profiel += $totaal_meter;
  20. }
  21.  
  22.  
  23. //// IF DE SETTING 2 BEREKEN PER FORMAAT///
  24. /// PRIJS PER FORMAAT //
  25. $query_prijs = "SELECT * FROM printtoplate_prijzen WHERE min_vierkant_m >= '$txt_lengte' AND max_vierkant_m >= '$txt_breedte' AND artikel_id ='$artikelid'";
  26. $query_prijs = "SELECT * FROM printtoplate_prijzen WHERE min_vierkant_m >= '$txt_lengte' AND max_vierkant_m >= '$txt_breedte' AND laminatie_id ='$laminatie_id'";
  27. $result_prijs = mysql_query($query_prijs) or die(mysql_error());
  28. if(mysql_num_rows($result_prijs) >0)
  29. {
  30. while($row_prijs = $query_prijs = mysql_fetch_array($result_prijs))
  31. {
  32.  
  33. if($value_id == "3")
  34. {
  35. $totaal += $row_prijs['dealerprijs'];
  36. $opstartkost += $row_prijs['opstartkost_dealer'];
  37. }
  38. else
  39. {
  40. $totaal += $row_prijs['prijs']*$txtaantalstuks;
  41. $opstartkost += $row_prijs['opstartkost'];
  42. }
  43.  
  44. }
  45. }
  46.  
  47. else
  48. {
  49.  
  50. echo '<script type="text/javascript">alert("Fout, de maximale hoogte/breedte: '.$maxbreedte.' cm / '.$maxlengte.' cm en minimum '.$minn.' cm");</script>';
  51.  
  52.  
  53. }
  54.  
  55.  
  56.  
  57. }
  58.  
  59. /* ZOEK STAFFELPRIJS */
  60. $query_staffel = "SELECT * FROM printtoplate_prijzen WHERE $totaal_vierkantemeter BETWEEN min_vierkant_m AND max_vierkant_m AND artikel_id ='$artikelid'";
  61. $result_staffel = mysql_query($query_staffel) or die(mysql_error());
  62.  
  63. while($row_staffel = $query_staffel = mysql_fetch_array($result_staffel))
  64. {
  65. $min = $row_staffel['min_vierkant_m'];
  66. $max = $row_staffel['max_vierkant_m'];
  67. if($groepid == "3")
  68. {
  69. $staffelprijs = $row_staffel['dealerprijs'];
  70. $opstartkost = $row_staffel['opstartkost_dealer'];
  71. }
  72. else
  73. {
  74. $staffelprijs = $row_staffel['prijs'];
  75. $opstartkost = $row_staffel['opstartkost'];
  76. }
  77. }
  78. $totaal = $staffelprijs*$totaal_vierkantemeter;
  79. if($aantalfiles < $tel_formaat OR $aantalfiles == $tel_formaat OR $aantalfiles == $aantalstuks OR $aantalfiles < $aantalstuks)
  80. {
  81.  
  82. $opstartkosten = $opstartkost*$aantalfiles;
  83. }
  84. else
  85. {
  86. echo '<script type="text/javascript">alert("Fout, het aantal verschillende beelden is groter dan het ingeven aantal stuks!");</script>';
  87. }
  88.  
  89. $prijs_kosten = $totaal+$opstartkosten+$profiel_prijs;
  90. $totale_prijs = number_format($prijs_kosten, 2, ',' ,'');
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s