2012-08-11 33 views
2

我試圖發佈一個問題,我知道有很多答案都是圍繞Stack Overflow進行的。不過,由於某種原因,我似乎無法獲得點擊它們的信息。我會在問題結尾處發佈我的消息。用PHP for Dummies將'username'添加到'user_id'的URL

問題是,我該如何從URL &中取出user_id mod_rewrite它顯示用戶名。

取而代之的是:

domain/user/index.php?user_id=1

我得到這個:

domain/username

我定製我的.htaccess文件等SO答案我需要這樣的:

<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    RewriteEngine On 
    RewriteOptions MaxRedirects=1 
    RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
    RewriteCond %{REQUEST_FILENAME} -d [NC] 
    RewriteRule .* - [L] 
    RewriteRule ^user/([^/]+)$ index.php?user_id=$1 
</IfModule> 

The在我的用戶頁面的頂部if語句如下所示:

if (isset($_GET['user_id']) || isset($_GET['username']) && queryUserId($user_id)) { 
    // Render Page Content 
} else { 
    header('Location: sign_up.php'); 
} 

而且我queryUsername功能如下:

function queryUsername($username) { 
    $conn = dbConnect('read'); 
    $sql = "SELECT * FROM users WHERE user_id = '".$username."'"; 
    $result = $conn->query($sql) or die(mysqli_error($conn)); 
    $row = $result->fetch_assoc(); 
    return $row['username']; 
    $username = $row['username']; 
} 

我已經成功地實施了唯一URL的用戶,和我剛剛訪問帳戶配置文件在將不同的user_id添加到我的URL時很好,所以我錯過了將用戶名寫入URL而不是變量字符串和文件夾結構的內容?

乾杯!

其他SO問題:

Directly adding username to URL PHP

Get username from URL in PHP

Using mod rewrite to change URL with username variable

AddedBytes文章

URL Rewriting for Beginners

回答

3

這條線,根據你的信息是錯誤的:

RewriteRule ^user/([^/]+)$ index.php?user_id=$1 

應該至少爲:

RewriteRule ^user/([^/]+)$ /user/index.php?user_id=$1 // for a url like domain/user/username 

或使用你的描述:

RewriteRule ^([^/]+)$ /user/index.php?user_id=$1 // for a url like domain/username 

而且,你不設置任何變量在您所顯示的代碼中使用username的名稱,因此不需要檢查$_GET['username']

你的PHP檢查應該是這個樣子:

if (isset($_GET['user_id']) && queryUserId($_GET['user_id'])) { 

除此之外你不應該使用過時的mysql_*功能和使用準備好的語句,你現在有一個SQL注入的問題。

另請注意,使用兩個return之後的語句只返回第一個值。

編輯:用戶ID和用戶名似乎有些混淆。如果在URL中的值是一個用戶名,你最好把它username同時在.htaccess文件和PHP,以避免與用戶ID困惑:

RewriteRule ^([^/]+)$ /user/index.php?username=$1 // for a url like domain/username} 

if (isset($_GET['username']) && queryUserName($_GET['username'])) { 

功能(使用過時的功能只是爲了說明......):

function queryUserName($username) {   
    $conn = dbConnect('read'); 
    $sql = "SELECT * FROM users WHERE username = '".$username."'"; 
    ... 
} 
+0

感謝您的答覆!讓我實施你的建議,我會回來。 – robabby 2012-08-11 19:24:39

+1

好的,我已經修改了我的大部分代碼,而且我很接近。當我訪問'domain.com/username'時,我收到了一個頁面,這非常棒。然而,我並沒有將任何數據引入該頁面,所以我需要重構我的變量。非常感謝你的傑出和教育的答案。 +1和答案。 – robabby 2012-08-11 19:54:05