Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Php ile noktalı fiyat yazdırma

Merhaba arkadaşlar, bir site üzerinde çalışıyorum ve takıldığım bir nokta var. Bilen arkadaşlar için çok basit bir çözümü vardır belki. Yardımlarınızı rica ediyorum.

Ürün fiyatı için veritabanında oluşturduğum kolonun veri tipini float olarak seçtim.
Yönetici panelden örneğin en fazla 999 lira 50 kuruşluk bir değer girdi diyelim.
Bu değeri ya 999,50(virgüllü) şeklinde girebilir yada 999.50(noktalı) şeklinde girebilir. Böyle bir durumda yöneticinin girdiği değerin içinde virgül varsa str_replace fonksiyonu sayesinde virgülü noktaya dönüştürüp veritabanına kaydediyorum. Buraya kadar hiç bir sorun yok.

Fakat yönetici bin lira üzeri bir değer girdiğinde ve bu değer virgüllü olduğunda işin içinden çıkamıyorum. Örneğin yönetici 1.958,50 girerse veritabanına 1.958 diye kayıt oluyor. Buda haliyle gidişatımın yanlış olduğunu gösteriyor. Bu durumu nasıl aşarım? Çözüm için fikirlerinizi rica ediyorum.
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • tapsin adlı üyenin fotoğrafı
    12 yıl önce yazılmış
    147 cevap - 0 soru
    virgül ve noktalardan bölersin split ile sonra eğer 3 parça çıkarsa bölünmüş parça sayısı üçüncü parça küsürat diğer iki parçayı birleştirip database yaz derseniz sorun kalkar..
    • tapsin adlı üyenin fotoğrafı tapsin
      $deger="1000,000,12";

      $bol=split('[.,]',$deger);
      $i=count($bol);
      $say=strlen(substr($bol[$i-1],0));
      $c=0;
      if($say==2){
      $s=count($bol)-1;
      while($c<$s){
      echo $bol[$c];
      $c++;
      }
      echo ".".substr($bol[$i-1],0);
      }
      12 yıl önce yazılmış
    • tapsin adlı üyenin fotoğrafı tapsin
      İster virgüllü ister noktalı DB ye veriyi direk kaydet sonra verilen sayının sonunda son hane 2 rakamsa onu küsürat olarak ekrana basar..
      Yeterli mi ?
      12 yıl önce yazılmış
    • tapsin adlı üyenin fotoğrafı tapsin
      $deger="1500,450.458,25";
      
      $bol=split('[.,]',$deger);
      $i=count($bol);
      $say=strlen(substr($bol[$i-1],0));
      $c=0;
      if($say==2){
      	$s=count($bol)-1;
      	while($c<$s){
      	echo $bol[$c];
      	$c++;
      	}
      	echo ".".substr($bol[$i-1],0);
      }else{
      	
      	$s=count($bol);
      	while($c<$s){
      	echo $bol[$c];
      	$c++;
      	}
      }
      


      Sonra iki hane olarak küsürat yazılmamışsa else den sonraki döngü işler
      12 yıl önce yazılmış
    • huseyiniskender adlı üyenin fotoğrafı huseyiniskender
      Merhaba, verdiğiniz mantık ve kodlardan yararlanarak iki adet fonksiyon yazdım. Yardımlarınız için çok teşekkür ederim. Kodların son halini başkalarınada yararı olur düşüncesiyle paylaşıyorum. Tekrardan çok teşekkür ederim.

      <?php
      
      $fiyat="1.958,50";// veya 1958,50 diye girilebilir.
      
      function donusum($deger){
      $deger=str_replace(".","",$deger);
      $deger=str_replace(",",".",$deger);
      return $deger;
      }
      
      function turk_usulu($deger){
      $toplam=number_format($deger, 2);
      $dizi=explode(".",$toplam);
      if(count($dizi)==2){ $sol=str_replace(",",".",$dizi[0]); $son=$sol.",".$dizi[1]; return $son; }else{ $son=str_replace(",",".",$toplam); return $son; }
      }
      
      echo donusum($fiyat); // İşlem yaparken veya veritabanına kaydederken donusum fonksiyonu.
      echo "<br />";
      echo number_format(donusum($fiyat),2); // Yabancılar gibi yazdırmak için.
      echo "<br />";
      echo turk_usulu(donusum($fiyat)); // Ekrana yazdırırken Türk usulü yazdırmak için.
      
      ?>
      
      12 yıl önce yazılmış

Cevaplar

  • siyahbeyaz adlı üyenin fotoğrafı
    12 yıl önce yazılmış
    472 cevap - 20 soru
    o kadar koda ne gerek var :)

    function vdegis($veri)
    {
    $veri = str_replace(".","",$veri);
    $veri = str_replace(",",".",$veri);
    return $veri;
    }
    


    yeterlidir.. adam 99,50 olarak girerse db ye 99.50 olarak kaydeder..

    12.000,99 olarak girerse db ye = 12000.99 olarak kaydeder.. ben tum fıyatları bole yaparım vdegis(deger) bana float a cevırır..
    • siyahbeyaz adlı üyenin fotoğrafı siyahbeyaz
      $fiyat = "15.000,99";
      
      $cevirfiyat = vdegis($fiyat);
      
      mysql_query("insert into testtablo (fiyat) values ($cevirfiyat)");
      


      db de 15000.99 olarak görünüor.. buda dogru eklenmis demektir
      float(10,2) seklinde yapilimi field in belkide sorunun orda :)

      function para($veri = 0)
      	{
              $veri    =    number_format($veri,2,",",".");
              return $veri;
          }
      


      buda para formatında yazman ıcın
      12 yıl önce yazılmış
    • huseyiniskender adlı üyenin fotoğrafı huseyiniskender
      Zahmetin için teşekkür ederim. Sorunum halloldu. Dediğin gibi field seçimide bir etkenmiş, float(8,2) şeklinde yapınca sorunum kalmadı.
      12 yıl önce yazılmış
  • cem adlı üyenin fotoğrafı
    7 yıl önce yazılmış
    7 yıl önce güncellenmiş
    1 cevap - 0 soru
    merhaba arkadaslar benim sorunu 12.56 tl diye yazsin istiyorum ben boyle yaziyorum ve sitede baktigimda 1.256 tl degerini aliyor benim istedigim 12.56 tl boyle olsun kodlari veriyorumduzenliyen arkadasa minnetar olurum 2 aydir yapamadim php bilmiyorum tesekurler.....

    function fiyat2($fi,$kur){
    $temizle = str_replace(".","",$fi);
    $temizle = str_replace(",","",$fi);
    $kachane = strlen($temizle);
    if ($kachane == 1){
    $fiyat = $temizle;
    } elseif ($kachane == 2){
    $fiyat = $temizle;
    } elseif ($kachane == 3){
    $fiyat = $temizle;
    } elseif ($kachane == 4){
    $fiyat = substr($temizle,0,1).".".substr($temizle,1,3);
    } elseif ($kachane == 5){
    $fiyat = substr($temizle,0,2).".".substr($temizle,2,3);
    } elseif ($kachane == 6){
    $fiyat = substr($temizle,0,3).".".substr($temizle,3,3);
    } else {
    $fiyat = substr($temizle,0,1).".".substr($temizle,1,3).".".substr($temizle,4,3);
    }
    return $fiyat;
    }
    function fiyat($fi){
    $p = explode(".",$fi);
    $kachane = strlen($p[0]);

    if ($p[1] == 00){
    $fiyat = $p[0];
    } else {
    $fiyat = $p[0].".<sup>".$p[1]."</sup>";
    }
    $p = explode(".",$fiyat);
    if ($p[1] == ""){ $p1[1] = ""; } else { $p[1] = ".".$p[1];}

    if (strlen($p[0]) == 4){
    $fiyat = substr($p[0],0,1).".".substr($p[0],1,3).$p[1];
    }
    if (strlen($p[0]) == 5){
    $fiyat = substr($p[0],0,2).".".substr($p[0],2,3).$p[1];
    }
    if (strlen($p[0]) == 6){
    $fiyat = substr($p[0],0,3).".".substr($p[0],3,3).$p[1];
    }
    if (strlen($p[0]) == 7){
    $fiyat = substr($p[0],0,4).".".substr($p[0],4,3).$p[1];
    }
    if (strlen($p[0]) == 8){
    $fiyat = substr($p[0],0,5).".".substr($p[0],5,3).$p[1];
    }
    return $fiyat;
    }


    ===========================================================================================================

    Buda forum kisminda gorunen input bunuda yukardakine gore nasil duzenleriz


    <label>Fiyat</label>
    <input name="fiyat1" type="text" id="fiyat1" onKeyDown="sayiMi();" value="<? echo fiyat($z['fiyat']); ?>" onFocus="this.value='';" onBlur="changeFormat(this)" class="form-control" placeholder="0.00" onkeyup="hesapla()" />