Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

"Hit"lerde hata

Konu, 'PHP' kısmında Endless Scream tarafından paylaşıldı.

  1. Endless Scream

    Endless Scream Üye

    Kayıt:
    29 Ekim 2002
    Mesajlar:
    46
    Beğenilen Mesajlar:
    0
    sayfamda garip bişi oldu... açıkcası neden olduğunu pek anlayamadım. server
    kaynaklı bir sorunda olabilir bu. telaşlandım :) çözmek için arkadaşlara danışalım dedim


    sayfada "bu eser şu kadar kere okunmuştur" die bi ibare var. sayfa her
    yüklendiğinde databaseden +1 ile güncelleme yapıyor.

    kod;

    <?
    $sonuc=@mysql_db_query($db_veritabani,"select
    sayi_id,id,isim,mail,baslik,metin,hit FROM sizden WHERE id='$idd'");
    while($sizden=@mysql_fetch_array($sonuc)){
    $s_sayi =$sizden["sayi_id"];
    $s_id =$sizden["id"];
    $s_isim =$sizden["isim"];
    $s_mail =$sizden["mail"];
    $s_baslik =$sizden["baslik"];
    $s_metin =$sizden["metin"];
    $s_hit =$sizden["hit"]+1;
    $sorgu = "update sizden set hit='$s_hit' where id='$s_id'";
    $hitart = mysql_query($sorgu,$baglanti);
    ?>

    şeklinde... zaten sonradan da echo ile s_hit çağrılıyor.

    normalde çalışıyor. ancak bugün bir arkadaşın uyarısı ile tekrar gözden
    geçirdim de; hitler sayfayı refresh ettiğinde düzgün olarak artıyor. ancak
    bir zaman gelince, sayfa hitlerinin garip şekilde değiştiğini farkettim.
    yani dün sallıyorum 50 olan hit, bugün 14 görünüyor. nasıl yani diyosun..
    bunu yeni farkettim.

    ama saçma bi hata bu... neden olduğunu kestiremedim. sonuçta kodlarda bir
    sorun yok. serverla mı konuşsam ?

    hadi adamlar sürekli yedekleme yapıyorlar ve sonra eski halini geri
    atıyorlar desek, z.defteri ve forum gibi bölümlerde sağlam kalmazdı..

    açıkcası fazlada bir yorum getiremiyorum çünkü aslında çalışan bir kodnasıl oluyorda sonradan kendini sıfırlıyor pek anlayamadım.

    nerde hata var? sorun ne olabilir? sizlerden yardım beklyorum :()
     
  2. mkarabulut

    mkarabulut Misafir

    Selamlar hocam;
    <konu_disi>
    Ne ilginç ben mu metni bi yerden hatırlıyorum ama sanırım geçen hafta meşguliyetler bir de üstüne windows'u yeniden kurup eski mailler gidince cevap yazmaya çalışmak burada kısmet oldu... :) Kusuruma bakmazsın umarım...

    Ama sanırım forum daha rahat oluyor,en azından mesajlar kaybolmuyor,hep göz önünde... :)
    </konu_disi>

    Herneyse hocam,
    Veritabanında hit alanını hangi tipte tanımladın. Mesela atıyorum int(2) diye tanımlarsan belli bir yerden sonraki sayılar 2 byte ile ilfade edilebilecek sınırı aştığı için belki sıfır atanmasına sebep olabilir...

    Ayrıca sorguyu gönderirken daha iyisi şöyle yapabilirsin...
    ... SET hit=hit+1 WHERE...

    Evet hangi tipte tanımladın alanı .. ?
     
  3. Endless Scream

    Endless Scream Üye

    Kayıt:
    29 Ekim 2002
    Mesajlar:
    46
    Beğenilen Mesajlar:
    0
    CREATE TABLE sizden (
    id int(3) NOT NULL auto_increment,
    sayi_id int(2) NOT NULL default '0',
    isim varchar(40) NOT NULL default '',
    mail varchar(40) NOT NULL default '',
    baslik varchar(40) NOT NULL default '',
    metin longtext NOT NULL,
    hit int(3) NOT NULL default '0',
    PRIMARY KEY (id),
    FULLTEXT KEY baslik (baslik)
    ) TYPE=MyISAM;


    evet. aslında bunu bende düşündüm. ancak SQLde hit bölümü 3 karakter demişiz. yani 9999'e kadar çıkabilir demek değil mi bu? yazıların o kadar hit aldığını sanmıyorum.

    artı ben bunu ilk denediğim de, yani bilgisayarımda denediğimde yüksek bir değer vermiş ve sayfayı göstertmiştim. yani bu sayfa 2876 kere okundu ibaresini görmüştüm. ama gördüğümüz kadarıyla default u "0" olduğu için hep oraya dönüyor.

    ne diyorsun mustafa hocam ?

    set bölümü olması ya da bendeki gibi farklı bir yerde +1 olması bu hataya neden olabilir mi? ya da hızlandırır mı olayı ?
     
  4. mkarabulut

    mkarabulut Misafir

    3 byte sanırım yeterli bir sayı...

    1 byte 8 bit eder ve 8 bit ile maximum 256 sayı tanımlanabilir. Ama
    bunun içinde negatif sayılar ve 0 da olduğu için 1 byte ile -128 ve 127 aralığındaki sayıları tanımlayabiliriz.
    Hal böyle olunca 3 byte ile 16,777,216 sayı tanımlanabilir. Bunun yaklaşık yarısı 8 milyon pozitif sayı demektir.
    8 milyon da yeterli sanırım ?
    <konu_disi>
    Bu arada bir hatırlatma gördüğün gibi hit gibi negatif değer olması imkansız durumlarda ınt tipini unssigned özelliği ile kullanmak daha avantajlı...
    </konu_disi>

    Bilemiyorum bir terslik var ama görünüşe göre veritabanı ile ilgili değil.
    Gene de sen UPDATE ederken hit artırmayı SQL içinde yap... Belki kod da bilemediğimiz bir hata da SQL stringine e değişken değerinin düzgün gitmemesine sebep oluyordur..

    Yani hocam,diyebileceğim pek de bir şey yok aslında ...
     
  5. sokrates

    sokrates Daimi Üye

    Kayıt:
    8 Temmuz 2002
    Mesajlar:
    537
    Beğenilen Mesajlar:
    0
    Meslek:
    Web Programmer
    Şehir:
    istanbul
    ustat yine guzel konulari girmissin
    simdi benim yukaridan anladigim tamsayi tipini int ve uzunlugunu 3 byte olarak belirtirsek tabloya 8 milyon kusur pozitif deger girebiliriz mi demek bu
     
  6. mkarabulut

    mkarabulut Misafir

    Evet aynen öyle...
    Eğer unsigned int olarak tanımlanırsa 3 byte ile yaklaşık 16 milyon verilebilecek en büyük değer olur
     
  7. sokrates

    sokrates Daimi Üye

    Kayıt:
    8 Temmuz 2002
    Mesajlar:
    537
    Beğenilen Mesajlar:
    0
    Meslek:
    Web Programmer
    Şehir:
    istanbul
    tesekurler kardes
    bugune kadar katletmisim vt leri yaw 6 dan asagi girdigim pek gorulmemistirde:rolleyes:
     
  8. mkarabulut

    mkarabulut Misafir

    Çok büyük bir hata yapmışım düzeltiyorum :
    mysql dokumantasyonuna göre INT(3) gibi bir tanımlama 3 byte uzunluğunda bir integer demek değilmiş..
    Sadece integer değerin gösterilirken digit uzunluğu ile ilgili bir ayarmış...

    Sayısal tiplerin ise kullandıkları byte değerleri ise sabitmiş
    Kod:
    TINYINT 1 byte  -128  127
    SMALLINT 2 byte -32768  32767
    MEDIUMINT 3 byte -8388608  8388607
    INT 4 byte -2147483648  2147483647
    BIGINT 8 byte -9223372036854775808  9223372036854775807
    
    Yanlışlıktan dolayı özür dilerim....
     
  9. sokrates

    sokrates Daimi Üye

    Kayıt:
    8 Temmuz 2002
    Mesajlar:
    537
    Beğenilen Mesajlar:
    0
    Meslek:
    Web Programmer
    Şehir:
    istanbul
    ne demek kardes duzeltigin icin bir tesekur ederiz:)

    o zaman int(6) gibi bir tanimlamanin bir anlami yokmu demek oluyo bu ,yani int(4) olarakmi algiliyo int(6) dedigimiz zaman
     
  10. Endless Scream

    Endless Scream Üye

    Kayıt:
    29 Ekim 2002
    Mesajlar:
    46
    Beğenilen Mesajlar:
    0
    benim sorunuma dönelim mi :)

    int de verilen değer, bildiğim kadarıyla, karakter sayısıdır.

    yani int 3 verilen değer en fazla 4 karakter alabilir. şifre-kullanıcı adı olaylarında işe yarıyor. "0" yüzünden bir fazlası yani :)

    kodda hata olsa kendi bilgisayarımda da sorun yaratmaz mıydı hocam?

    ama yine de bana sizin kullandığınız hit kodlarını örnek olarak yazarsanız bir karşılaştırmak istiyorum. ben ilk mesajımda yazdığım kodu kendim yazdım o yüzden sorun olabilir tabii :)

    aslına bakarsanız acaba diyorum, hit arttıktan sonra bir bağlantı sorunu nedeniyle sQL ile ilişkisi kesilip daha sonra defaulta dönüyor olabilir mi? yani örneğin sayfanın yüklenmesi tamamlanmadan böyle bir hata oluşması durumunda desek...

    hani hep böyle abuk subuk hatalar beni bulur ya :) acaba böyle bişi mi diyorum. yorumlamak son derece zor. yani hiti 1000'in üzerine çıkmış bir sayfa hata 7-8 gösteriyor beni sinir sitres ediyor.:)

    sayfadaki bağlantı kodlarını zaten ilk mesajımda yazmıştım. sayfada onun dışında bir bağlantı durumu yok. sonradan bağlantıda çektiği değerleri yerleştiriyor normal html ile.

    ama dediğim gibi yine de siz hangi kodu kullanıyorsunuz bu iş için. karşılaştırmak istiyorum.
     
  11. pofidik

    pofidik Üye

    Kayıt:
    28 Ekim 2005
    Mesajlar:
    46
    Beğenilen Mesajlar:
    0
    Endless Scream bu sorunu hallettin mi acaba? Buraya yazarsan iyi olur.
     
  12. turker

    turker Agresif Üye

    Kayıt:
    19 Temmuz 2002
    Mesajlar:
    5,988
    Beğenilen Mesajlar:
    0
    Endless Scream en son 14/06/2005 tarihinde siteye giriş yapmış.
     
  13. selected

    selected Daimi Üye

    Kayıt:
    20 Ekim 2004
    Mesajlar:
    774
    Beğenilen Mesajlar:
    0
    Meslek:
    BİM
    Şehir:
    İstanbul
    üzerinden çok sular akmış sanırım sorun felan kalmamıştır.