merhaba arkadaşlar,
Benim için önemli olan bir konuda bilgi ve deneyimlerinizi isteyecektim. Phpnuke den wordpress e geçiş yaptım bildiğiniz gibi phpnuke de modules klasörü altındaki modüllerin adresleri modules.php?name=isim(vs.vs.vs) olarak çağrılıyordu yeni sistemde bir çok 404 hatası alıyorum. bu hataları kaldırmamın yolu 301 taşındı yönlendirmesi yapmam gerekiyordu aklıma şu yol geldi. Bir veri tabanı tablosu oluşturdum ve içinde 4 adet sütun var isimleri "id, name, cid, adres" dir.
Eğer tarayıcının adres satırında "modules.php?name=Content&pa=list_pages_categories &cid=10" çağrıldığında veri tabanında "name" sütununda "Content" değerini bulacak ona tekabül eden "cid" yani 10 sayısını bulacak ve karşılığındaki "adres" hücresindeki urlye tarayıcıyı yönlendirecek.
Bende 8 adet Content 8 Adet Ansiklopedi vs. modulleri var ve toplamda 10.000 konu bulunuyor. Ben hangi yönlendirmelerin yapılacağını veri tabanına işledim sayılır. geriye sadece yukarıdaki mantık çerçevesinde yönlendirmek kalıyor.
Eğer yapabilecek yada en azından kaynak yol gösterebilecekler için şimdiden teşekkür ederim.
URL'deki verilere göre veritabanında çoklu sorgu
8
●708
- 08-04-2013, 09:38:25
<?php // MySQL bağlantı kodlarınız.. $r = mysql_query(sprintf('SELECT `adres` FROM tablo_adiniz WHERE `name` = %s AND `cid` = %d', mysql_real_escape_string($_GET['name']), mysql_real_escape_string($_GET['cid']))); if ($r) { $row = mysql_fetch_assoc($r); header('HTTP/1.1 301 Moved Permanently'); header('Location: ' . $row['adres']); } else header('Location: /'); die(); - 08-04-2013, 10:55:21Ana sayfaya yönleniyorsa veritabanında ilgili kaydı bulamamış demektir.
mysql query'li satırın altına (if'ten önce) şunu yazın, çalıştırın ve ekrana çıkanları paylaşın. Çalıştırırken verdiğiniz link yapısına uygun bir şekilde çağırmanız gerekli, yani modules.php?name=Content&pa=list_pages_categories& cid=10 gibi.
var_dump($_GET);
var_dump(mysql_error());
die(); - 08-04-2013, 10:57:44Hazar adlı üyeden alıntı: mesajı görüntüle
ekran çıktısı bu şekilde
array(3) { ["name"]=> string(7) "Content" ["pa"]=> string(21) "list_pages_categories" ["cid"]=> string(3) "100" } string(42) "Unknown column 'Content' in 'where clause'"
Buda Tablo Yapısı
CREATE TABLE IF NOT EXISTS `modules` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`cid` int(8) NOT NULL,
`adres` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Tablo döküm verisi `modules`
--
INSERT INTO `modules` (`id`, `name`, `cid`, `adres`) VALUES
(1, 'Content', 100, 'http://www.siteadresi.com/icerik1.html'),
(2, 'Content', 101, 'http://siteadresi.com/icerik2.html'),
(3, 'Content', 102, 'http://www.siteadresi.com/icerik3.html'); - 08-04-2013, 11:13:20Ben kendi yazdığım frameworktaki DB fonksiyonlarını kullandığım için procedural yazmayı unutmuşum, delimiterları atlamışım kusura bakmayın, hata bende.
Tırnaklar dahil, sprintf'in ilk argümanını yani
'SELECT `adres` FROM tablo_adiniz WHERE `name` = %s AND `cid` = %d' yazan kısmı
"SELECT `adres` FROM `modules` WHERE `name` = '%s' AND `cid` = %d" olarak değiştiriniz.
Bir önceki mesajda eklettiğim yeri çıkarın çalışması için. - 09-04-2013, 15:07:31Sayın Hazar,Hazar adlı üyeden alıntı: mesajı görüntüle
Veritabanını bitirdim, verdiğiniz kodu kullanarak istediklerimi yapabiliyorum. Ancak bir problem oluştu. Adres satırından Veri tabanında olmayan bir name, pid, cid, eid ve tid değeri geldiğinde sayfa beyaz oluyor ve adres satırı olduğu gibi kalıyor yani yönlendirme yapmıyor. Bu tür adresleri 404.shtml sayfasına yönlendirmeyi düşünüyordum ve kodunuz da aşağıdaki gibi düzenleme yapmama rağmen çalışmadı;
header('Location: ' . $row['adres']); } else header('Location: /404.shtml'); die(); }
