Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] $_GET dzialania matematyczne str int..
dangesamurai
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/party.gif)
.....................................x*2.................drukuje "2*2 ---- 2" bardzo nie ok
itp
a celem jest:.........................................druk......"2*2----4"
uprzejmie proszę o podpowiedzi.
Pozdrawiam.

Ten post edytował dangesamurai 27.07.2009, 20:36:33
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


eval" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
dangesamurai
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


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() (IMG:http://forum.php.pl/style_emoticons/default/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... (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) prosze o jakiekolwiek sugestie..
Go to the top of the page
+Quote Post
athei
post
Post #4





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował athei 28.07.2009, 19:33:42
Go to the top of the page
+Quote Post
dangesamurai
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował dangesamurai 29.07.2009, 08:11:34
Go to the top of the page
+Quote Post
athei
post
Post #6





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował athei 29.07.2009, 10:06:13
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 07:04