Cevaplar
-
tıkladığında get ile o sırayı alarısın sıraya +1 eklersin ve o sıranın bi üstündeki sıraya -1 eklersin veri tabanına kaydedersin bu işlem olmuş olur .
-
Lupus
-'sine tıkladığın kaydın altındakini +1 yapmayı ve
+'ına tıkladığının üstündekini de -1 yapmayı unutma11 yıl önce yazılmış -
huseyiniskender
Merhaba arkaşlar öncelikle yardımcı olmaya çalıştığınız için teşekkür ederim.
Söylediklerinizden yola çıkarak bir şeyler yaptım fakat bir süre sonra tablodaki sira alanı hepsi için aynı değere ulaşıyor dolayısıyla hata oluşuyor.
Tablo yapım ve kodları aşağıya yazıyorum. Kendi bilgisayarınızda deneyip sonucu görebilirsiniz. Nerede mantık hatası yaptığımı anlayamadım. Elinizde örnek uygulama varsa paylaşabilir misiniz?
sql tablo kodları ve içindeki örnek veriler.
CREATE TABLE IF NOT EXISTS `tablo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `yazi` varchar(250) NOT NULL, `sira` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin5 AUTO_INCREMENT=7 ; INSERT INTO `tablo` (`id`, `yazi`, `sira`) VALUES (1, 'a', 1), (2, 'b', 2), (3, 'c', 3), (4, 'd', 4), (6, 'f', 5);
php yazdığım kod
<?php $dbhost="localhost"; $dbadi="siralama"; $dbuser="root"; $dbpass=""; $baglanti=@mysql_connect($dbhost,$dbuser,$dbpass); if(!'baglanti') die("Mysql Bağlantısında hata oluştu"); @mysql_select_db($dbadi,$baglanti) or die("İstenilen Veritabanına Bağlanılamadı."); mysql_query("SET NAMES 'latin5'"); mysql_query("SET CHARACTER SET latin5"); mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'"); if(isset($_GET["islem"]) and $_GET["islem"]!="" and isset($_GET["sira"]) and $_GET["sira"]!="" and isset($_GET["id"]) and $_GET["id"]!=""){ if(mysql_num_rows(mysql_query("select id from tablo where sira='".$_GET["sira"]."' and id='".$_GET["id"]."' limit 1"))==1){ if($_GET["islem"]=="artir"){ $ust_satir=mysql_query("select sira from tablo where sira<'".$_GET["sira"]."' limit 1"); if(mysql_num_rows($ust_satir)!=0){ $ust_satir_veri=mysql_fetch_assoc($ust_satir); $ust_sira=$ust_satir_veri["sira"]; $ust_art=$ust_satir_veri["sira"]+1; mysql_query("update tablo set sira='$ust_art' where sira='$ust_sira' limit 1"); $kendisi=$_GET["sira"]-1; mysql_query("update tablo set sira='$kendisi' where id='".$_GET["id"]."' limit 1"); } } else if($_GET["islem"]=="azalt"){ $ust_satir=mysql_query("select sira from tablo where sira>'".$_GET["sira"]."' limit 1"); if(mysql_num_rows($ust_satir)!=0){ $ust_satir_veri=mysql_fetch_assoc($ust_satir); $ust_sira=$ust_satir_veri["sira"]; $ust_art=$ust_satir_veri["sira"]-1; mysql_query("update tablo set sira='$ust_art' where sira='$ust_sira' limit 1"); $kendisi=$_GET["sira"]+1; mysql_query("update tablo set sira='$kendisi' where id='".$_GET["id"]."' limit 1"); } } }} ?> <!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"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css" media="screen"> a:link,a:visited,a:hover{ text-decoration:none; color:#000;} </style> </head> <body> <table width="180" border="0" cellspacing="0" cellpadding="0" align="center"> <?php $result = mysql_query("SELECT * FROM tablo ORDER BY sira ASC") or die(mysql_error()); while($veri = mysql_fetch_array($result)) { ?> <tr> <td width="140" height="20" align="left" valign="middle"><?php echo $veri["yazi"]; ?></td> <td width="100" height="20" align="left" valign="middle"><?php echo " <a href='index.php?islem=artir&id=".$veri["id"]."&sira=".$veri["sira"]."'>+</a> <a href='index.php?islem=azalt&id=".$veri["id"]."&sira=".$veri["sira"]."'>-</a><br>"; ?></td> </tr> <?php } ?> </table> </body> </html>
11 yıl önce yazılmış
-
-
yukarı yada aşşağı okla taşımaktansa ajax kullanarak drag list yapabilirsin. bu konuda prototype frameworkler bolca mevcut, ben scriptaculous framework u bazı projelerde kullanıyorum tavsiye ederim.
-
huseyiniskender
Drag list olayıyla ilgili bir örnek bulup incelemiştim, gayet kullanışlı. Fakat bir yerde bir sorunla karşılaştığım için kullanmadım.
Belki sorunun çözümünü biliyorsunuzdur diye size sorayım: Veritabanında 12 tane kayıt olsun. Ben bu kayıtları 10'arlı şekilde sayfalıyorum. Dolayısıyla verileri görüntülediğimde karşıma birinci sayfada 10 tane veri çıkıyor, ikinci sayfada ise 2 tane veri çıkıyor. Bu kayıtların sırasıda 0'dan 12'ye kadar gidiyor...
Yani:
Tablo yapısı
----------------------
id - veri - sira
----------------------
1.kayıtın sırası:0
2.kayıtın sırası:1
3.kayıtın sırası:2
4.kayıtın sırası:3
5.kayıtın sırası:4
6.kayıtın sırası:5
7.kayıtın sırası:6
8.kayıtın sırası:7
9.kayıtın sırası:8
10.kayıtın sırası:9
11.kayıtın sırası:10
12.kayıtın sırası:11
Ben onlu sıralamada 2. sayfadayken karşıma id'si 11 ve 12 olan kayıtlar gelecektir. Ben bu iki kayıt arasında drag list ile yer değişimi yaptığımda elimdeki draglist uygulaması bu iki kayıtı dizi mantığıyla ele alıyor ve yeni sıralamayı sıfırdan başlatıp 0 , 1, n+1... şeklinde kayıt ediyor.
Yani tablonun son hali şu oluyor.
----------------------
id - veri - sira
----------------------
1.kayıtın sırası:0
2.kayıtın sırası:1
3.kayıtın sırası:2
4.kayıtın sırası:3
5.kayıtın sırası:4
6.kayıtın sırası:5
7.kayıtın sırası:6
8.kayıtın sırası:7
9.kayıtın sırası:8
10.kayıtın sırası:9
11.kayıtın sırası:0
12.kayıtın sırası:1
Bu verileride sira kolonuna göre listelediğimde benzer kayıtlar oluştuğundan hatalı sonuçlar dönüyor.
Yani sonuç olarak eğer tüm verileri sayfalama yapmadan direk ekrana basarsam drag list uygulaması sıkıntısız çalışıyor. Sayfalama yaptığımda ise yukarda bahsettiğim sonuçlar doğuyor.
Siz böyle bir durumla karşılaşmamak için nasıl bir yol izliyorsunuz veya bu hatalara yakalanmamam için önerebileceğiniz örnek bir uygulama gösterebilir misiniz?
İlginiz için teşekkür ederim.11 yıl önce yazılmış -
huseyiniskender
Kullandığım örnek uygulamanın kaynağı: http://www.hdeya.com/blog/2009/05/sorting-items-on-the-fly-ajax-using-jquery-ui-sortable-php-mysql/11 yıl önce yazılmış -
kucukharf
Sayfalamada kullandığın scrippten dolayı böyle bir hata veriyor, biraz araştırınca bu aşşağıdaki arkadaş güzel anlatmış, bir incelersin,
sira_kaydet, fonksiyonuna, şu şekilde bir eklenti yaparsan problem yaşamazsın diye tahmin ediyorum denemedim, db deki kayıtlardan icerik sırasına göre son kaydı çek, ve bunu bir değişkene ata örneğin a olsun, sonra sıra değişkenine b değerini verip a+1 e eşitle, a değeride boşsa 1 den başlasın saymaya, dolayısıyla kaçıncı sayfadan gelirse gelsin, son verdiğin sıranın üzerine saymaya başlayacak.
basitçe örnekliyim;function kaydet($gelen_id) { if (!isset($_POST[$gelen_id]) || !is_array($_POST[$gelen_id])) return; // $sorgu = mysql_query(" select * from iceriklerim order by icerik_siram desc limit 1");
burda $son_sira diye bir değişkenle icerik sirasını aldım;
daha sonra;
$sira = $son_sira+1; foreach ($_POST[$gelen_id] as $icerik_id) { if (!array_key_exists($icerik_id, $icerikler)) continue; $sorgu = sprintf('update iceriklerim set icerik_siram = %d where icerik_id = %d', $sira, $icerik_id); mysql_query($sorgu); $sira++; } }
diye son gelen sıra üstüne saydırmaya başladım. umarım temiz anlatmışımdır. pek iyi değilimdir anlatmakta.
örnek anlatım: http://www.lampforweb.com/index.php/mysql/php-mysql-ajax-ornek-uygulama-surukle-birak-sirali-listeler/
kolay gelsin.11 yıl önce yazılmış -
axaturk
// $sorgu = mysql_query(" select * from iceriklerim order by icerik_siram desc limit 1");
sen burda son eklenen satırı çağırıyosun. aşağıdaki örnek senin sql tablon olsun diyelim. sen desc ile çağırırsan son eklenen satır 4, c , 2 yi çağıracak ve 2+1 dediğinde 3 diyecek. yeni eklediğinde 3 diye kaydedeceksin. sira sutununda iki tane 3 olacak. ve karışacak.
id , yazi , sira
----------------
1, a , 0
2, d , 3 (sıralama yapıldıktan sonra ki hali)
3, b , 1
4, c , 211 yıl önce yazılmış -
kucukharf
son eklenen satırı değil son sıradaki kayıtı çağırıyor. "icerik_siram"11 yıl önce yazılmış
-
-
sana bir mantık vereyim. bu yöntemi bende kullanıyorum.
listeleme : id, yazi, sira
1, a, 0 yukarı(link) aşağı(link)
2, b, 1 yukarı(link) aşağı(link)
3, c, 2 yukarı(link) aşağı(link)
böyle olsun diyelim
sen yukarı linkine tıklatınca, bir önceki sıradakinin sira nosuyla yer değiştirecek.
örnek 2, b, 1 de yukarı dediğinde sira 0 olacak, üsttekinin sira ise 1 olcak. yer değiştircek yani.
neden bu yöntemi kullanmalısın?
eğer +1 ya da -1 dersen. Arada silinmiş satırlar olabilir. o zaman iş karışır :)