【问题标题】:looping, comparing multiple table values循环,比较多个表值
【发布时间】:2015-05-03 10:40:11
【问题描述】:

我遇到了问题,不确定我需要的逻辑。

我正在尝试构建一个基本的 PHP 和 MySQL 注册页面,但要检查他们是否更改了 IP 地址,检查这些地址是否已使用 3 个不同的帐户注册,如果是,则返回 false。

这是我的逻辑。

帐户注册 -> 数据库 (site_registration) -> 电子邮件验证 -> 数据库(用户)-> 帐户登录 -> 数据库(account_logins)(仅当新 IP 时)

帐户在 3 个条目后尝试重新注册 -> 检查数据库 (site_registration) IP 字段 -> 检查数据库 (account_logins) 帐户 IP 字段 -> 将帐户的所有 IP 放入数组中 -> 根据 site_registration 检查数组 -> 如果 IP在 3 个帐户上发现,抛出注册错误 -> 数据库 (suspicious_logs)

这是我需要的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。

【问题讨论】:

  • for() 的结尾应该是 {,里面有代码,然后是 } 而不是 for();。
  • 你也不需要任何循环;你可以通过一个查询来做到这一点。
  • 那到底是什么?我无法弄清楚这里的逻辑。我需要比较他们所有的 IP,看看他们是否已经注册到任何 3 个帐户,如果是,则返回 false。

标签: php mysql database foreach registration


【解决方案1】:

这对我有用。我必须将其设置为 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';
}

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2018-07-09
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多