Berechnung aus MySQL

Diskutiere Berechnung aus MySQL im PHP Forum im Bereich Programmierung; Hallo an alle, sitze seit ca. 2 Stunden an folgendem Problem und komme zu keiner Lösung. Ich habe in meiner Datenbank folgenden Wert...
InsaYn

InsaYn

New member
Beiträge
4
Punkte Reaktionen
0
Hallo an alle,

sitze seit ca. 2 Stunden an folgendem Problem und komme zu keiner Lösung.
Ich habe in meiner Datenbank folgenden Wert: (#-32-16)/2

# ersetze ich durch einen Wert den der Benutzer einträgt um mit der Berechnung ein Leistenmaß zu erhalten.

Nur leider berechnet PHP nichts, sondern gibt mir (1200-32-16)/2 aus.

Was mache ich falsch????

Ich wäre für Lösungsvorschläge dankbar :)
 
Zuletzt bearbeitet:
InsaYn

InsaYn

New member
Beiträge
4
Punkte Reaktionen
0
PHP:
if(strpos($get['massX'],"#") !== false) {
$formel = $get['massX'];
$formel = str_replace("#", $_POST['mass'.$i], $formel);
$fertigmass1 = $formel;
}

sorry, hier der Ausschnitt

$_POST['mass'.$i] entspricht dem Wert der vom Benutzer kommt
 
S

scatello

Well-known member
Beiträge
309
Punkte Reaktionen
22
Quelle: https://stackoverflow.com/questions/18880772/calculate-math-expression-from-a-string-using-eval
PHP:
<?php
class Field_calculate {
    const PATTERN = '/(?:\-?\d+(?:\.?\d+)?[\+\-\*\/])+\-?\d+(?:\.?\d+)?/';

    const PARENTHESIS_DEPTH = 10;

    public function calculate($input){
        if(strpos($input, '+') != null || strpos($input, '-') != null || strpos($input, '/') != null || strpos($input, '*') != null){
            //  Remove white spaces and invalid math chars
            $input = str_replace(',', '.', $input);
            $input = preg_replace('[^0-9\.\+\-\*\/\(\)]', '', $input);

            //  Calculate each of the parenthesis from the top
            $i = 0;
            while(strpos($input, '(') || strpos($input, ')')){
                $input = preg_replace_callback('/\(([^\(\)]+)\)/', 'self::callback', $input);

                $i++;
                if($i > self::PARENTHESIS_DEPTH){
                    break;
                }
            }

            //  Calculate the result
            if(preg_match(self::PATTERN, $input, $match)){
                return $this->compute($match[0]);
            }
            // To handle the special case of expressions surrounded by global parenthesis like "(1+1)"
            if(is_numeric($input)){
                return $input;
            }

            return 0;
        }

        return $input;
    }

    private function compute($input){
        $compute = create_function('', 'return '.$input.';');

        return 0 + $compute();
    }

    private function callback($input){
        if(is_numeric($input[1])){
            return $input[1];
        }
        elseif(preg_match(self::PATTERN, $input[1], $match)){
            return $this->compute($match[0]);
        }

        return 0;
    }
}

// ********************************* Ab hier deine Sachen *******************************
$massX = "(#-32-16)/2";

$mass = 1200;

if(strpos($massX,"#") !== false)
{
  
   $formel = $massX;
   $formel = str_replace("#", $mass, $formel);
  
   $Cal = new Field_calculate();

   $fertigmass1 = $Cal->calculate($formel);

   echo $formel . " > " . $fertigmass1;
}
?>
 
InsaYn

InsaYn

New member
Beiträge
4
Punkte Reaktionen
0
extrem stark, es funktioniert,

vielen vielen Dank
 
Thema:

Berechnung aus MySQL

Oben Unten