Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Сохранение в конфиг массива

Сохранение в конфиг массива


     13.05.2014    Все вопросы » Общие вопросы по PHP    2388

вопрос
Добрый вечер!
Помогите реализовать следующее:
Есть код записи настроек
if ($action == "dosavesyscon") {
    if ($_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash) {
        die("Hacking attempt! User not found");
    }
    
    if (is_array($test_config))
    $save_con = $_POST['save_con'];
    
    $save_con['test_1']  = $_POST['test_1'];
    $save_con['test_2']  = $_POST['test_2'];
    $save_con['test_3']  = $_POST['test_3'];
    $find[]                 = "'\r'";
    $replace[]              = "";
    $find[]                 = "'\n'";
    $replace[]              = "";
    
    $handler = fopen(ENGINE_DIR . '/data/test_config.php', "w");
    fwrite($handler, "<?PHP \n\n//System Configurations\n\n\$test_config = array (\n\n'version' => \"1.0\",\n\n");
    foreach ($save_con as $name => $value) {
        fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
    }
    fwrite($handler, ");\n\n?>");
    fclose($handler);

    clear_cache();

    msg("info", $lang['opt_sysok'], "<font color=\"green\">$lang[opt_sysok_1]</font><br /><br /><a class=\"btn btn btn-red\" href=$PHP_SELF?mod=test>$lang[db_prev]</a>");

Так пишу
showRow("test_1", "test_1", "<input class=edit type=text style=\"text-align: center;\" name=\"save_con[test_1]\" value=\"{$test_config['test_1']}\" size=10 />");
showRow("test_2", "test_2", "<input class=edit type=text style=\"text-align: center;\" name=\"save_con[test_2]\" value=\"{$test_config['test_2']}\" size=10 />");
showRow("test_3", "test_3", "<input class=edit type=text style=\"text-align: center;\" name=\"save_con[test_3]\" value=\"{$test_config['test_3']}\" size=10 />");

Так сохраняет
<?PHP 

//System Configurations

$test_config = array (

'version' => "1.0",

'test_1' => "1",

'test_2' => "1",

'test_3' => "1,2,3",

);

?>

ВОПРОС!
Как сделать, что бы
'test_3' => "1,2,3",

сохраняло так:
'test_3' => array(1,2,3),

а, все остальное так как есть!

Заранее благодарен!

Ответил: D0Gmatist


Заменить эту часть
    foreach ($save_con as $name => $value) {
        fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
    }

на
    foreach ($save_con as $name => $value) {
        if ( count( explode( ',', $value ) ) > 1 ) {
            fwrite($handler, "'{$name}' => \"array({$value})\",\n\n");
        } else {
            fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
        }
    }

7 комментариев

rashpil
Эксперт

rashpil - 13 мая 2014 22:18 -

***Комментарий удален***

ПафНутиЙ
Админ

ПафНутиЙ - 13 мая 2014 22:48 -

Ну допустим вы записали массив, а читать как будете?
в эту строку что придёт из конфига?
showRow("test_3", "test_3", "<input class=edit type=text style=\"text-align: center;\" name=\"save_con[test_3]\" value=\"{$test_config['test_3']}\" size=10 />");

Каков вопрос - таков и ответ. Просто помните об этом.

vitnet
PHP-developer

vitnet - 13 мая 2014 22:59 -

Полностью согласен с Пашей, проще будет использовать нынешний результат 'test_3' = "1,2,3";

kolumb
Юзер

kolumb - 13 мая 2014 23:11 -

ПафНутиЙ,
В модуле будет так
if(in_array($member_id['user_group'], $test_config['test_3'])) {
код
}

P.S Читать то не проблема , я сделаю. Мне нужно конкретно сохранение!

vitnet
PHP-developer

vitnet - 13 мая 2014 23:26 -

$a = "1,2,3";
$a = explode ( ',', $a );

echo "0 -> " . $a[0] . ", 1 -> " . $a[1] . ", 2 -> " . $a[2];

$a = "1,2,3";
$a = explode ( ',', $a );
            
if( in_array($member_id['user_group'], $a) ) {
    echo "0 -> " . $a[0] . ", 1 -> " . $a[1] . ", 2 -> " . $a[2];
}

kolumb
Юзер

kolumb - 15 мая 2014 14:04 -

Заменив на
foreach ($save_con as $name => $value) {
        if ( count( explode( ',', $value ) ) > 1 ) {
            fwrite($handler, "'{$name}' => \"array({$value})\",\n\n");
        } else {
            fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
        }
    }

Все работает ! НО есть но ! Если поставить просто 1 без запятой, тогда сохраняет так
'test_3' = "1,2,3"; Как сделать что бы запятая в конце, ставилась автоматом ?

D0Gmatist
Юзер

D0Gmatist - 15 мая 2014 21:42 -

foreach ($save_con as $name => $value) {
        if ( count( explode( ',', $value ) ) > 1  ) {
            fwrite($handler, "'{$name}' => \"array({$value})\",\n\n");
        } else {
            fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
        }
}



foreach ($save_con as $name => $value) {
        if ( $name == "имя поля которое обязательно должно идти как массив" ) {
            fwrite($handler, "'{$name}' => \"array({$value})\",\n\n");
        } else {
            fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
        }
    }

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх