如何检查IP地址是否在数据库中?
我正在创建一个小型投票系统,目前人们可以进行多次投票。
因此,我将他们的IP地址放入数据库中,如果已经存在,则不允许再投票。我使用以下方法获取数据库中的IP地址:
$check = mysql_query("SELECT `ip` FROM `voted`") or die(mysql_error());
我不知道如何检查那个人正在投票使用的IP是否已经输入。
我假设您已经有一种获取IP地址的方法(因为您正在将它们插入数据库),所以只需使用WHERE子句进行验证:
$check = mysql_query("SELECT `ip` FROM `voted` WHERE `ip` = '$theIP'")...
接下来,请检查是否有任何结果返回。如果有,则拒绝投票。
但是请注意,仅基于IP地址进行验证将会给您带来很多错误的负面影响。
WHERE
子句:
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)
mysql_real_escape_string
没有任何好处。(除了在这个例子中出现语法错误) - knittl我应该使用类似这样的东西:
SELECT count(*) INTO counter from `voted` WHERE ip = '0.0.0.0'
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!');
}
mysql_*
函数,它们已经不再维护,社区已经开始弃用过程。相反,您应该学习预处理语句,并使用PDO或MySQLi。如果您无法决定,这篇文章将帮助您选择。如果您想学习,这里有一个很好的PDO相关教程。 - vascowhite