İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

PHP Puanlama Sistemi

birsosyalmedyaajansi

0
İyinet Üyesi
Katılım
25 Nisan 2012
Mesajlar
12
Reaction score
0
Merhaba Arkadaşlar,

Çalıştığım bir sistem üzerinde youtube'daki like-dislike olayı gibi bir script yazmaya çalışıyorum fakat Php konusunda zayıf olduğumdan iki noktada aşamadığım bir problem ortaya çıktı, birincisi: veritabanındaki verileri yüzdeye çevirip ekrana yazdıramadım, ikincisi ise bu verileri grafiksel olarak gösterecek bar'ın yüzde değerine göre artması ve eksilmesi.

Aşağıda ekran görüntüsünü ve script kodlarını veriyorum. yardımcı olmaya çalışacak arkadaşlara şimdiden çok teşekkür ederim :)

Ekli dosyayı görüntüle 3640

MySQL: Tablo 1

Kod:
CREATE TABLE up_down ( 

    kimlik INT PRIMARY KEY AUTO_INCREMENT,
    up INT,
    down INT
);


MySQL: Tablo 2

Kod:
CREATE TABLE unique_ip(


    ip_id INT PRIMARY KEY AUTO_INCREMENT,
    ip_add VARCHAR(40),
    kimlik_fk INT,
    FOREIGN KEY(kimlik_fk) REFERENCES up_down(kimlik)
);


Döngü:

PHP:
<?php
include('config.php');
$sql=mysql_query("SELECT * FROM up_down");
while($row=mysql_fetch_array($sql))
{
$kimlik=$row['kimlik'];
$up=$row['up'];                
$down=$row['down'];
}
?>


Anasayfa'da verileri çekip ekrana yazdırmaya çalıştığım script:

PHP:
<div id="arti-eksi-kutusu">
<div class='up'><a href="" class="vote" id="<?php echo $kimlik; ?>" name="up"></a></div>            <!--Artı Butonu-->
<div class='down'><a href="" class="vote" id="<?php echo $kimlik; ?>" name="down"></a></div>    <!--Eksi Butonu-->
</div>
//Bu kısım görüntü olarak artı ve eksi butonlarının altında yer alıyor.
<span class="up-counter-box"><?php echo $up ?></span>               <!--Toplam 'artı' oy sayısı-->
<span class="down-counter-box"><?php echo $down ?></span>       <!--Toplam 'eksi' oy sayısı-->


Bu da veritabanındaki toplam oy sayısının yüzde (%)'ye çevrilip aşağıdaki element'in width: değerine atamaya çalıştığım bölüm:

PHP:
<? 
$yuzde = 100;
$arti= (number_format($up*100)/$yuzde);
$eksi= (number_format($down*100)/$yuzde);
?>
<div class="percent-wrapper">
<span class="arti" style="width:<? $arti.'%' ?>;"></span>            
<span class="eksi" style="width:<? $eksi.'%' ?>;"></span>
</div>


$up fonksiyonu:

PHP:
<?php
include("config.php");
$ip=$_SERVER['REMOTE_ADDR']; 
if($_POST['id']){$id=$_POST['id'];
$id = mysql_escape_String($id);
$ip_sql=mysql_query("select ip_add from unique_ip where kimlik_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);
if($count==0){$sql = "update Messages set up=up+1  where kimlik='$id'";
mysql_query( $sql);
$sql_in = "insert into up_down (kimlik_fk,ip_add) values ('$id','$ip')";mysql_query( $sql_in);
}
else{}
$result=mysql_query("select up from up_down where kimlik='$id'");
$row=mysql_fetch_array($result);
$up_value=$row['up'];
echo $up_value;
}
?>


$down fonksiyonu:

PHP:
<?php
include("config.php");
$ip=$_SERVER['REMOTE_ADDR']; 
if($_POST['id']){$id=$_POST['id'];$id = mysql_escape_String($id);
$ip_sql=mysql_query("select ip_add from unique_ip where kimlik_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);
if($count==0){$sql = "update up_down set down=down+1  where kimlik='$id'";
mysql_query( $sql);
$sql_in = "insert into unique_ip (kimlik_fk,ip_add) values ('$id','$ip')";
mysql_query( $sql_in);

}
else{}
$result=mysql_query("select down from up_down where kimlik='$id'");
$row=mysql_fetch_array($result);
$down_value=$row['down'];
echo $down_value;
}
?>

Arada anlaşılmayan bir kısım bırakmamak için biraz uzunca yazdım, ilgilenecek arkadaşlara gerçekten müteşekkir kalacağım :utan:
 

karaduman

0
İyinet Üyesi
Katılım
9 Kasım 2003
Mesajlar
87
Reaction score
0
Konum
Ankara
php hatası değil matematik hatası var.
Kod:
<? 
$yuzde = 100;
$arti= (number_format($up*100)/$yuzde);
$eksi= (number_format($down*100)/$yuzde);
?>
<div class="percent-wrapper">
<span class="arti" style="width:<? $arti.'%' ?>;"></span>            
<span class="eksi" style="width:<? $eksi.'%' ?>;"></span>
</div>

yerine şöyle yapalım.
Kod:
<? 
$toplam=$up + $down;
$arti= number_format(floor($up*100/$toplam));
$eksi= 100 - $arti;
$GrafikGenisligi=400; //grafiğin toplam 400piksel olduğunu farzettim
$GrafikArti=$GrafikGenisligi * $arti /100;
$GrafikEksi=$GrafikGenisligi * $eksi /100;

?>
<div class="percent-wrapper">
<span class="arti" style="width:<? $GrafikArti.'%' ?>;"></span>            
<span class="eksi" style="width:<? $GrafikEksi.'%' ?>;"></span>
</div>
 

birsosyalmedyaajansi

0
İyinet Üyesi
Katılım
25 Nisan 2012
Mesajlar
12
Reaction score
0
php hatası değil matematik hatası var.
Kod:
<? 
$yuzde = 100;
$arti= (number_format($up*100)/$yuzde);
$eksi= (number_format($down*100)/$yuzde);
?>
<div class="percent-wrapper">
<span class="arti" style="width:<? $arti.'%' ?>;"></span>            
<span class="eksi" style="width:<? $eksi.'%' ?>;"></span>
</div>

yerine şöyle yapalım.
Kod:
<? 
$toplam=$up + $down;
$arti= number_format(floor($up*100/$toplam));
$eksi= 100 - $arti;
$GrafikGenisligi=400; //grafiğin toplam 400piksel olduğunu farzettim
$GrafikArti=$GrafikGenisligi * $arti /100;
$GrafikEksi=$GrafikGenisligi * $eksi /100;

?>
<div class="percent-wrapper">
<span class="arti" style="width:<? $GrafikArti.'%' ?>;"></span>            
<span class="eksi" style="width:<? $GrafikEksi.'%' ?>;"></span>
</div>

Matematik bilmediğim zaten aşikar da, Php'den de hiç anlamıyormuşum bunu gördüm :)

gönderdiğiniz kısmı değiştirdim ve aynen istediğim şekilde çalışıyor, çok teşekkür ederim, elinize ve emeğinize sağlık :)

lakin bu arada başka bir sorun gördüm; oy verme butonları da çalışmıyor, butonlar çalışmayınca haliyle ne oy verilebiliyor ne de sizin yardımcı olduğunuz kısım ortaya çıkıyor,

Butonların olduğu kısmı:
PHP:
<div id="arti-eksi-kutusu"> 
<div class='up'><a href="" class="vote" id="<?php echo $kimlik; ?>" name="up"></a></div>        <!--Artı Butonu--> 
<div class='down'><a href="" class="vote" id="<?php echo $kimlik; ?>" name="down"></a></div> <!--Eksi Butonu--> 
</div> 
//Bu kısım görüntü olarak artı ve eksi butonlarının altında yer alıyor. 
<span class="up-counter-box"><?php echo $up ?></span>               <!--Toplam 'artı' oy sayısı--> 
<span class="down-counter-box"><?php echo $down ?></span>       <!--Toplam 'eksi' oy sayısı-->

Şu şekilde değiştirdim:
PHP:
<!--=== Artı - Eksi Butonları ===-->
<div id="arti-eksi-kutusu">
<input type="button" href="" class="vote up" id="<?php echo $kimlik; ?>" name="up">		<!--Artı Butonu-->
<input type="button" href="" class="vote down" id="<?php echo $kimlik; ?>" name="down">	<!--Eksi Butonu-->
</div>
<!--=== Sayaç Kutusu ===-->
<span class="up-counter-box"><?php echo $up ?></span>
<span class="down-counter-box"><?php echo $down ?></span>

değiştirdikten sonra butonların Localde çalışıp(sadece basma işleminin), domainde çalışmaması neden kaynaklanabilir? :peh:
 

karaduman

0
İyinet Üyesi
Katılım
9 Kasım 2003
Mesajlar
87
Reaction score
0
Konum
Ankara
bu haliyle ne localde ne domainde çalışmaması lazım.
butonlara hiçbir fonksiyon atamamışsınız.
...onclick="sunuYap()" gibi fonksiyon olması gerekmez mi?
Nedeni çözmek için kodun tamamını görmek lazım.

Ayrıca
$arti= number_format(floor($up*100/$toplam));
yazan satırda number_format() ı kaldıralım. Grafik genişliğini ayarlarken sıkıntı yaratabilir. number_formatı hesaplama yaptıktan sonra ziyaretçiye gösterirken kullanmakta fayda var.
echo number_format($arti) gibi.
 

birsosyalmedyaajansi

0
İyinet Üyesi
Katılım
25 Nisan 2012
Mesajlar
12
Reaction score
0
giriştiğim script baştan aşağı sorunlarla doluymuş, artık farklı bir şekilde çözücem, ilgi, alaka ve yardımlarınız için çok teşekkür ederim karaduman hocam :)
 

realturk

0
İyinet Üyesi
Katılım
1 Haziran 2008
Mesajlar
12
Reaction score
0
arkadaşlar bu uygulamayı paylasma sansiniz var mı acaba ?
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

seo ajansı , sosyal medya yönetimi
Üst