| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Håndtere simple matematiske formler Fra : Jonas Delfs | 
  Dato :  12-12-05 23:54 |  
  |   
            Hej -
 
 Jeg har nogle simple formler som skal bruges i et script til at rette nogle 
 tal af, alt efter hvilket "apparat" brugeren har pustet i for at få tallet.
 
 Hvordan får jeg sat det pågældende tal, lad os sige $tal = 500, ind i 
 formlen
 ((X^2*0.000859)+(X*0.4009)+31.197)
 og så regnet resultatet ud?
 
 Formlerne forefindes i en MySQL database, så jeg har dem vel nødvendigvis i 
 tekst-format? Har eksperimenteret med at behandle det som en simpel 
 tekst-streng, men kan så ikke få det regnet ud?
 
 Alle gode idéer vil blive værdsat:)
 
 Mvh. Jonas 
 
 
  
            
             |   |   
            
        
 
            
         
           Rasmus Grouleff (13-12-2005) 
         
	
            | Kommentar Fra : Rasmus Grouleff | 
  Dato :  13-12-05 01:33 |  
  |   
            Jonas Delfs wrote:
 > Hvordan får jeg sat det pågældende tal, lad os sige $tal = 500, ind i 
 > formlen
 > ((X^2*0.000859)+(X*0.4009)+31.197)
 
 Følgende eksempel skulle virke (jeg har dog ikke afprøvet det):
 
 <?php
 
 $tal = 500;
 $formel = str_replace('X','$tal','((X^2*0.000859)+(X*0.4009)+31.197)');
 $resultat = eval('return '.$formel);
 echo 'resultatet er '.$resultat;
 
 ?>
 
 /Rasmus
 
 -- 
 "Ten beers are fun, one is just plain stupid"
  
            
             |   |   
            
        
 
            
         
           Jonas Delfs (13-12-2005) 
         
	
            | Kommentar Fra : Jonas Delfs | 
  Dato :  13-12-05 23:00 |  
  |   
            "Rasmus Grouleff" <spammelikecrazy@nerdd.dk> skrev i en meddelelse 
 news:zEonf.449$TT.448@news.get2net.dk...
 > Følgende eksempel skulle virke (jeg har dog ikke afprøvet det):
 >
 > <?php
 >
 > $tal = 500;
 > $formel = str_replace('X','$tal','((X^2*0.000859)+(X*0.4009)+31.197)');
 > $resultat = eval('return '.$formel);
 > echo 'resultatet er '.$resultat;
 >
 > ?>
 
 Super!
 Jeg har fuld kontrol over både formler og tal, så eval() er en fin løsning, 
 og også det første jeg prøvede af. Jeg havde dog lige misset det med 'return 
 ', men det er selvfølgelig klart hvorfor det er nødvendigt.
 
 Jeg takker!
 
 Mvh. Jonas 
 
 
  
            
             |   |   
            
        
 
            
         
           Jacob Atzen (13-12-2005) 
         
	
            | Kommentar Fra : Jacob Atzen | 
  Dato :  13-12-05 07:54 |  
  |   
            On 2005-12-12, Jonas Delfs <jonas@NOSPAMdelfs.dk> wrote:
 > Jeg har nogle simple formler som skal bruges i et script til at rette nogle 
 > tal af, alt efter hvilket "apparat" brugeren har pustet i for at få tallet.
 >
 > Hvordan får jeg sat det pågældende tal, lad os sige $tal = 500, ind i 
 > formlen
 > ((X^2*0.000859)+(X*0.4009)+31.197)
 > og så regnet resultatet ud?
 >
 > Formlerne forefindes i en MySQL database, så jeg har dem vel nødvendigvis i 
 > tekst-format? Har eksperimenteret med at behandle det som en simpel 
 > tekst-streng, men kan så ikke få det regnet ud?
 
 Den avancerede loesning er at lave en parser, der bygger et syntakstrae
 og derefter evaluere syntakstraet. Det er god muligvis overkill, hvis du
 kan noejes med den allerede foreslaaede eval metode.
 
 -- 
 Med venlig hilsen
 - Jacob Atzen
  
            
             |   |   
            
        
 
            
         
           Peter Brodersen (13-12-2005) 
         
	
            | Kommentar Fra : Peter Brodersen | 
  Dato :  13-12-05 09:18 |  
  |   
            On 13 Dec 2005 06:54:15 GMT, Jacob Atzen <jacob@aub.dk> wrote:
 
 >Den avancerede loesning er at lave en parser, der bygger et syntakstrae
 >og derefter evaluere syntakstraet. Det er god muligvis overkill, hvis du
 >kan noejes med den allerede foreslaaede eval metode.
 
 eval() er temmeligt farligt, hvis man ikke har godt kontrol over
 inputtet (fx hvis folk selv kan indtaste formler eller selv kan
 indtaste værdien for X, uden den bliver tjekket) kombineret med at man
 ikke kan stole på brugerne.
 
 Hvis de formler er er forudindtastet og godkendt, og inputtet for X
 valideret, så kan simpel søg&erstat måske være nok. Der skal dog nok
 et regulært udtryk eller lignende til for at erstatte fx 3^2 med
 POW(3,2).
 -- 
 - Peter Brodersen
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |