Php 循环,比较多个表值

Php 循环,比较多个表值,php,mysql,database,foreach,registration,Php,Mysql,Database,Foreach,Registration,我一直有个问题&不确定我需要的逻辑 我试图构建一个基本的PHP&MySQL注册页面,检查他们是否更改了IP地址,检查地址是否已注册到3个不同的帐户,如果是,则返回false 这是我的逻辑 帐户注册->数据库(站点注册)->电子邮件验证->数据库(用户)->帐户登录->数据库(帐户登录)(仅适用于新IP) 帐户尝试在3个条目之后重新注册->检查数据库(站点注册)IP字段->检查数据库(帐户登录)帐户IP字段->将帐户的所有IP放入数组->根据站点注册检查数组->如果在3个帐户上找到IP,则抛出注册

我一直有个问题&不确定我需要的逻辑

我试图构建一个基本的PHP&MySQL注册页面,检查他们是否更改了IP地址,检查地址是否已注册到3个不同的帐户,如果是,则返回false

这是我的逻辑

帐户注册->数据库(站点注册)->电子邮件验证->数据库(用户)->帐户登录->数据库(帐户登录)(仅适用于新IP)

帐户尝试在3个条目之后重新注册->检查数据库(站点注册)IP字段->检查数据库(帐户登录)帐户IP字段->将帐户的所有IP放入数组->根据站点注册检查数组->如果在3个帐户上找到IP,则抛出注册错误->数据库(可疑日志)

这是我需要的mysql代码,但不确定如何循环它

//SELECT * FROM users WHERE (idnumber = '75.143.xxx.xxx') OR (idnumber = '76.94.xxx.xxx') OR (idnumber = '76.94.xxx.xxx')

$username = $_SESSION['login'];
$check_ip_site = $MySQL->consult("SELECT * FROM site_registration WHERE (username = '$username')");
$check_ip_logins = $MySQL->consult("SELECT * FROM site_logins WHERE (username = '$username')");
$check_ip_user = $MySQL->consult("SELECT * FROM users");

for($i = 0; $login_array[$i] = mysql_fetch_assoc($check_ip_logins); $i++);
    array_pop($login_array);

for($i = 0; $user_array[$i] = mysql_fetch_assoc($check_ip_user); $i++);
    array_pop($user_array);

foreach ($login_array["ip"] as $login_ips) {
    if (in_array($login_ips, $user_array["ip"]) > 3) {
        return true;
    } else { 
        return false;
    }
}

虽然这个语法不起作用,但这正是我所需要的,我想知道在用户数据库中的3条记录上是否找到了任何IP,如果它们返回false。

这对我来说是有效的。我必须将它设置为foreach,以便它循环查询。而且,我的for循环是这样工作的,因为我在循环内部没有什么事情要做。如果有人看到更好的方法,请告诉我!在我接受我的答案之前,我会看看是否有人有更好的解决方案

//Check if username is set, if it's not use the current IP instead (add cookie handling later to keep from destroying evidence)
$ip = $_SERVER['REMOTE_ADDR'];
if ($username == NULL){
    $check_ip_logins = $MySQL->consult("SELECT * FROM site_logins WHERE (ip = '$ip')");
}
else
{
    $check_ip_logins = $MySQL->consult("SELECT * FROM site_logins WHERE (username = '$username')");
}

for($i = 0; $login_array[$i] = mysql_fetch_assoc($check_ip_logins); $i++);
array_pop($login_array); //Deletes the null array at the end of the for loop

foreach ($login_array as $la)
{
    $lips = $la["ip"]; //Place just the IP's into it's own array

    $check_ip_user = $MySQL->consult("SELECT * FROM users WHERE (idnumber = '$lips')"); //Loop through all IP's associated with account & check the users database

    while($test = mysql_fetch_assoc($check_ip_user)) {
        $names[] = $test["name"]; // This is used as a way to count, any thing can be used here.
    }
}
if (count($names) > 3)
{
    echo 'you have too many accounts you cannot create anymore';
}
else
{
    echo 'you are able to create an account';
}

for()
的结尾应该是
{
,里面有代码,然后是
}
而不是
for()。您也不需要任何循环;您可以通过一个查询来完成这项工作。具体是什么?我搞不懂这里的逻辑。我需要比较他们所有的IP,他们曾经有过,看看他们是否已经注册到任何3个帐户,如果是这样,返回false。