Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dlaczego php interpretuje to na dwa różne sposoby?
Forum PHP.pl > Forum > PHP
Arek00
mam taki kod:

  1. <?php
  2.    $cena = "185,48 PLN (zawiera 22 % VAT)";
  3.    $cena = substr($cena, 0, strpos($cena, 'PLN'));
  4.    $cena = str_replace(' ', '', $cena);
  5.    $cena = str_replace(',', '.', $cena);
  6.  
  7. if ($cena >= 100) {
  8.     echo "cena powyżej 100";
  9. } else {
  10.     echo "cena poniżej 100";
  11. }
  12.  
  13. ?>


na tym samym serwerze (home.pl) raz dostaję wynik "powyżej 100" a raz "poniżej 100". w tym drugim przypadku wydaje mi się że php nie traktuje zmiennej $cena jako liczby. próbowałem już różnych rzeczy, np.

  1. <?php
  2. <php
  3. $cena2 = 0.00;
  4. $cena2 = (float)$cena;
  5. ?>

efekt: zawartość $cena2 to "0" (zero)

może ktoś wie o co tu chodzi?
kwiateusz
ta sama wersja php? bo u mnie na php5.2.5 działa ok btw mozna tak

  1. <?php
  2. $cena = "185,48 PLN (zawiera 22 % VAT)";
  3. $cena = str_replace(',', '.', $cena);
  4. $cena = floatval($cena);
  5.  
  6. if ($cena >= 100) {
  7.    echo "cena powyżej 100";
  8. } else {
  9.    echo "cena poniżej 100";
  10. }
  11. ?>
Arek00
najpierw było php w wersji 5.2.6, teraz zmieniłem na 4.4.6 i to samo. efekt Twojego kodu jest taki sam jak mój: "0". sprawdziłem też:

  1. <?php
  2. settype($cena, "float");
  3. ?>


i też w wyniku dostaję "0"


nowe odkrycie:
utworzyłem nowy katalog w tej domenie i wstawiłem ten kod do nowego pliku (tylko ten kod) i okazało się że działa poprawnie ale jak go wstawiam do jednego z plików na których działa strona to nie chce to działać...
kwiateusz
  1. <?php
  2. $cena2 = 0.00;
  3.  
  4. printf('%.2f',$cena2)
  5. ?>


smile.gif
Arek00
a możesz mi powiedzieć co ma mi dać ten ostatni kod?

z mojego kodu zmienna $cena ma wartość "185.48" i gdy następne linijki są takie:
  1. <?php
  2. if ($cena >= 100) {
  3.    echo "cena powyżej 100";
  4. } else {
  5.    echo "cena poniżej 100";
  6. }
  7. ?>


zawsze w wyniku dostaję "cena poniżej 100"
melkorm
  1. <?php
  2.   $cena = "185,48 PLN (zawiera 22 % VAT)";
  3.   $cena = substr($cena, 0, strpos($cena, 'PLN'));
  4.   $cena = str_replace(' ', '', $cena);
  5.   $cena = (float)str_replace(',', '.', $cena);
  6.  
  7. if ($cena >= 100) {
  8.    echo "cena powyżej 100";
  9. } else {
  10.    echo "cena poniżej 100";
  11. }
  12.  
  13. ?>

powinno działać - u mnie smiga bez problemu :]

P.S. => Kolegi wyżej z floatval też działa :]
kwiateusz
moj kod miał osiagnac chyba to co chciałeś czyli pokazac 0.00

btw a moj kod z floatval probowałeś?
Arek00
próbowałem:

(float)cena
floatval($cena)
settype($cena, "float")

i zawsze po tej operacji dostaję "0"

już nawet umieściłem plik testowy (tylko z tym kawałkiem kodu) w tym samym katalogu w którym jest ten docelowy plik i w testowym jest ok a w docelowym nie....
melkorm
a może pokaż cały kod? może akurat tam masz gdzieś błąd ...
Arek00
tutaj znajduje się kod: http://wmd6.ovh.org/kod.txt

mój fragment to linie 272-291
melkorm
hm daj:
  1. <?php
  2. $cena = $ps_product->show_price($product_id);
  3. var_dump($cena);
  4. $cena = substr($cena, 0, strpos($cena, 'PLN'));
  5. $cena = (float)str_replace(',', '.', $cena);
  6. ?>


i pwiedz co to zwraca bo najwidoczniej tu jest błąd :/
Arek00
1.
  1. <?php
  2. $cena = $ps_product->show_price($product_id);
  3. var_dump($cena);
  4. ?>

efekt:
Kod
string(75) "  285,48 PLN (zawiera 22 % VAT) "

2.
  1. <?php
  2. $cena = $ps_product->show_price($product_id);
  3. $cena = substr($cena, 0, strpos($cena, 'PLN'));
  4. $cena = str_replace(',', '.', $cena);
  5. var_dump($cena);
  6. ?>

efekt:
Kod
string(38) "  285,48"

3.
  1. <?php
  2. $cena = $ps_product->show_price($product_id);
  3. $cena = substr($cena, 0, strpos($cena, 'PLN'));
  4. $cena = str_replace(',', '.', $cena);
  5. $cena2 = (float)$cena;
  6. var_dump($cena2);?>

efekt:
Kod
float(0)
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.