как разделить значение IP-адреса из базы данных в формат массива в CodeIgniter - PullRequest
0 голосов
/ 19 ноября 2018

Я работаю над приложением CodeIgniter, в котором я хочу разделить IP-адрес на формат массива.На самом деле я получаю значения из столбца базы данных, но не могу создать массив из динамических значений, получаемых из базы данных?

Код контроллера

Getting Values from the database 

$system = $this->Xin_model->read_enter_allow_ip_address_info(1);
$allowlist =  array($system[0]->enter_allow_ip_address);
$finalipallow = nl2br($allowlist);

if(!in_array($_SERVER['REMOTE_ADDR'],$finalipallow)){
$Return['error'] = 'Login Failed';  
$this->output($Return); 
}

Запрос моделей

public function read_enter_allow_ip_address_info($id) {

    $condition = "setting_id =" . "'" . $id . "'";
    $this->db->select('enter_allow_ip_address');
    $this->db->from('xin_system_setting');
    $this->db->where($condition);
    $this->db->limit(1);
    $query = $this->db->get();      
    return $query->result();
}

Динамические значения из столбца базы данных

'10.0.0.1','10.0.0.2','10.0.0.3','::1'

как разделить значения IP-адресов из базы данных в формат массива, подобный этому статическому массиву

$finalipallow = array(
        '10.0.0.1',
        '10.0.0.2',
        '10.0.0.3',
        '::1'
);

У меня есть статический массив, которыйработа с if condition, но я хочу преобразовать динамические значения в массив, как статический массив?

Работаем сейчас здесь решение этого

$system = $this->Xin_model->read_enter_allow_ip_address_info(1);
$allowlist =  $system[0]->enter_allow_ip_address;

$finalipallow = str_getcsv($allowlist, ",", "'");

if(!in_array($_SERVER['REMOTE_ADDR'],$finalipallow)){
   $Return['error'] = 'Login Failed';   
   $this->output($Return);  
}

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать str_getcsv(), чтобы обработать его как запись CSV ...

$data = "'10.0.0.1','10.0.0.2','10.0.0.3','::1'";
$finalipallow = str_getcsv($data, ",", "'");

print_r($finalipallow);

, которая выводит ...

Array
(
    [0] => 10.0.0.1
    [1] => 10.0.0.2
    [2] => 10.0.0.3
    [3] => ::1
)

Просто изменить$data к значению из базы данных.Использование deimter и необязательных вложенных параметров позволяет ему удалять лишние кавычки из данных.

0 голосов
/ 19 ноября 2018

Вы можете использовать explode, который будет разбивать строку и возвращать элементы в массиве

$newArray = explode(',',$dbString);

print_r($newArray); <- вы можете просматривать данные </p>

$dbString=  "'10.0.0.1','10.0.0.2','10.0.0.3','::1'";
$newArray = explode(',',$dbString);
print_r($newArray);

вывод: Array ( [0] => '10.0.0.1' [1] => '10.0.0.2' [2] => '10.0.0.3' [3] => '::1' )

Вам нужно будет заменить ' пустой строкой, так как я вижу, что вы сравниваете точный IP с массивом.Вы можете сделать это так:

$dbString=  "'10.0.0.1','10.0.0.2','10.0.0.3','::1'";
$dbString= str_replace("'", "", $dbString);
$newArray = explode(',',$dbString);
print_r($newArray);

или вы можете изменить

`if(!in_array($_SERVER['REMOTE_ADDR'],$newArray)`)

на

if(!in_array("'".$_SERVER['REMOTE_ADDR']."'",$newArray))
...