运行PHP进入mySQL结果

时间:2012-01-30 23:14:32

标签: php

这可能是我四次在网上提出这个问题而没有一个有效的解决方案。

这让我发疯了。

我会尽量让它变得更容易理解。

我在数据库表中有一些代码,如下所示:

<div> Hello my name is {$name}</div>

<span> I come from {$city}</span>

<div>I am {$age} years old</div>

我再说一遍,这篇文章来自mySQL表,我使用以下代码进行选择:

function getPageContent($page) {
$q='SELECT * FROM pages WHERE Page="'.$page.'"';
 $r=mysql_query($q) or die(mysql_error());
     while($row = mysql_fetch_array($r)) {
      $content= $row['Content'];
       }
 return $content;
}

正如您所看到的,上面的代码中有一些PHP变量,例如{$age}{$city},它们只是示例,因为我不知道确切的内容。

我需要做的是找到一种方法让PHP获取$content变量的内容(来自DB SELECT的字符串),以正常识别括号{$foo}内的变量PHP变量并在回显最终代码之前运行它们。

正如您可能看到$ content变量可能包含不同且未知的变量,因此我必须找到一种方法来获取它们所代表的变量。

我不知道这里使用的正确的是eval()。但似乎eval()仅适用于{echo 'value'}而不适用于变量{$foo}{echo $foo},因为根本不会识别变量。

有人有解决方案吗?

这让我发疯了。

这个概念是为用户提供在mySQL数据库中输入HTML文本的可能性,并在括号{}中包含他们想要的任何PHP代码。这对于多语言网站来说非常有用..等等..

我希望你理解我的观点。

由于

2 个答案:

答案 0 :(得分:1)

不要为此使用eval。只需进行简单的搜索和替换即可。

从您的问题来看,很难理解存储$name$city$age的确切位置。所以,我将从你检索到这些信息的那一刻开始。让我们说它是这样的:

$content = '<div> Hello my name is {$name}</div>

<span> I come from {$city}</span>

<div>I am {$age} years old</div>
';

$city = 'Kansas City';

echo str_replace('{$city}', $city, $content);

此外,在您提供的示例代码中,$content变量在while循环的每次迭代中不断被覆盖。也许,这就是你想要发生的事情,或者你希望将它连接起来。

修改

在阅读了一些评论之后,您似乎需要一个更加动态的解决方案。您可以通过以下方式实现:

if (preg_match_all('/{\$\w+}/', $content, $matches)) {
    foreach ($matches[0] as $var) {
        // var now contains the {$variableName}.
    }
}

这将在您的HTML中找到变量,然后您可以循环,与包含实际名称/值对的文件进行比较。然后使用str_replace,如上所示。

答案 1 :(得分:0)

为什么不这样做?

<div> Hello my name is <?=$name?></div>

<span> I come from <?=$name?></span>

<div>I am <?=$age?> years old</div>

当然,要实现此功能,您需要启用short_open_tag指令。如果没有启用,您可以在更多代码中完成相同的操作:

<div> Hello my name is <?php echo $name ?></div>

<span> I come from <?php echo $name ?></span>

<div>I am <?php echo $age ?> years old</div>

你应该注意恶意用户获取对这个脚本的访问权限,因为你想象它的方式,他们将能够执行他们想要的任何代码。 请务必清理此脚本的输入和输出!