1

I am having the error "Fatal error: Only variables can be passed by reference" in the following lines of code.

$ag = array(M($forge[2][$i], NULL, TRUE), M($about[0]["text"], "Less", TRUE), M($address[0]["text"], NULL, TRUE), M($phone[0]["text"], NULL, TRUE), M($website[0]["text"], "...", TRUE));

if(CAT)
    array_push($ag, M($cat[1], NULL, TRUE));

$pf_args =  str_replace("%s, ", "", PLACEHOLDER, 4 - count($_POST['ad']));

file_put_contents("files/" . FILENAME . ".sql", vsprintf($pf_args, $ag), FILE_APPEND); 

The message shows error in the last line. Can any one suggest me the reason?

(Edit): M() is defined as:

function M($text, $str = NULL, $escape = FALSE) {
    if (!empty($str))
        $text = str_replace($str, "", $text);
    $text = str_replace("(Edit)", "", $text);
    $text = str_replace("More", "", $text);
    $text = str_replace("Less", "", $text);
    $text = str_replace("<br>", "\n", $text);
    if ($escape)
        return mysql_escape_string(trimText(html_entity_decode(strip_tags($text))));
    else
        return trimText(html_entity_decode(strip_tags($text)));
}
2
  • 3
    In what line exactly? And how is M defined? Commented Apr 1, 2012 at 8:06
  • @Gumbo: the file_put_contents() one and M() just does few string replacements. Commented Apr 1, 2012 at 8:10

1 Answer 1

7

The problem is this line:

$pf_args =  str_replace("%s, ", "", PLACEHOLDER, 4 - count($_POST['ad']));

The last argument is just for outputting the number of replacements. You have to pass a variable here, not the expression 4 - count($_POST['ad']). Just remove the last argument and it will work.

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

http://php.net/manual/en/function.str-replace.php

If you want to limit the number of replacements, there are implementations of str_replace_once in the comments of str_replace's manual page.

Sign up to request clarification or add additional context in comments.

1 Comment

I'm sorry to hear, that you are not open to constructive criticism.

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.