file_get_content и проблема с переменной - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть функция, которая использует file_get_content, чтобы получить кусок HTML с некоторыми переменными в нем. идея состоит в том, чтобы затем обновить vars с некоторыми вещами, которые эта функция извлекает из базы данных и возвращает ее. Однако на выходе переменная просто читает $ myNameVar вместо My Name. Позвольте мне вставить мой код.

    function query($query,$item)
    {
        $this->item = file_get_contents("/pages/items/".$item.".php");
        $this->queryResult = mysql_query($query);
        if(mysql_num_rows($this->queryResult))
      {
            while($row = mysql_fetch_assoc($this->queryResult))
            {
                extract($row);
                // $myNameVar = My Name;
                // in the finished code there will be a bunch (15 or more) vars
                // that needs to be updated in the Item file so the vars
                // must be updated automatically
                return $this->item;

            }
      }
    }

И содержание item.php:

<p>My name is <span style="color: #000;">$myNameVar</span></p>

Вот вызов функции:

<?php echo $queryDb->query("SELECT * FROM sometable","item");?>

А вот и вывод:

My Name is $myNameVar

Когда это должно быть:

My Name is My Name

Я попытался заменить переменную в файле item.php на %% и запустить foreach для обновления переменных следующим образом (другая функция):

    function query($query,$item)
    {
        $this->item = file_get_contents("/pages/items/".$item.".php");
        $this->queryResult = mysql_query($query);
        if(mysql_num_rows($this->queryResult))
      {
            while($row = mysql_fetch_assoc($this->queryResult))
            {
                foreach ($row as $key => $value)
                {
                    $this->item = str_replace("%".$key."%",$value,$this->item);
                }
                return $this->item;

            }
      }
    }

Это работает частично, к сожалению, это просто возвращает первый элемент для каждой строки. Поэтому, если в первой строке $ myNameVar = Joe и во второй строке $ myNameVar = James в обоих абзацах имя Джо будет выглядеть следующим образом: Джо Джо, а не Джо Джеймс, как должно.

Любая помощь будет принята с благодарностью:)

Ответы [ 3 ]

2 голосов
/ 09 ноября 2010

Это потому, что file_get_contents() передает содержимое файла в виде строки, а не в виде исполняемого кода PHP.

Используйте взамен include().

0 голосов
/ 09 ноября 2010
<p>My name is <span style="color: #000;">$myNameVar</span></p>

должен быть

<p>My name is <span style="color: #000;"><?php echo $myNameVar ?></span></p>
0 голосов
/ 09 ноября 2010

Вам, вероятно, не нужно возвращать в первой строке, если вы хотите, чтобы ваш код действительно что-то делал.

 function query($query,$item)
        {
            $item = file_get_contents("/pages/items/".$item.".php");
$this->queryResult = mysql_query($query);
    if(mysql_num_rows($this->queryResult))
  {
        while($row = mysql_fetch_assoc($this->queryResult))
        {
            foreach ($row as $key => $value)
            {
                $this->item = str_replace("%".$key."%",$value,$this->item);
            }

return $item;
...