3

IPがデータベースにあるかどうかを確認するにはどうすればよいですか?

私は小さな投票システムを作成しています。現在、人々は複数回投票できます。

だから私は彼らのIPをデータベースに入れました.それがすでにデータベースにある場合は、賛成票を許可したくありません. 次を使用して、データベースでipsを取得します。

$check = mysql_query("SELECT `ip` FROM `voted`") or die(mysql_error());

その人が投票しているIPがすでに入力されているかどうかを確認する方法がわかりません。

4

4 に答える 4

2

WHEREMySQL の句を見てみましょう。

http://www.tizag.com/mysqlTutorial/mysqlwhere.php

$ip = mysql_real_escape_string([the IP address]);
$q = mysql_query("SELECT `ip` FROM `voted` WHERE `ip`= '$ip'");
if(mysql_num_rows($q) > 0){
    // They already are in the database
}

入力をサニタイズしてください。個人的には、パラメーターとバインドを使用しますが、平凡な MySQL を使用する場合は、エスケープ関数を使用してください。ただし、mysql_関数は非推奨になっているため、可能であれば避けたいと思います。( PDOを参照)

于 2012-07-30T21:48:22.183 に答える
2

IP アドレスを取得する方法はすでにあると思います (データベースに挿入しているため)。したがって、検証するのは WHERE 句の問題です。

$check = mysql_query("SELECT `ip` FROM `voted` WHERE `ip` = '$theIP'")...

次に、結果が返されるかどうかを確認します。もしそうなら、投票を拒否してください。

ただし、完全に IP アドレスに基づいて検証すると、多くの偽陰性が生じることに注意してください。

于 2012-07-30T21:47:18.420 に答える
0

次のようなものを使用する必要があります。

SELECT count(*) INTO counter from `voted` WHERE ip = '0.0.0.0'

PHP コードで、カウンターが 0 より大きいかどうかを確認します。

于 2012-07-30T21:50:47.113 に答える
0

mysql_* に固執する場合は、Andrew Mのアドバイスのようなものがうまく機能します。ただし、彼や他の人が示唆しているように、PHP を学び始めたばかりの場合は、PDO ルート (以下) を検討してください。

MySQL

<?php
if (!$qry = mysql_query("SELECT COUNT(*) AS `daCount` FROM `voted` WHERE `ip` = '".mysql_escape_string($_SERVER['REMOTE_ADDR'])."'")) {
    die('Whamm PoW! Oops, we made a boo boo!');
}

list($check) = mysql_fetch_row($qry);
if ($check > 0) {
    echo 'Thanks but you already voted!';
}
else {
    echo 'Please make your vote: Yes or No?';
}

PDO

<?php
try { // to connect to database
    $db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password', array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));
} catch (PDOException $e) {
    die('Bazinga! Oops, we made a boo boo!');
}

try { // to execute query and stuff
    $stmt = $db->prepare('SELECT `ip` FROM `voted` WHERE `ip`=?');
    $stmt->execute(array($_SERVER['REMOTE_ADDR']));
    $row_count = $stmt->rowCount();
    if ($row_count > 0) {
        echo 'Thanks but you already voted!';
    }
    else {
        echo 'Please make your vote: Yes or No?';
    }

} catch(PDOException $e) {
    die('Kaboom! Oops, we made a boo boo!');
}
于 2012-07-30T22:26:00.523 に答える