2015-11-20 2 views
0

Я пытаюсь обновить блок кода со значением, отправленным через форму, однако у меня возникла проблема с обновлением всего блока кода. Количество входов изменяется на основе кода. Например:str_replace внутри foreach внутри функции

.btn-primary{ 
    color: @color; 
    font-style: none; 
    background-color: @background-color; 
    transition: all .75s; 
    text-transform: uppercase; 
    font-weight: @font-weight; 
    &:hover{ 
    background-color: darken(@background-color, 10%); 
    font-style: none; 
    color: @color; 
    } 
} 

Я могу успешно найти @ переменные и отображать правильное число <input>-х на основе от кода. Проблема, с которой я столкнулась, заключается в том, что мой цикл foreach проходит через каждое значение $_POST и обновляет код. Лучший результат, который я смог получить, - это первое значение $_POST, но затем он отключается.

function replace_code($code){ 
foreach($_POST as $name => $value){ 
    return str_replace($name, htmlentities($value), htmlentities($code)); 
} 
} 

В случае .btn-primary, когда я заполняю свои входы и отправить форму лучшее, что я могу получить это первое значение для обновления и что это. Если бы я положил #fff в поле @color и другие значения в @background-color и @font-weight и запустил мою функцию после отправки, я получаю вывод.

.btn-primary{ 
color: #fff; 
font-style: none; 
background-color: @background-color; 
transition: all .75s; 
text-transform: uppercase; 
font-weight: @font-weight; 
    &:hover{ 
    background-color: darken(@background-color, 10%); 
    font-style: none; 
    color: #fff; 
    } 
} 

Любая идея о том, как я могу получить этот цикл foreach, чтобы обновлять код.

ответ

2

Возвращение должно быть после цикла Еогеаспа, так как внутри цикла она будет выйти из функции на первый контур

function replace_code($code){ 
foreach($_POST as $name => $value){ 
    $code = str_replace($name, htmlentities($value), $code); 
} 

return htmlentities($code); 
} 
+0

У этого был правильный выход. Спасибо огромное! –

1

Вы выдачи return который завершающий вашу функцию. Либо вам нужно позвонить каждому $_POST отдельно для этой функции (неэффективной) или вам нужно проанализировать данные в структуру данных

function replace_code($code){ 
$data = array(); 
foreach($_POST as $name => $value){ 
    $data[$name] = str_replace($name, htmlentities($value), htmlentities($code)); 
} 
return $data; 

} 
0

Ваша функция PHP заменить только первое значение, вы должны кольцуют:

function replace_code($code){ 
    //best function 
    $from = array(); 
    $to = array(); 
    foreach($_POST as $name => $value) { 
     $from[] = $name; 
     $to[] = htmlentities($value); 
    } 
    return str_replace($from, $to, $code); 
} 

function replace_code($code){ 
    foreach($_POST as $name => $value) { 
     $code = str_replace($name, htmlentities($value), $code); 
    } 
    return $code; 
} 

используйте htmlentities, если вам это нужно

0

Если вы хотите сделать несколько замен, вы можете дать str_replace массивы старых и новых строк, вам не нужно использовать цикл.

function replace_code($code) { 
    $names = array_keys($_POST); 
    $values = array_map('htmlentities', array_values($_POST)); 
    return str_replace($names, $values, $code); 
} 
Смежные вопросы