Раскрывающийся список HTML для выбора IP-адреса с помощью PHP

У меня есть задача, в которой пользователь вводит сетевой адрес (например, 192.168.1.0) и маску подсети / cidr (255.255.255.0 или / 24), и сценарий отображает шлюз (первый доступный IP-адрес), а затем раскрывающийся список HTML будет содержать все доступные IP-адреса в диапазоне. Затем он будет введен в базу данных SQL, которая отслеживает все используемые / недоступные IP-адреса.

Первая страница, на которой пользователь вводит 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>

и в настоящее время есть другой сценарий, который я нашел, который начинает делать это, как показано ниже:

<?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
) 
*/

Мне не нужна помощь с помещением этого в базу данных SQL, но когда один IP-адрес отображается в качестве шлюза, а остальные помещаются в раскрывающийся список, у меня возникают проблемы. Я работал с этим кодом и не могу заставить его делать то, что мне нужно. Некоторое время я работал с PHP / HTML, но не на этом уровне.

Я не слишком привязан к этому коду, но сейчас я в растерянности. Спасибо за любую помощь в этом вопросе.

Вопрос немного неясен .... у вас есть код, который помещает параметры в раскрывающийся список? вы пытались это сделать? Если да, покажите это и расскажите о конкретной области, в которой у вас возникли проблемы ...

random_user_name 12.06.2018 19:19

Как уже упоминалось, «… но когда один IP отображается как шлюз, а остальные помещаются в раскрывающийся список, у меня возникают проблемы». Я устал от нескольких попыток в нескольких разных областях за последние три часа и не могу получить первый IP-адрес в отображаемом диапазоне (например, эхо), тогда остальная часть диапазона помещается в раскрывающееся окно, чтобы пользователь могут выбрать то, что им нужно.

Micah W. 12.06.2018 19:48

Опять же: покажите попытки кода для этой части.

random_user_name 12.06.2018 20:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
215
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, нужно ли вам использовать 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>

Нет, не планирую использовать ajax. Я проверю это.

Micah W. 12.06.2018 19:28

Это не сработало. Я вставил его точно так же, как и у вас, и попытался настроить его, но не смог заставить его показать раскрывающийся список, не говоря уже о его заполнении.

Micah W. 12.06.2018 19:45

@MicahW. Убедитесь, что я отредактировал и исправил вызов getEachIpInRange (без $ перед ним). вы получаете список IP-адресов после вызова getEachIpInRange ($ cidr)? (попробуйте print_r ($ ipList) после вызова)

Ignacio Casas 12.06.2018 19:56

Потрясающие. Вставил так же, как и у вас, и все работает! Большое спасибо!

Micah W. 12.06.2018 22:08

Другие вопросы по теме