0

ログインページからの私のコードは次のとおりです。自分の Web サイトを何回使用したか、どこからログインしたかを数えたいと考えています。カウントはできますが、ipaddress はできません。

表では、このように各ユーザーデータを表示したい

これらは私のテーブルの列です。ユーザー名、最終ログイン、ログイン回数、IPADDRESS、IPADDRESS1、IPADDRESS、......IPADDRESS10。10個の異なるIPアドレス列をすべて作成しました(以下を表にあるように見せる方法がよくわからないので、本当に申し訳ありません)

ユーザー名 | 最終ログイン | ログイン回数 | IPADDRESS | IPADDRESS1 | IPADDRESS2 ...... | IPADDRESS10

アイホップ | 2012 年 12 月 21 日午後 8 時 59 分 | 5 | 80.81.82.83 | 80.81.82.82 | 80.81.82.83

同じユーザーが新しい IP アドレスを使用してログインするたびに、その IP アドレスがテーブルに記録されます。各ユーザーは、最大 10 個の異なる IP アドレスを持ちます。この表は私が最初に考えたものなので、表に表示するのが最善かどうかはよくわかりません。推奨事項も教えてください。

これらの IP アドレスをテーブルに追加するにはどうすればよいですか? 各 IP アドレス列を区切る方法がよくわかりません。新しい IP アドレスを取得すると、古い IP アドレスが上書きされ続けます。

どうもありがとうございました。

var $HOST = "website.com";  
var $USERNAME = "username"; 
var $PASSWORD = "password"; 
var $DBNAME = "database";   

function authenticate($username, $password) {

$Auth = new auth();
$detail = $Auth->authenticate($username, $password);

    if (ereg("'", $username)) 
    {
        return "invalid username";
    }

    if (ereg("'", $password)) 
    {
        return "invalid password";
    }

    $query = "SELECT * FROM user WHERE uname='$username' AND passwd=MD5('$password') AND status <> 'inactive'";

    $UpdateRecords = "UPDATE user SET lastlogin = NOW(), logincount = logincount + 1 WHERE uname='$username'";
    $connection = mysql_connect($this->HOST, $this->USERNAME, $this->PASSWORD);

    $SelectedDB = mysql_select_db($this->DBNAME);
    $result = mysql_query($query); 

    $numrows = mysql_num_rows($result);
    $row = mysql_fetch_array($result);

    if ($numrows == 0) {
        return 0;
    }

    */
    else {
        $Update = mysql_query($UpdateRecords);
        return $row;
    }
4

3 に答える 3

4

(USERNAME | IPADDRESS | TIME) 列を含む別のテーブルを用意することをお勧めします。そうすれば、特定のユーザーのさまざまな IP アドレスをより効果的に (そして簡単に) 保存することができます。次に、これらの情報を保持するアルゴリズムを選択する必要があります (最初の 10 個の異なる IP アドレスを保持する?最後の 10 個を保持する?...)。

于 2012-08-27T09:10:41.360 に答える
0

2 つのテーブルを使用する必要があります。1 つはユーザーのユーザー名パスワード最終ログイン時刻ログイン回数を保存するためのもので、もう 1 つはユーザーの IP アドレスを保存するためのものです。ユーザーがログインするたびに、ユーザーのユーザー名/ユーザー IDIP アドレス、およびログイン タイムスタンプを保存できます。

そうすれば、ユーザーの最後の 10 個の IP アドレスのみを保存したい場合は、SQL 検索をフィルタリングしてその特定のユーザーの IP アドレスのみを表示し、最初の IP アドレス エントリを最新のものに置き換えることができます。常に最後の 10 エントリが含まれます。

于 2012-08-27T09:24:46.607 に答える
0

userid、ipaddress、logged_in_date_time で別のテーブルを使用します。また、ログインするたびに IP アドレスを確認してください。クエリでIPアドレスでグループ化するために使用し、そのユーザーに10個の異なるIPがあるかどうかを確認します. ユーザーが同じ IP を持っている場合は、彼を入れます... IP が異なり、IP が 10 個を超える場合は、入れないでください。

編集:

しかし、あなたの要件はユーザーの観点からは便利ではありません。私は ADSL 接続を使用しており、IP が頻繁に変更されるため、データベースに 10 個の異なる IP が含まれていると、システムにログインできないため、ユーザーフレンドリーではありません。また、システムがネットワーク内にある場合、100 人のユーザーが同じ IP でシステムにアクセスする可能性があります。

アプリケーションのセキュリティには、準備済みステートメント、PDO、または少なくとも mysqli 関数を使用してください。mysql 関数は減価償却されます。

于 2012-08-27T09:16:28.643 に答える