好吧,我正在努力做到这一点,以便有人可以每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/

10-09 00:16