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;
}
?>