v2.5.2
Giriş yap

$_GET['id'] Url 'den gizlemek istiyorum

yahyairis
1,612 defa görüntülendi

Arkadaşlar Merhabalar, ödevim için basit bir blog sayfası yapıyorum.
Sayfaya veriler çekiliyor detay sayfasında da veriler geliyor, detay sayfasını açtığım zaman url şu şekilde geliyor.
http://localhost/mezuniyetodevi/deneme-13
ama ben ID olmadan gelmesini istiyorum yani;
http://localhost/mezuniyetodevi/deneme
Bu şekilde mümkün müdür? Biraz araştırdım ama pek bir şey bulamadım.

Cevap yaz
Cevaplar (4)
tayfunerbilen
1359 gün önce

Bunun için senin kontrollerin önemli. Diyelim ki normalde eriştiğin linkin şöyle olsun

siteadi.com/blog.php?id=1&url=test-url

Ve sen .htacccess ile bunu şu hale getirdin

RewriteEngine On
RewriteRule ^([0-9]+)-([0-9a-zA-Z-_]+)$ blog.php?id=$1&url=$2 [QSA]

Artık bu linke şöyle erişiyor olabilmen lazım

siteadi.com/1-test-url

ve blog.php dosyanda ise id ve url i $_GET ile alıp ona göre kontrol yapıyor olman lazım.

// blog.php

$id = $_GET['id'];
$url = $_GET['url'];

// db işlemleri...

Şimdi sen bu mantıkta hem id'yi hem url'i kontrol ediyorsun. Ancak yapmak istediğin id'yi ortadan kaldırmak ise öncelikle link yapın şöyle olmalı.

siteadi.com/blog.php?url=test-url

buna görede .htaccess dosyanı şöyle düzenlemelisin

RewriteEngine On
RewriteRule ^([0-9a-zA-Z-_]+)$ blog.php?url=$2 [QSA]

Ve artık şöyle erişiyor olabilmen lazım.

siteadi.com/test-url

Bu mantıktada blog.php dosyan şöyle olmalı

// blog.php

$url = $_GET['url'];

// db işlemleri -> sadece urle göre konrol edip konu bilgilerini çek
yahyairis
1359 gün önce

beteralii denedim ama olmadı 404 hatası verdi. Paylaşabileceğin bir kaynak var mı?

beteralii
1373 gün önce

Tablona blog_seourl adında biyer aç

fonksiyon dosyana blogeklettirmek için yazdığın kodların üstüne bu fonksiyonu yaz
$blog_seourl=seo($_POST['blog_ad']); (Kendine göre değiştir)

Daha sonra seo.php adında dosya oluştur içine

<?php
function seo($s) {

$tr = array('ş','Ş','ı','I','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç','(',')','/',' ',',','?');
$eng = array('s','s','i','i','i','g','g','u','u','o','o','c','c','','','-','-','','');
$s = str_replace($tr,$eng,$s);
$s = strtolower($s);
$s = preg_replace('/&amp;amp;amp;amp;amp;amp;amp;amp;amp;.+?;/', '', $s);
$s = preg_replace('/\s+/', '-', $s);
$s = preg_replace('|-+|', '-', $s);
$s = preg_replace('/#/', '', $s);
$s = str_replace('\'', '-', $s);
$s = str_replace('.', '', $s);
$s = str_replace('|', '', $s);
$s = str_replace('&', '', $s);
$s = str_replace('!', '', $s);
$s = trim($s, '-');
return $s;

}
?>
yapıştır ve projene dahil et

.htaccess klasörün yoksa oluştur varsa içine gir

RewriteCond %{REQUEST_"FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^([0-9a-zA-Z-_]+)$ dosya-adi.php?sef=$1 [L,QSA]

bunları yaz kendine göre düzenle

detay sayfana gir php taglarını oluştur
if($_GET['sef'] != "") {
buraya yazacağın kodlar vs vs
}

seo link içinde <a href="<?php echo $blogcek['blog_seourl']; ?>"></a>

olarak çek oldu bitti

thomasshelby
1374 gün önce

ID olmadan unique slugfield ile çekebilirsin. Unique olması için ise ekstra kodlar yazman lazım.
Örnek deneme slug'ın var olup olmadığını kontrol edip , varsa bunu deneme-1 deneme-2 gibi veritabanına kaydetmelisin. Aynı işlemi update işlemlerinde de yapmalısın.
Uzatmayayım veritabanındaki blog tablona bir slug ekle unique key olsun. Onunla id olmadan slug ile çekebelirsin. Benim çözümüm bu şekilde olurdu.