Php ile Sıralama Değiştirme

Merhaba arkadaşlar. Bugün sizlerle php ile sıralama nasıl yapılır onu işleyeceğiz. Özellikle panel yazaken ihtiyacımızı olan bu durumda ürün , kategori vs.. sıralaması sıklıkla ihtiyac olan bir konu olmuştur. Bu yazımızda sıralama işlemlerimi yaparken php ve mysql(pdo) kullanacağız.

Proje dosyalarımızın içerisinde ;

  • index.php
    Listememizi yapacağımız dosyamız.
  • baglan.php
    PDO ile mysql’imize bağlancağımız dosyamız.
  • islem.php
    Sıralama değişikliğini işleme koyacağımız dosyamız.

dosyaları bulunmakta. Her zaman olduğu gibi anlatılacak yerleri kod içerisinde açıklamala satırları halinde yazacağım. İlk önce sql’imizi oluşturalım.

 

Ben test için bir kaç veri girilmiş halini veriyorum. Veritabanımızı oluşturduktan sonra aşağıdaki sql’imizi çalıştırıp veriler tablomuzu oluşturuyoruz ;

Sql

DROP TABLE IF EXISTS `veriler`;
 
CREATE TABLE `veriler` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `icerik` text,
  `sira` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
LOCK TABLES `veriler` WRITE;
/*!40000 ALTER TABLE `veriler` DISABLE KEYS */;
 
INSERT INTO `veriler` (`id`, `icerik`, `sira`)
VALUES
    (1,'iste basliyoruz',1),
    (2,'codeigniter ve smart template kulanimi',3),
    (3,'php toplu resim yukleme',4),
    (4,'ios 7 gm surumu nasil yuklenir',2),
    (5,'facebook api ile php uygulama gelistirme',5);
 
/*!40000 ALTER TABLE `veriler` ENABLE KEYS */;
UNLOCK TABLES;

 

Mysql bağlantımızı yapacağımız baglan.php dosyamızı oluşturuyoruz ;

baglan.php

<?php
 
    // $baglan degiskeni icerisine mysql:host(mysql server) ve dbname(veritanani adi) alanlarimizi giriyoruz.
    $baglan     = 'mysql:host=localhost;dbname=siralama';
 
    // $kullanici degiskenine mysql yetkili kullanici adimizi yaziyoruz.
    $kullanici     = 'root';
 
    // $sifre degiskenine mysql baglanti sifremizi giriyoruz.
    $sifre         = '';
 
    // try-catch ile baglanti saglanmaz ise hata verdiriyoruz.
    try {
        // yukarida aldigim bilgileri sirasi ile giriyoruz.
        $db = new PDO($baglan, $kullanici, $sifre);
    } catch (PDOException $e) {
        // baglanti saglanmaz ise hata veriyoruz.
        echo 'Bağlantı Sağlanamadı : ' . $e->getMessage();
    }
 
?>

 

Daha sonra index.php dosyamızı oluşturuyoruz ;

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
    <title>Php ile sıralama değiştirme</title>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <style type="text/css">
        *{ font-family:'Myriad Pro';}
        ul{ list-style:none; }
        li{ display:block; width:500px; padding:10px; background:#efefef; border:1px solid #ccc; margin-bottom:10px; overflow:hidden;}
        a{ display:block; float:right; color:#333; margin-right:10px; text-decoration:none; margin-top:20px;}
        h4{ display:block; float:left;}
    </style>
</head>
<body>
    <!-- Mysql baglanti dosyamizi include ediyoruz. -->
    <?php include("baglan.php"); ?>
 
    <ul>
 
        <?php
            //$db->query ile veritabani sorgumuzu yapiyoruz bunu foreach dongusu icerisinde yapip verilier $row degiskenine atiyoruz
            //order by sira ile verilerimizi veritabanimizdaki sira alanina gore siraliyoruz ki degisiklik yaptigimizda etkin olabilsin.
            foreach($db->query('SELECT * FROM veriler order by sira') as $row) {
        ?>
 
        <li>
            <!-- $row["icerik"] ile icerigimizi yazdiriyoruz -->
            <h4><?php print $row["icerik"]; ?></h4>
 
            <?php
                // yukari asagi butonumuzun ne zaman gorunecegi ile ilgili sorgumuzu yapiyoruz max(sira) ve min(sira) ile en buyuk sira degerimizi ve en kucuk sira degerimizi aliyoruz.
                $aid = $db->query("SELECT max(sira),min(sira) FROM veriler"); 
                $aid = $aid->fetch();
 
                // en kucuk sira numaramizi aliyoruz ve $enkucuk degiskenine atiyoruz.
                $enbuyuk = $aid["max(sira)"];
 
                // en buyuk sira numaramizi aliyoruz ve $enbuyuk degiskenine atiyoruz.
                $enkucuk = $aid["min(sira)"];
 
            ?>
 
            <!-- $row["id"] ile icerigimizin idsini asagi yukari islemlerimize yazdiriyoruz -->
            <!-- $enkucuk degerimiz $row["sira"] degerimize esit ise en yukarida oldugunu anlayip yukari yazisini yazdirmiyoruz. -->
            <?php if($enkucuk!=$row["sira"]){ ?>
                <a href="islem.php?islem=yukari&id=<?php print $row["id"]; ?>">Yukarı</a>
            <?php } ?>
 
            <!-- $enbuyuk degerimiz $row["sira"] degerimize esit ise en asagida oldugunu anlayip asagi yazisini yazdirmiyoruz. -->
            <?php if($enbuyuk!=$row["sira"]){ ?>
            <a href="islem.php?islem=asagi&id=<?php print $row["id"]; ?>">Aşağı</a>
            <?php } ?>
        </li>
 
        <?php 
            } //foreach dongumuzu sonlandiriyoruz. 
        ?>
    </ul>
</body>
</html>

 

Son olarak da sıralama işlemlerimizi yapacağımız islem.php dosyamızı oluşturuyoruz.

islem.php

<?php
 
    //Mysql baglanti dosyamizi include ediyoruz.
    include("baglan.php");
 
    //islem yapilacak icerigimizin idsini aliyoruz
    $id    = $_GET["id"];
 
    //yapilacak islemimizi aliyoruz asagi veya yukari
    $islem = $_GET["islem"];
 
    //islem yapilacak icerigimizi sirasini $sira degiskenine atiyoruz
    $sira = $db->query('SELECT * FROM veriler where id='.$id.'')->fetch();
    $sira = $sira["sira"];
 
    //islem yapilacak icerigimizin sirasini 0 yapiyoruz siralama yaparken bir belirtici olarak kullanacagiz.
    $db->exec('UPDATE veriler set sira=0 where id='.$id.'');
 
    //islemimiz asagi ise idmizi +1 ile bir artiriyoruz eger yukari ise -1 ile bir eksiltiyor ve $a degiskenine atiyoruz
    if($islem == "asagi"){ $a = $sira+1; }elseif($islem == "yukari"){ $a = $sira-1; }
 
    //$sira degiskenimize atadigimiz degeri yer degistirilecek icerigin sirasina yaziyoruz.
    //$a degiskeni burada $sira degerimizi yazdiracagimiz icerigimizi belirliyor
    $db->exec('UPDATE veriler set sira='.$sira.' where sira='.$a.'');
 
    //daha once belirtici olarak 0 yaptigimiz islem yapilacak icerigimizin sirasini $a degeri ile guncelliyoruz
    $db->exec('UPDATE veriler set sira='.$a.' where sira=0');
 
    //islemlerimiz bittikten sonra index.php'ye yonlendiriyoruz.
    header("Location: index.php");
 
?>

 

Tüm işlemlerimizi tamamladıktan sonra projemizin sorunsuz olarak çalışması ve aşağıdaki gibi bir görüntüde olması gerekiyor ;

php-siralama-degistirme

Eğer bir sorun ile karşılaşırsanız yorum olarak sorabilirsiniz. Bir sonraki makalede görüşmek üzere.

  • Cemal Baş

    Emeğinize Sağlık Paylaşım için Teşekkürler