Соедините два массива в PHP после отправки из двух полей в форме - PullRequest
1 голос
/ 01 июня 2011

У меня есть два поля в форме (ip: порт) отдельно.Я хочу добавить их вместе, чтобы сделать одну строку, например, 127.0.0.1:11111 для входа в базу данных.На данный момент у меня есть эта форма.

        <ul id="textlist">
            <li>IP: <input type="text" maxlength="15" size="15" name="ip[]" value="" />:<input type="text" name="port[]" maxlength="5" size="5" value="27015" /></li>
        </ul>

, которая подчиняется этому для анализа.

$ip = array();
foreach ($_POST['ip'] as &$value) {
    if ($value != "") {
            if (preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,5}/", $value)) {
                $ip[] = addslashes(htmlentities($value));
            } else {
                $error = 'Invalid IP Address. Please go back and try again.';
            }
    }
}

$port = array();
foreach ($_POST['port'] as &$value) {
        if ($value != "") {
                $port[] = addslashes(htmlentities($value));
        }
    }
}

Затем я получаю 2 массива IP-адресов и портов (до 5 каждого) которые я хочу объединить в пары перед добавлением в базу данных.

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

Было бы неплохо добавить числовые индексы в HTML, просто чтобы убедиться, что у вас есть правильные пары.

<ul id="textlist">
    <li>IP: <input type="text" maxlength="15" size="15" name="ip[0]" value="" />:<input type="text" name="port[0]" maxlength="5" size="5" value="27015" /></li>
    <li>IP: <input type="text" maxlength="15" size="15" name="ip[1]" value="" />:<input type="text" name="port[1]" maxlength="5" size="5" value="27015" /></li>
</ul>

После этого вы можете безопасно сделать это за один цикл.

$pairs = array();
foreach ( $_POST['ip'] as $i => $ip ) 
{
    if ( preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,5}/", $ip) && $_POST['port'][$i] != "" ) 
    {
        $pairs[] = sprintf('%s:%s', addslashes(htmlentities($value)), addslashes(htmlentities($_POST['port'][$i])));
    } 
}

Было бы целесообразно добавить дополнительную проверку ошибок, например, проверить, установлено ли $_POST['port'][$i], его значение и т. Д.

0 голосов
/ 01 июня 2011

Вы можете значительно облегчить себе жизнь, переформатировав свою форму. Вы можете либо дать вашим полям ip и port явные индексы вместо того, чтобы полагаться на поведение [], либо вы можете связать каждый ip и порт в подполе большего массива.

(атрибуты и другие вещи, несущественные для примера, в примерах ниже опущены)

Вариант а:

<li><input name="ip[1]" />: <input name="port[1]" /></li>
<li><input name="ip[2]" />: <input name="port[2]" /></li>
<li><input name="ip[3]" />: <input name="port[3]" /></li>
<!-- etc -->

Это должно вернуть два массива, массив IP и массив портов, при этом индекс каждой строки будет одинаковым. Затем вы можете использовать foreach ($ip as $key => $val) и использовать значение в $ key, чтобы получить соответствующее значение из массива Port.

Вариант b:

<li><input name="connection[][ip]" />: <input name="connection[][port]" /></li>
<li><input name="connection[][ip]" />: <input name="connection[][port]" /></li>
<li><input name="connection[][ip]" />: <input name="connection[][port]" /></li>
<!-- etc -->

Это должно вернуть один массив, каждая строка которого состоит из IP и порта, связанных вместе. Затем вы можете просто foreach над массивом.

foreach ($connection as $row)
{
    var_dump ($row ['ip'], $row ['port']);
}
0 голосов
/ 01 июня 2011
$x = 0
$ip_port = array();
foreach ($_POST['ip'] as &$value) {
    if ($value != "") {
            if (preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,5}/", $value)) {
                $ip_port[$x++]['ip'] = addslashes(htmlentities($value));
            } else {
                $error = 'Invalid IP Address. Please go back and try again.';
            }
    }
}

$x = 0
foreach ($_POST['port'] as &$value) {
        if ($value != "") {
                $ip_port[$x++]['port'] = addslashes(htmlentities($value));
        }
    }
}

foreach ($ip_post as $curr) {
    echo "{$curr['ip']}:{$curr['port']}";
}

это будет работать до тех пор, пока ваши массивы идеально параллельны.Вы можете подумать о добавлении числовых индексов в форму HTML, а не в зависимости от порядка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...