3

如何检查一个ip是否在数据库中?

我正在创建一个小投票系统,现在人们可以投票不止一次。

所以我把他们的IP放在数据库中,如果它已经在数据库中,不希望它允许投票。我使用以下方法获取数据库中的 ip:

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

我只是不知道如何检查那个人投票的ip是否已经输入。

4

4 回答 4

2

我假设您已经有办法获取 IP 地址(因为您要将它们插入数据库)。所以这是一个 WHERE 子句来验证的问题:

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

然后检查你是否得到任何结果。如果你这样做,那么拒绝投票。

但是请注意,完全基于 IP 地址进行验证会给您带来很多误报。

于 2012-07-30T21:47:18.420 回答
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 回答
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 回答