0

I am trying to update a block of code with value's sent through a form however I am having trouble updating the whole block of code. The number of inputs change based on the code. For example:

.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; 
  }
}

I am able to sucessfully find the @ variables and display the correct number of <input>'s based off the code. The problem I am having is having my foreach loop run through each $_POST value and updating the code. The best result I have been able to get is the first $_POST value but then it cuts off.

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

In the case of .btn-primary when I fill out my inputs and submit the form the best I can get is the first value to update and that is it. If I were to put #fff in the @color field and other values into @background-color and @font-weight and run my function once submit is set, I get the output of.

.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; 
  }
 }

Any idea's on how I can get that foreach loop to keep updating the code.

4 Answers 4

2

The return should be after the foreach loop, since it's inside the loop it will exit the function on first loop

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

return htmlentities($code);
}
Sign up to request clarification or add additional context in comments.

Comments

1

You're issuing a return which is terminating your function. Either you need to call each $_POST separately to that function (inefficient) or you need to parse the data into a data structure

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

}

Comments

0

Your PHP function replace only the first value, you have to loop it:

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;
}

Use htmlentities if you need it

Comments

0

If you want to do multiple replacements, you can give str_replace arrays of the old and new strings, you don't need to use a loop.

function replace_code($code) {
    $names = array_keys($_POST);
    $values = array_map('htmlentities', array_values($_POST));
    return str_replace($names, $values, $code);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.