Avatar billede Six Nybegynder
13. august 2007 - 00:39 Der er 29 kommentarer og
1 løsning

PHP: Beregne textstreng

Hej eksperter.

Det er måske simpelt, men jeg er efterhånden helt blank her.

Hvis jeg har en variabel:

$regnestykke = "((4*100)/9)";

Hvordan får jeg så lige php til at behandle regnestykket ?

Det virker jo fint hvis $regnestykke = ((4*100)/9);
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:06 #1
Prøv med eval: $regnestykke = eval("((4*100)/9)");
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:08 #2
Manual: http://dk2.php.net/eval

- Svar
Avatar billede Six Nybegynder
13. august 2007 - 01:27 #3
Tak for svaret the surfer, men jeg har kigget eval igennem - og jeg kan ikke bruge eval("((4*100)/9)");

Jeg bliver nødt til at bruge eval($regnestykke) hvis jeg skal gøre noget, og så virker det stadig ikke.

Problemet er at jeg vil prøve at lave en regnemaskine til phpbb og så bruge phpbb kode til det..

[calculate]((4*100)/9)[/calculate] - derefter trækker jeg så regnestykket ud. På den måde kan jeg kun have det i en variabel :/
Avatar billede Six Nybegynder
13. august 2007 - 01:34 #4
Her er min kode pt.

<?PHP
    $input = "[calculate]((4*100)/9)[/calculate]";
    //$search = "[calculate]";
    //$input = stristr($input, $search);
    $ding = strpos($input, "[calculate]", 0)+11;
    $do = strpos($input, "[/calculate]", 0)-11;
    $final = eval(substr($input, $ding, $do));

    echo $final;
    echo round($final,2)."%";
?>
Avatar billede Six Nybegynder
13. august 2007 - 01:35 #5
Den giver mig unexpected $end
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:36 #6
Prøv det her:

<?PHP
    $input = "[calculate]((4*100)/9)[/calculate]";
    //$search = "[calculate]";
    //$input = stristr($input, $search);
    $ding = strpos($input, "[calculate]", 0)+11;
    $do = strpos($input, "[/calculate]", 0)-11;
    $final = substr($input, $ding, $do)
    //$final = eval(substr($input, $ding, $do));

    echo $final;
    //echo round($final,2)."%";
?>

Hvad skriver den så at $final er?
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:37 #7
Skriv hele fejlmedelelsen, når du får fejl.. det andet kan man ikke bruge til noget..
Avatar billede Six Nybegynder
13. august 2007 - 01:38 #8
Parse error: parse error, unexpected $end in c:\apache\htdocs\calc\index.php(7) : eval()'d code on line 1
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:40 #9
Har du prøvet 13/08-2007 01:36:59 ?
Avatar billede Six Nybegynder
13. august 2007 - 01:40 #10
Med din kode er fejlen: Parse error: parse error, unexpected T_ECHO in c:\apache\htdocs\calc\index.php on line 11
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:41 #11
Jeg mangler et ";" efter min $final linie..

Prøv:

<?PHP
    $input = "[calculate]((4*100)/9)[/calculate]";
    //$search = "[calculate]";
    //$input = stristr($input, $search);
    $ding = strpos($input, "[calculate]", 0)+11;
    $do = strpos($input, "[/calculate]", 0)-11;
    $final = substr($input, $ding, $do);
    //$final = eval(substr($input, $ding, $do));

    echo $final;
    //echo round($final,2)."%";
?>
Avatar billede Six Nybegynder
13. august 2007 - 01:43 #12
kæft mand.. jeg var lige helt blank.. den kode havde virket før, men jeg overså så også selv lige ; - nå anyways output = ((4*100)/9)
Avatar billede Six Nybegynder
13. august 2007 - 01:43 #13
altså dvs. $final = ((4*100)/9)
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:44 #14
Prøv med:

    $final = substr($input, $ding, $do);
    $final = eval($final);

    echo $final;
    //echo round($final,2)."%";
Avatar billede Six Nybegynder
13. august 2007 - 01:45 #15
Parse error: parse error, unexpected $end in c:\apache\htdocs\calc\index.php(9) : eval()'d code on line 1
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:51 #16
Ahh...

Det skal være:

eval("$final = " . substr($input, $ding, $do) );

Jeg havde misforstået eval i PHP.. :-)
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:52 #17
Eller noget i den stil..

Anyways..

hvis du normalt ville gøre sådan her:

$a = 5;

skal du gøre sådan her:

eval("$a = 5");

Så skulle det virke..
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:53 #18
Jeg er ikke særlig god til at skifte mellem variabler og strenge i PHP.. :-)

Så det er nok ikke "$final = " . substr($input, $ding, $do), men noget i den stil..
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:54 #19
Det her virker:

eval("\$final = " . substr($input, $ding, $do) . ";" );
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:55 #20
Så, den sidste kode er:

<?PHP
    $input = "[calculate]((4*100)/9)[/calculate]";
    //$search = "[calculate]";
    //$input = stristr($input, $search);
    $ding = strpos($input, "[calculate]", 0)+11;
    $do = strpos($input, "[/calculate]", 0)-11;
    eval("\$final = " . substr($input, $ding, $do) . ";" );

    echo $final;
    echo round($final,2)."%";
?>
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:56 #21
Det vil nok være en god ide, at slå "echo $final;" fra.. :-)

<?PHP
    $input = "[calculate]((4*100)/9)[/calculate]";
    //$search = "[calculate]";
    //$input = stristr($input, $search);
    $ding = strpos($input, "[calculate]", 0)+11;
    $do = strpos($input, "[/calculate]", 0)-11;
    eval("\$final = " . substr($input, $ding, $do) . ";" );

    //echo $final;
    echo round($final,2)."%";
?>
Avatar billede Six Nybegynder
13. august 2007 - 01:59 #22
hmm den linie du gav mig giver: Parse error: parse error, unexpected '=' in c:\apache\htdocs\calc\index.php(9) : eval()'d code on line 1
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:59 #23
Hos mig udskriver den: 44.44%

..hvis jeg kommenterer "echo $final;" ud.. :-)
Avatar billede thesurfer Nybegynder
13. august 2007 - 01:59 #24
Jeg har testet følgende, og det virker fint:

<?PHP
    $input = "[calculate]((4*100)/9)[/calculate]";
    //$search = "[calculate]";
    //$input = stristr($input, $search);
    $ding = strpos($input, "[calculate]", 0)+11;
    $do = strpos($input, "[/calculate]", 0)-11;
    eval("\$final = " . substr($input, $ding, $do) . ";" );

    //echo $final;
    echo round($final,2)."%";
?>
Avatar billede Six Nybegynder
13. august 2007 - 02:00 #25
det sidste kode spiller! Det er famer i orden det der :D - du skal have mange tusinde gange tak for hjælpen :D
Avatar billede Six Nybegynder
13. august 2007 - 02:01 #26
der røg sgu lige 20 point oveni for din indsats :D Nu har jeg så endelig en reference til eval funktionen :D (Som om den på php.net ikke skulle være god nok) :P
Avatar billede thesurfer Nybegynder
13. august 2007 - 02:03 #27
Hehehe..

Jeg plejer normalt at bruge VARIABEL = eval("noget her"); i JavaScript.. men det må man så åbenbart ikke i PHP.. :-)

Det var så lidt.. Takker for points, og god nat.. :-)
Avatar billede morhan Novice
13. august 2007 - 10:48 #28
jeg tror ikke du må bruge eval på den måde, når inputtet kommer fra brugere på dit site. Det er den direkte vej til hacking af dit site
Avatar billede thesurfer Nybegynder
13. august 2007 - 12:34 #29
morhan> Hmm.. God pointe..

fjappe> Se om du ikke kan finde en anden måde, at håndtere inputtet ("((4*100)/9)")..
Avatar billede Six Nybegynder
13. august 2007 - 12:44 #30
Den har jeg luret :D - jeg vil selvfølgelig lave validering på det. Men tak for at gøre mig opmærksom på det :D

Min ide vil være at tjekke efter matematik tegn i strengen og se om strengen indeholder tal. Bedre ideer er velkommen :D

PS: Det er til eget forbrug, så det gør ingen skade. Jeg laver det mest for at lære og så bare at prøve at lave en custom bbcode til phpbb.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester