[PHP/MySQL] opzet prijsvergelijker

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig om een prijsvergelijker op te zetten voor een specifieke markt. Het is voor mij alleen nog niet duidelijk hoe ik deze technisch het beste kan opbouwen. Ik probeer nu zo duidelijk mogen te vertellen wat mijn huidige opzet is.

De tarieven zijn afhankelijk van het aantal wat gekocht wordt, totaalbedragen, etc. Er zijn zo'n 10 aanbieders met elk zo'n 5 producten. Gezien deze structuur wil ik de tarieven in een MySQL database verwerken.

Ik heb een tabel (tbl_tarieven) met de velden tarieven_id, aanbieder_id, product_id, voorwaarde, tarief. De eerste drie velden spreken denk ik voor zich. Bij 'voorwaarde' komt een condition wanneer dit tarief toegepast kan worden. Het tarief is een formule om het tarief te berekenen. Maar deze laatste twee dienen dus php-code te bevatten, daarom dacht ik gebruik te maken van eval().

Je krijgt dan bijvoorbeeld een entry als:
tarieven_id: 1
aanbieder_id: 4
product_id: 12
voorwaarde: <? If ($aantal_gekochte_producten > 10); ?>
tarief: <? 100 + ($totaalbedrag * 0,01); ?>

In de PHP-file gebruik ik dan iets als eval("?>" . $code . "<?"); om de code van voorwaarde en tarief te kunnen gebruiken.

Zit ik hiermee op de goede weg? Ik wil de invoer in de mysql-database zo clean mogelijk houden en vooral bij voorwaarde kan dat lastig, aangezien je if-else statements moet gaan gebruiken.

Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
Ik zou de php code voor die formule niet in de database zetten.

Je kan die formules beter in een functie defineren en aan de hand van de parameter aan deze functie bepalen welke formule je wilt gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn keuze voor MySQL was dat het overzichtelijker blijft en de wekelijkse wijzigingen makkelijker doorgevoerd kunnen worden. Mijn idee is dat als het binnen een php-functie staat het allemaal wat minder overzichtelijk wordt.

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Waarom defineer je niet een interface en implementeer je die interface voor elke product van elke aanbieder. De naam van die implementatie (plugin) kun je dan opnemen in de tabel.

Die interface zelf kan op basis van je topic vrij eenvoudig blijven. Je kunt een initialize methode defineren met als argument een context array (aantal gekochte producten, totaalbedrag, etc) en via een Calculate methode zou je dan het tarief terug krijgen.

de implementaties geven je alle vrijheid welke je nodig hebt, je database blijft schoon van code en je hoeft geen eval te gebruiken.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Moet ik eerlijk zeggen dat ik weinig tot geen ervaring heb met interfaces. Maar is het hiermee niet lastig om later, nadat de vergelijking is uitgevoerd, de bezoeker de mogelijkheid te geven te tonen hoe de kosten zijn opgebouwd van product X?

Bij een interface krijg je alleen maar een uitkomst toch? De berekening zelf is niet te gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

ach, je kan toch ook een extra functie opnemen, getMyCustomPriceCalcStringExplanation(), die een string retourneert met de functie in een string formaat? voor een interface heb je toch een implementatie klasse nodig...
Pagina: 1