比对mysql数据库中ip记录前二段是否相同,php代码怎么写?

//因为需要,数据库中记录了完整的IP,如218.64.81.38,183.59.40.203等

$q25="select * from member where";//数据库中有若干条数据
$r25=$obj_db->simplequery($q25);
$tx_list25="";
while ($a25=$obj_db->fetchrow($r25,DB_FETCHMODE_ASSOC))
{
$a25ip=explode(".",$a25[ip]);
$arr25ip="$a25ip[0].$a25ip[1]";//取IP前二位
$tx_list25.="$arr25ip,";
}
$tx_list25=substr($tx_list25,0,-1);
$bhei = array("$tx_list25");//数据库中的IP前二段
$new_array = array(127.0,192.168);//比对数据库中IP的前二段是否与这二个IP段相同
$sj=0;
foreach($new_array as $item)
{
if(in_array($item,$bhei))
{
$sj=1;
break;
}}

echo "$sj";//$sj=1,有相同的IP段,$sj=0,没有相同的IP段
=======================

请高手帮忙修正错误,或者用更简洁的代码达到效果,谢谢!

写了一个比较ip地址前半部分的函数,以你给的两个ip为例:

<?php
function ip_part_same($ip1, $ip2) {
$ip1_arr = explode('.', $ip1);
$ip1_f2 = $ip1_arr[0] . $ip1_arr[1];
$ip2_arr = explode('.', $ip2);
$ip2_f2 = $ip2_arr[0] . $ip2_arr[1];
return ($ip1_f2 == $ip2_f2) ? true : false;
}

$ip1 = '218.64.81.38';
$ip2 = '183.59.40.203';
if (ip_part_same($ip1, $ip2)) {
echo "ip1和ip2前半部分相同\n";
} else {
echo "ip1和ip2前半部分不同\n";
}
?>追问

谢谢你的回复,但我就是要与mysql表中的所有数据比对。

要单独比对某个IP我这个代码已实现了:
$bhei = array("127.0");//数据库中的IP前二段
$new_array = array(127.0,192.168);//比对数据库中IP的前二段是否与这二个IP段相同
$sj=0;
foreach($new_array as $item)
{
if(in_array($item,$bhei))
{
$sj=1;
break;
}}

追答

还没明白你的目的,我猜是下面中的一种:
1. 要比对表中是否存在前半段为特定ip段(如127.0)的数据
2. 比对表中所有ip数据,看是否存在前半段相同的ip

追问

数据库member:
id ip
1 110.251.123.139
2 120.7.251.196
3 183.67.34.189
……
因为需要,数据库中必须记录了完整的IP

但现在要取表中IP段前二位与现有黑名单IP的前二段比对是否相同

追答

一定要写这么完整么?
$your_db_ips是你从数据库里查询得到的所有ip
$blacklist_ips是你的黑名单ip列表

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-03
比对IP前面两个是不是相同,不就直接取出IP.用explode把它们放入数组,然后用直接把它们连接起来.再判断一下是不是相同就得出结果了,你为何要写这么长的代码呢?
比如:218.64.81.38,183.59.40.203
第一个取得21864
第二个取得18359
再判断一下是不是相同.哪变量的名,看到头都晕追问

不会呀,麻烦帮直接写出代码,谢谢!

取数据库中所有每条记录的IP的前二位,与固定的某IP(如127.0或192.168)比对,有相同的返回一个结果,没相同的返回一个结果。

追答

唉/......................................楼下有人写了代码了,你还问人家要全部的对比...人家明明就是帮你写成方法了....
方法的最大特点就是重用...
你把你数据库要对比的表,用循环调用这方法就可以完成这个对比了....

追问

问题是不对啊

第2个回答  2011-08-04
顶2楼的。