PHP ve MySQL ile kullanıcı profillerini oluşturmak için nasıl

3 Cevap php

Ben bir kullanıcı profili sistemi oluşturma konusunda biraz yardıma ihtiyacım var. Ben Facebook gibi olmak istiyorum Myspace bu adresten sonra sadece kullanıcı adı, örneğin, hiçbir soru işaretleri ya da bir şey, sahip olduğu, www.mysite.com/username. Ben vb tüm kayıt, günlük komut, tüm yapılır var, ama nasıl "/ username", yukarıda URL örneği profilleri kullanarak gidiyorsun?

3 Cevap

Sen ilk dizini aldı ve $ _GET parametre olarak geçirilen bir yeniden mod oluşturmak gerekir.

Bu deneyin:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1

Yani index.php olarak '/' sonra bir şey yazmanız lazım? User = dizini

İşte durumda benim cevap kısaltılmış versiyonu, herkes bir TLDR an:

  1. "Kullanıcılar" adında bir dizin oluşturun.
  2. . Dizinde, aşağıdaki mod_rewrite ile bir htaccess dosyası yapmak:

    REQUEST_URIRewriteEngine on

    RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI

Şimdi kullanıcıların dizine yapılan parantez herhangi uzantıları için değil tüm sayfa istekleri index.php gidecek

index.php kullanıcı koymak URL'sini alır ve sonunda biraz kapmak. Bunu yapmanın yolları ton vardır, burada son bölümü her zaman bir kullanıcı adı ve olacak biliyorum eğer basit değil, belki de, kullanıcı adı / resimler /:

 $url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
 $user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
 $user_name = str_replace("/", "", $user_request); //this leaves 'foo'

Şimdi, sadece bu kullanıcı adı için DB için bir sorgu yapmak. / Users/404.php: Varsa o komut yönlendirme yoksa, index.php, profil çıktılar

Kullanıcı mevcut Ama eğer, tüm ziyaretçi göreceksiniz onlar koymak olduğunu

www.example.org/users/foo/

ve Foo kullanıcı sayfasına lazım.

Yararlanmak için bir hacker için hiçbir olsun değişkenleri ve bir başka blog veya kartvizit URL koymak kolay, oldukça.


Aslında, "?" Kurtulmak mümkün ve güzel bir basit www.example.org / users / someusername var.

Ben bu konuda öğrendim Quack makalesinde "How to Succeed with URLs" üzerinde Till üzerinde A List Apart.

Yani. Htaccess ve mod_rewrite, Apache anlamak gerekir, ve bu yöntem onlar için güvenlik riskleri ve hesap anlamak için gerektirir. Burada temel fikir:

Sen "kullanıcılar" adında bir dizin oluşturun (eğer zorunda değilsiniz, ama bu her şeyi basitleştirmek olacaktır), ve bu dizinde, etkili "tüm dosya ya da dizin istekleri diyor mod_rewite içeren. Htaccess dosyasını koymak kullanıcıya göndermek için idare edecek (görüntüler, PDF) bu komut gönderilmesi gereken belli bir tür, bir değil. " Makale mod_rewrite bu gibi görünüyor:

RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php

Benim örnekte "/ your_web_root / users / index.php" olacağını yerine sayfada TÜM isteklerini işleme Bu komut, sadece kullanıcı dizininde olanlar ile uğraştığını, çünkü daha basit nedeni de budur.

Sonra diyor bir php komut dosyası var "tamam, URL ne verildi?" ve bu temelde (çok sonunda başka bir varsa, ya da iki) son isminden sonra parçasını kapmak ve (bu gerçekten çok önemli) bulur ve ne diyor sanitizes "Bu kullanıcı adı benim DB var mı?" Eğer evet ise, o kullanıcının profiline istekte gönderir, ama güzel bir URL ile (biz ikinci bir o kadar alırsınız), değilse, o bir "Kullanıcı bulunamadı" sayfası, ya da ne istersen onları gönderir.

Sizin kullanıcı bulmak yaparsa Yani, PHP komut dosyası çıktı (Yine bunu sterilize emin olun kullanıcı profili ile olabilecek herhangi bir pislik kullanıcı olabilir -. Onlara fırsat vermek - eğer kendi profiline içine kötü niyetli kod gömmek, profilini views tarayıcıları bilerek) bu kodu çalıştıracaktır. Istenen sayfa beri:

www.example.org/users/example_user

ve yerine bir yönlendirme mod_rewrite kullanarak bu yana, URL aynı kalır ve. Htaccess dosyası yukarı çeker komut sadece kullanıcı profilini döker. Ziyaretçiye, onlar sadece yukarıdaki url koymak olduğunu görmek ve kullanıcı profili gösterdi.

Ayrıca yerine basitçe çıktı "user_not_found" sayfa sahip, bir "kullanıcı bulunamadı" sayfasına yönlendirme yapmak kullanıcı için denetler PHP script istiyorum. Bu koyar böylece isteyenlerdir:

www.example.org/users/blabhaboehbohe

Için URL değişikliği göreceksiniz

www.example.org/users/notfound/

yerine görme URL aynı kalır. Bir hacker URL değişmez görürse, onlar şimdi bir mod_rewrite kullanarak biliyorum ve böylece gerçek çıkışını işleme bir komut olması gerekir. Onlar da biliyor, onlar açık bırakmış olabilir her güvenlik açığı için arayan deli gidiyor başlayabilirsiniz.

şerefe.

rewrite engine bir göz atın. Bazı çerçeveler de Zend Framework Zend_Router hangi kullanabileceğiniz oldu gibi bu işi yapmak için sınıfları var. Bunu kendine göre bu birini kullanabilirsiniz, diğer çerçeveler de onlara sahip, tercih edilen lezzet için belgeleri kontrol.