Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] $_GET dzialania matematyczne str int..
Forum PHP.pl > Forum > Przedszkole
dangesamurai
Witam.
kontekst kodu mniej istotny, więc od razu do sedna...
Za pomocą GET'a pobieram dane z formularza. Następnie zamieniam "x" na "$x" za pomocą str_replace();
i:
  1. <?php
  2. $x = 2;
  3. $wzor =$_GET['wzor'];
  4. $zmieniony_wzor=str_replace("x","$x",$wzor);
  5. echo $zmieniony_wzor;
  6. echo " ---- ";
  7. $zmieniony_wzór_int= (int)$zmieniony_wzor;
  8. echo $zmieniony_wzór_int;
  9. ?>

po wpisaniu do formularza x.....................drukuje "2 ---- 2" - ok party.gif
.....................................x*2.................drukuje "2*2 ---- 2" bardzo nie ok
itp
a celem jest:.........................................druk......"2*2----4"
uprzejmie proszę o podpowiedzi.
Pozdrawiam.
dangesamurai
tak tez myslalem.. juz wczesniej kombinowale z ta funkcja... ale przyznam ze czytajac o niej na manualu nie potrafie ja do konca zrozumiec... jak ja zastosowac u mnie..

zawartosc $_GET przed zamiana na int wrzucic do eval() questionmark.gif how ;/

dodam jeszcze dla wiekszej jasnosci, ze wartosć $x jest dobrze przekazywana
Problem jednak w operatorach mat: * + / ... wydaje mi sie ze pozostaja pominiete... questionmark.gif prosze o jakiekolwiek sugestie..
athei
Jeśli $wzor ma postać 'x+x' bo nie wiem czy dobrze zrozumiałem to:
  1. <?php
  2. $wzor = urldecode($_GET['wzor']);
  3. $wynik= eval("return {$zmieniony_wzor};");
  4. echo $wynik;
  5. ?>

Nie używaj polskich znaków w nazwach zmiennych.
dangesamurai
Działa tym razem przy * i / (działaja tez funkcjie sin() abs() itp....)
wysypuje eval() przy + i -

fragment prog generujacego funkcje

  1. <?php
  2. $x=$od_x;
  3.        while ($x<$do_x) {
  4.        
  5.          $wzor= urldecode($_GET['wzor']);  //pobiera wpisany wzor f. do zmiennej
  6.            $wzor_x=str_replace("x","$x",$wzor);
  7.            $wzor_x1=str_replace("x","$x1",$wzor); //
  8.            $funkcjax= eval("return {$wzor_x};"); //
  9.            $funkcjax1= eval("return {$wzor_x1};"); //
  10.            //generowanie
  11.            $x=$x+0.1;
  12.            $x1=$x+0.1;
  13.            $y=$funkcjax;
  14.            $y1=$funkcjax1;
  15.            $xx=$x*$skala_x+$szer/2;
  16.            $yy=(-1*$y*$skala_y)+$wys/2;
  17.            $xx1=$x1*$skala_x+$szer/2;
  18.            $yy1=(-1*$y1*$skala_y)+$wys/2;
  19.            imageline($gd, $xx, $yy, $xx1, $yy1, $czerwony);
  20.            
  21.        }
  22. ?>
athei
Użyj rawurlencode()" title="Zobacz w manualu PHP" target="_manual i odpowiednio pozamieniaj znaki matematyczne, np
  1. <?php
  2. $x = 2;
  3. $wzor = rawurlencode($_GET['wzor']);
  4. $zmieniony_wzor = str_replace(array("%20", "%2A", "%2F", "x"), array("+", "*", "/", $x), $wzor);
  5. $wynik= eval("return {$zmieniony_wzor};");
  6. echo $wynik;
  7. ?>


Wydaje mi się, że będziesz musiał zmienić metodę get na post gdybyś chciał wykrywać spacje.
Uzywając get bedą one zamieniane na znak "+" czyli %20, znak "+" będzie zamieniany na %20 czyli na to samo co spacja, więc nie ma różnicy.
Kod
Powiedzmy, że w url masz plik.php?wzor= +
urlencode($_GET['wzor']) daje string(2) "++"
rawurlencode($_GET['wzor']) daje string(6) "%20%20"
czysty $_GET['wzor'] daje string(2) " "

natomiast używając post
urlencode($_POST['abc']) daje string(4) "+%2B"
rawurlencode($_POST['abc']) daje string(6) "%20%2B"
czysty $_POST['abc'] daje string(2) " +"

Różnicę widać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.