0

私はprofile.phpページを持っており、誰かが自分のプロフィールを表示すると、ユーザーの ID を取得して追加しますprofile.php?UserID=*(* はユーザーの ID 番号です)。現時点では、他のプロフィールを見る正当な方法はありませんが、URL の ID を変更することはできます。問題は、存在しないユーザーのプロファイルに移動して、何も表示されていないデフォルトのプロファイル ページにすることができることです。ページ/URLからIDを取得し、それが存在するかどうかを確認し、存在しない場合は特定のページにリダイレクトする方法はありますか?

<?php
    include('./dbnotseen/global.php');
    $profile = mysql_query("SELECT * FROM admin WHERE username='$username'");
    $row = mysql_fetch_array($profile);
    $username = $row['username'];

    if (($session_username)) {

    }else {
        ("location: index.php");
    }

    //max per page
    $per_page = 1;

    //get start variable
    $start = $_GET['UserID'];

    //count records
    $record_count = mysql_num_rows(mysql_query("SELECT * FROM admin"));

    //count max pages
    $mac_pages = $record_count / $per_page;

    if (!$start)
        $start = 0;

    //display data
    $get = mysql_query("SELECT * FROM admin WHERE id='$start'");
    while ($row = mysql_fetch_array($get)) {
        $id = $row['username']; 
        $picture = $row['picture'];
        $admin = $row['admin'];
        $status = $row['status'];
        $desc = $row['description'];
        $twitter = $row['twitter'];
    }
?>

これは、profile.php 内の PHP の主要部分です。残りは、ステータス、説明などを取得するだけです。

4

3 に答える 3

1

mysqlクエリの結果セットが空でないかどうかを確認できます。関数でそれを行うと、mysql_次のようになります。

$get = mysql_query("SELECT * FROM admin WHERE id='$start'");
if (mysql_num_rows($get) > 0) {
    while ($row = mysql_fetch_array($get)) {
        // rest of your code
    }
}
else {
    // redirect to another page
    header("Location: otherpage.php");
}

これにより、どのようにアプローチすべきかがわかりますが@Madara Uchiha、質問へのコメントで示唆されているように、mysql_関数の使用をやめる必要があります。

于 2012-10-06T16:36:02.780 に答える
0

問題を解決する前に重要なことがいくつかあります。

  • MySQL_ *ファミリーの関数は非推奨になり、使用されなくなりました。
  • あなたのコードは巨大なセキュリティホール(SQLインジェクション)に対して脆弱です。データベースクエリをサニタイズしていることを確認してください。他に何もない場合$start = mysql_real_escape_string($_GET['UserID']);は、現在のコードだけを使用します。

$getこれで、クエリに対して返される結果の数を確認したいようです。mysql_num_rows次の関数を使用できます。

if (!mysql_num_rows($get)) {
    //no user exists! do something different here
} else {
    while ($row = mysql_fetch_array($get)) {
        $id = $row['username']; 
        $picture = $row['picture'];
        $admin = $row['admin'];
        $status = $row['status'];
        $desc = $row['description'];
        $twitter = $row['twitter'];
    }
}
于 2012-10-06T16:36:06.983 に答える
0

次の SQL ステートメントを使用して、admin基準に一致するテーブル内のレコードをカウントすることもできます。id = $start

"SELECT COUNT(*) FROM admin WHERE id='$start'"

一致するレコードがない場合、提供された UserID はどのユーザーにも属していないため、何が問題なのかを説明するページにユーザーをリダイレクトする必要があります。

于 2012-10-06T16:39:09.900 に答える