使用PHP可选择IP地址的HTML下拉框

使用PHP可选择IP地址的HTML下拉框,php,html,Php,Html,我有一个任务,用户将输入网络地址(即192.168.1.0)和子网掩码/cidr(255.255.255.0或/24),脚本将显示网关(第一个可用IP),然后HTML下拉框将包含该范围内的所有可用IP。然后,这将输入到跟踪所有已使用/不可用IP地址的SQL数据库中 用户输入ip/子网的第一页非常基本 <form method='POST' action='iprange.php'> Network Address<br /><input type='text' na

我有一个任务,用户将输入网络地址(即192.168.1.0)和子网掩码/cidr(255.255.255.0或/24),脚本将显示网关(第一个可用IP),然后HTML下拉框将包含该范围内的所有可用IP。然后,这将输入到跟踪所有已使用/不可用IP地址的SQL数据库中

用户输入ip/子网的第一页非常基本

<form method='POST' action='iprange.php'>
Network Address<br /><input type='text' name='netaddress' value=''><br />
Subnet Mask<br />
<select name='subnet'>
<option value='24'>255.255.255.0 or /24</option>
<option value='24'>255.255.255.128 or /25</option>
<option value='24'>255.255.255.192 or /26</option>
<option value='24'>255.255.255.224 or /27</option>
</select>
<input type='submit' value='Submit'>
</form>

网络地址

子网掩码
255.255.255.0或/24 255.255.255.128或/25 255.255.255.192或/26 255.255.255.224或/27
目前,我发现另一个脚本开始这样做,如下所示:

<?php

function getIpRange(  $cidr) {

    list($ip, $mask) = explode('/', $cidr);

    $netaddress = $_POST["netaddress"];
    $subnet = $_POST["subnet"];
    $maskBinStr =str_repeat("1", $mask ) . str_repeat("0", 32-$mask );      //net mask binary string
    $inverseMaskBinStr = str_repeat("0", $mask ) . str_repeat("1",  32-$mask ); //inverse mask

    $ipLong = ip2long( $ip );
    $ipMaskLong = bindec( $maskBinStr );
    $inverseIpMaskLong = bindec( $inverseMaskBinStr );
    $netWork = $ipLong & $ipMaskLong; 

    $start = $netWork+2;//ignore network ID and Gateway(eg: 192.168.1.0)

    $end = ($netWork | $inverseIpMaskLong) -1 ; //ignore brocast IP(eg: 192.168.1.255)
    return array('firstIP' => $start, 'lastIP' => $end );
}

function getEachIpInRange ( $cidr) {
    $ips = array();
    $range = getIpRange($cidr);
    for ($ip = $range['firstIP']; $ip <= $range['lastIP']; $ip++) {
        $ips[] = long2ip($ip);
    }
    return $ips;
}

$cidr = $netaddress'/'$subnet; // max. 30 ips
print_r(getEachIpInRange ( $cidr));


/* output: 
Array                                                                 
(                                                                     
    [0] => 172.16.0.1                                                 
    [1] => 172.16.0.2
    [2] => 172.16.0.3
    ...
    [27] => 172.16.0.28                                               
    [28] => 172.16.0.29                                               
    [29] => 172.16.0.30
) 
*/

我不确定您是否必须使用ajax。对于下拉列表,您可以执行以下操作:

<?php
$ipList= getEachIpInRange( $cidr);
?>
<select name="ips">
<?php foreach($ipList as $ip): ?>
    <option value=<?php echo $ip?>><?php echo $ip?></option>
<?php endforeach;?>
</select>


这个问题有点不清楚。。。。您是否有将选项放入下拉列表的代码?你试过了吗?如果是这样的话,显示它,并分享您遇到问题的特定区域……如前所述“.但是将一个IP显示为网关,然后将其余IP放入下拉框中是我遇到问题的地方”。在过去的三个小时里,我在几个不同的区域尝试了多次,但都无法获得要显示的范围内的第一个IP地址(例如,echo),然后将范围内的其余IP地址放入下拉框中,以便用户可以选择所需的IP地址。再次说明:显示该部分的代码尝试。不,不打算使用ajax。我会查一查的,那没用。我把它完全像你的一样放进去,并试图调整它,但无法让它显示下拉列表,更不用说填充它了。@MicahW。检查我是否编辑并修复了getEachIpInRange调用(前面没有$)。在调用getEachIpInRange($cidr)后,您是否获得ip列表?(打电话后试试打印($ipList)真棒。粘贴就像你有它,它的工作!非常感谢你!