2

StackOverflowの周りにたくさんの答えがあることがわかっている質問を公開しようとしています。しかし、私は、何らかの理由で、クリックするための情報を取得できないようです。質問の最後に出典を投稿します。

user_id問題は、URLからをプルして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>

ユーザーページの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を正常に実装し、URLに別のuser_idを追加するときにアカウントプロファイルにうまくアクセスしているので、可変文字列やフォルダー構造の代わりにユーザー名をURLに書き込むために何が欠けていますか?

乾杯!

その他のSOの質問:

URLPHPにユーザー名を直接追加する

PHPのURLからユーザー名を取得する

modrewriteを使用してユーザー名変数でURLを変更する

AdditionalBytesの記事

初心者のためのURL書き換え

4

1 に答える 1

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また、2 つのステートメントを続けて使用すると、最初の値のみが返されることにも注意してください。

編集:ユーザー ID とユーザー名の間に混乱があるようです。URL の値がユーザー名の場合username、ユーザー ID との混同を避けるために、.htaccess ファイルと php の両方でそれを呼び出すことをお勧めします。

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."'";
    ...
}
于 2012-08-11T19:16:15.937 に答える