• 06-04-2013, 14:19:48
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    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.
  • 08-04-2013, 08:34:25
    #2
    cevap verebilecek yada en azından yol gösterebilecek varsa memnun olurum

    en öz haliyle istediğim şey mysql'den 2 adet koşula bağlı olarak 3 bir veriyi ekrana yazdırmak
  • 08-04-2013, 09:38:25
    #3
    <?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:43:43
    #4
    Sayın Hazar,

    Cevabınız için teşekkür ederim ancak tablo bilgileri doğru olduğu halde yönlendirme sadece ana sayfaya oluyor hangi çağrı olursa olsun direk ana sayfa açılıyor.
  • 08-04-2013, 10:55:21
    #5
    Ana 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:44
    #6
    Hazar adlı üyeden alıntı: mesajı görüntüle
    Ana 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();

    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:20
    #7
    Ben 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.
  • 08-04-2013, 11:18:34
    #8
    Estağfirullah ne demek


    çok makbule geçti bunu kullanarak şu 404 hatalarından kurtulurum artık.

    Tekrar teşekkür ederim.
  • 09-04-2013, 15:07:31
    #9
    Hazar adlı üyeden alıntı: mesajı görüntüle
    Ben 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.
    Sayın Hazar,

    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();
    		}