如何检查数据库中是否有ip?
我正在创建一个小投票系统,现在人们可以投票不止一次。
所以我把他们放在数据库中,如果它已经在数据库中,不要让它允许upvote。我使用以下命令获取数据库中的ips:
$check = mysql_query("SELECT `ip` FROM `voted`") or die(mysql_error());
我只是不知道如何检查该人投票的ip是否已经输入。
答案 0 :(得分:2)
我假设您已经有办法获取IP地址(因为您将它们插入数据库)。所以这是一个WHERE子句来验证:
$check = mysql_query("SELECT `ip` FROM `voted` WHERE `ip` = '$theIP'")...
然后检查您是否得到任何结果。如果你这样做,那就拒绝投票。
但请注意,完全根据IP地址进行验证会给您带来很多误报。
答案 1 :(得分:2)
查看MySQL中的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)
答案 2 :(得分:0)
我应该使用类似的东西:
SELECT count(*) INTO counter from `voted` WHERE ip = '0.0.0.0'
并在您的PHP代码中,您将检查计数器是否大于0。
答案 3 :(得分: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!');
}