Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql数据库中检查用户ip_Php_Mysql - Fatal编程技术网

Php 在mysql数据库中检查用户ip

Php 在mysql数据库中检查用户ip,php,mysql,Php,Mysql,我有一张桌子给用户 id_agent name agent_center agent_name agent_password 1 black ABCE black 1234 2 white XYZ white 1234 我有另一个存储ip的表 id_center center_name ipdetails 1 ABCE 118.

我有一张桌子给用户

id_agent   name   agent_center  agent_name  agent_password
 1         black   ABCE          black       1234
 2         white   XYZ           white       1234
我有另一个存储ip的表

id_center   center_name    ipdetails
 1          ABCE           118.102.244.52,127.0.0.1  //black ip 118.102.244.52
 2          XYZ            192.168.0.1,123.87.65.43
 3          LKA           
现在,如果我尝试使用
agent\u name=black
agent\u password=1234
登录,它将检查第二个表中的ip是否存在于与用户相关的
center\u name
中。在这种情况下
center\u name=ABCE
。因此,如果该用户的ip存在于ABCE中,它将前进或拒绝。我如何从功能

我已经有了一个从表中的一行检查ip的函数

function check_ip_detailss($center_id,$center_name){
$sql_IP=mysql_query("SELECT * FROM center_listt WHERE center_name='$center_name' AND ipdetails LIKE '%$center_id%'");
$nos=mysql_num_rows($sql_IP);
if($nos){
    $ip_mess="";
} else {
    $ip_mess="<h1 align=\"center\" style=\"font-size:24px\">Your IP(".$center_id.") is currently inactive. 
    <br/><br/>Please contact your system administrator for inquiries.</h1>";
}

return $ip_mess;
}
?>
正在检查的表

id_center   agent_center  ip
 1           LKM          122.23.32.54,123.56.87.82,321,45,65,34,881.43.23.45

如何执行一个函数,检查用户
代理\u中心
,然后在第二个表中查找该用户的ip

根据中心名称连接两个表,使用where子句检查名称和密码,并使用FIND\u in\u SET检查ip地址

示例代码。要知道他们是否可以登录,只需检查此查询是否返回一行

SELECT *
FROM users a
INNER JOIN centers b
ON a.agent_center = b.center_name
WHERE a.agent_name = 'black' 
AND a.agent_password = '1234'
AND FIND_IN_SET('118.102.244.52', b.ipdetails) > 0
但与标准化的数据库设计相比,这将是无效的

EDIT-php函数,用于在传递用户名、密码和ip地址时检查详细信息:-

<?php

function check_ip_details_for_user($agent_name, $agent_password, $center_id)
{
    $ip_mess="";
    $sql = "SELECT a.agent_center
            FROM users a
            INNER JOIN centers b
            ON a.agent_center = b.center_name
            WHERE a.agent_name = '".mysql_real_escape_string($agent_name)."' 
            AND a.agent_password = '".mysql_real_escape_string($agent_name)."'
            AND FIND_IN_SET('".mysql_real_escape_string($center_id)."', b.ipdetails) > 0";
    $query = mysql_query($sql);     
    $nos = mysql_num_rows($query);
    if(!$nos)
    {
        $ip_mess="<h1 align=\"center\" style=\"font-size:24px\">Username or password not correct for this ip address. 
        <br /><br />Please contact your system administrator for inquiries.</h1>";
    }

    return $ip_mess;
}
?>

ehe。问题是我如何进行此检查我建议您制作一个新表来单独存储IP,并以
INT
格式分配给它所属的中心,这样您就可以轻松地将一个IP与另一个IP与
INET\u ATON
/
INET\u NTOA
进行比较。您在这里存储IP地址的方式是次优的。你需要一对多的关系,但你使用的是某种逗号分隔的值,MySQL可能不希望理解。问题是你已经做了什么,你在哪里遇到了困难。错误消息是什么,etcregardless以您想要的方式,不在列中存储逗号分隔的值,规范化您的RDBY及其返回的行。如何使其动态化,以检查使用建议的php修改的任何用户,以检查详细信息。感谢您的更新。因此,假设我有一个代理名称black,并在一个表中通过1234,代理中心=abc,在另一个表中包含用户黑色ip,我应该能够但是这是因为你函数的错误消息。或者我调用函数的方式不对。我已经检查了SQL FIDLE,SQL应该可以工作()。可能在ipdetails字段中有一些额外的空格
<?php

function check_ip_details_for_user($agent_name, $agent_password, $center_id)
{
    $ip_mess="";
    $sql = "SELECT a.agent_center
            FROM users a
            INNER JOIN centers b
            ON a.agent_center = b.center_name
            WHERE a.agent_name = '".mysql_real_escape_string($agent_name)."' 
            AND a.agent_password = '".mysql_real_escape_string($agent_name)."'
            AND FIND_IN_SET('".mysql_real_escape_string($center_id)."', b.ipdetails) > 0";
    $query = mysql_query($sql);     
    $nos = mysql_num_rows($query);
    if(!$nos)
    {
        $ip_mess="<h1 align=\"center\" style=\"font-size:24px\">Username or password not correct for this ip address. 
        <br /><br />Please contact your system administrator for inquiries.</h1>";
    }

    return $ip_mess;
}
?>