[PHP] formule uit database berekenen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
Hallo!
Ik ben bezig met een script waarbij uit een database een bepaalde formule wordt gehaald, bijvoorbeeld: "(points/1000)*.8"
Wanneer ik dit uit de tabel haal en points vervang door een variabele ($user['points'] bijvoorbeeld), zou ik graag willen dat er een antwoord ge-echood wordt.
Dus als $user['points'] 100 is, is de oplossing ((100/1000)*.8)=.08, dan wil ik dat dat getoond wordt.
Is dit mogelijk of hoe kan ik dit mogelijk maken?

Bedankt!
Eduard

PS. nu heb ik:
PHP:
1
2
3
$chosendeed = mysql_fetch_assoc(mysql_query('SELECT * FROM deeds WHERE id='.$_POST['choosedeed'])) or die(mysql_error());
$formula = ereg_replace('honor', $user['honor'], $chosendeed['winformula']);
echo intval($formula);

($chosendeed['winformula'] is de formule, $formula is de bewerkte formule)

Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Ik schaam me om dit te zeggen, maar ik vrees dat eval de oplossing is.

Ik zal maar niet ingaan op het hoe en waarom van het textueel opslaan van formules in een database en het gewoon laten bij het antwoord, anders blijven we bezig, nietwaar? :)

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
Bedankt voor je reactie.
Ik zou het echter zeer op prijs stellen om advies te krijgen over hoe ik dit beter kan aanpakken..
Als ik dit bij het begin al fout aanpak, zal het later waarschijnlijk nog lastiger worden.

Zou je iets meer willen uitleggen?

Bedankt

Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
Het gevaar van eval is dat je elke willekeurig code kan laten uitvoeren, dus ook:
PHP:
1
2
3
<?
exec ('formatteer c schijfje'); \\ wat uiteindelijk niet zou werken, maar dat je het kan aanroepen is al te veel
?>
Wat mooier zou zijn daarom is een functie/class die je formule gaat evalueren, alleen is dat wel een stuk ingewikkelder vanwege het feit dat je dan zelf opnieuw de wiskunde regels moet gaan implementeren. (met stacks en dergelijke om dingen in de juiste volgorde uitgevoerd te krijgen).

Wel heb ik in PEAR hiervoor een class gevonden welke dergelijke functionaliteit bevat: http://pear.php.net/package/Math_RPN/download, alleen aangezien je waarschijnlijk zelf niet het PEAR framework gebruikt zou je de volgende aanpassing moeten maken:
code:
1
2
3
4
5
6
op regel 134:
   return PEAR::raiseError($error);
moet worden
   echo "Math error: " , $error . "\n";
   return " ";
of iets dergelijks


Je kan dan deze class dan als volgt gebruiken:
PHP:
1
2
3
4
5
6
7
include 'RPN.php';
$rpn = new Math_Rpn();

$chosendeed = mysql_fetch_assoc(mysql_query('SELECT * FROM deeds WHERE id='.$_POST['choosedeed'])) or die(mysql_error()); 
$formula = ereg_replace('honor', $user['honor'], $chosendeed['winformula']); 

echo $rpn->calculate( $formula, 'deg', false );
Een andere oplossing zou zijn om de formules niet in de database op te slaan, maar deze in PHP zelf te stoppen.

[ Voor 12% gewijzigd door pjotrk op 07-11-2004 13:57 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Het was te vroeg op de ochtend om iets zinnigs te zeggen

[ Voor 75% gewijzigd door Verwijderd op 08-11-2004 08:40 ]