好吧,我正在努力做到这一点,以便有人可以每24小时为一个“服务器”投票,但是目前,我被困在这里:
function vote1() {
$pull = $_SERVER['REMOTE_ADDR'];
$votersIp = "select votersIp from voters";
$usersIp = $_SERVER['REMOTE_ADDR'];
$fetch = mysql_query("SELECT * FROM voters WHERE votersIp = '".$_SERVER['REMOTE_ADDR']."'");
while($rude = mysql_fetch_array($fetch)){
if($rude[votersIp] != $pull) {
$zoot="INSERT INTO voters (votersIp, lastVoted) VALUES ('$usersIp', '0')";
mysql_query($zoot) or die ( mysql_error() );
echo 'Voters IP not in database'; //debugging
}
if($rude[votersIp] = $pull) {
echo 'found ip'; //debugging
}
}
因此,如果您无法确定,我正在努力做到这一点,以便每次有人投票时,它将其IP地址添加到数据库中。我知道我在这里犯了一些非常基本的错误,但是我仍在学习。
如果您可以发布此修复程序,但也能解释我做错了,我将不胜感激,任何建议也都很好。
谢谢!
最佳答案
您的代码中有几个问题。}
或while
缺少右括号function
我们不需要遍历所有的选民表来查找IP是否在数据库中。我们可以在SQL命令中简单地使用WHERE
子句,如下所示:SELECT votersIp FROM voters WHERE votersIp = $userIp
有很多不必要的变量具有奇怪的名称。
作为安全措施,我们将逃逸用作SQL命令一部分的任何内容,以避免受到某些类型的攻击的影响。
当数组索引是字符串时,它们应该在引号之间。因此,$rude[votersIp]
是错误的,而$rude['votersIp']
是正确的。 (不带引号的PHP将其解释为常量而不是字符串。)$rude[votersIp] = $pull
语句是变量分配。您应该使用正确的运算符==
来比较值:$rude[votersIp] == $pull
缩进不好使我们的读者更难以理解该代码。好的缩进效果更好。while
循环是根据查询特定IP的查询结果完成的。这意味着if
里面的第一个条件永远不会为真(不同的IP),因此INSERT
永远不会运行。
这是一个改进的版本:
function vote()
{
$ip = $_SERVER['REMOTE_ADDR'];
$select = 'SELECT votersIp FROM voters WHERE votersIp = "' . mysql_real_escape_string($ip) . '"';
$search = mysql_query($select);
$voter = mysql_fetch_array($search);
if (!empty($voter))
{
echo 'found ip'; //debugging
}
else
{
echo 'Voters IP not in database'; //debugging
$insert = 'INSERT INTO voters (votersIp, lastVoted) VALUES ("' . mysql_real_escape_string($ip) . '", "0")';
mysql_query($insert);
}
}
建议:您应该阅读和学习有关初学者编程的好书。由于我无法为您推荐一本书,因此建议您提出推荐书。对于初学者来说,这是一本学习编程的好书。
关于php - PHP/MySQL:不插入数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9405750/