PHP代码是打印文本而非打字代码

时间:2014-10-18 04:15:27

标签: php html

我在我购买的脚本中创建了一个主页编辑器工具。这个主页编辑器的功能是允许我创建不同的部分,并按创建顺序将它们一个显示在另一个上面。希望这会给我一些拉伸屏幕宽度的块效果。

除了一件之外,一切似乎都很好。我将html和php代码输入到管理面板的字段中,并在我编写时将其保存到数据库中。但是,当我将每个部分回显到主页时,它只是将我的PHP代码显示为纯文本,并且不会将其解释为php并执行其功能。

以下是来自homepage.php的代码,用于打印结果。

<?php

session_start();
require_once("inc/config.inc.php");

    if (isset($_GET['ref']) && is_numeric($_GET['ref']))
{
    $ref_id = (int)$_GET['ref'];
    setReferal($ref_id);

    header("Location: index.php");
    exit();
}
///////////////  Page config  ///////////////
function get_all_section($section_id='')
{
    $sql="SELECT * FROM `cashbackengine_homepage` WHERE 1";
    if($section_id!="")
    {
        $sql.=" AND section_id='".$section_id."'";
    }
    $sql.=" AND section_status=1";
    $sql.=" ORDER BY section_order ASC";
    //echo $sql;
    $res=mysql_query($sql);
    while($row=mysql_fetch_array($res))
    {
        $section_array[]=array(
            'section_id' =>$row['section_id'],
            'section_name' =>$row['section_name'],
            'section_desc' =>$row['section_desc'],
            'section_order' =>$row['section_order'],
            'section_status' =>$row['section_status'],
            'last_updated' =>$row['last_updated'],
        );
    }
    return $section_array;
}

$get_all_section=get_all_section('');
/*$get_all_section2=get_all_section('2');
$get_all_section3=get_all_section('3');
$get_all_section4=get_all_section('4');
$get_all_section5=get_all_section('5');*/

for($i=0; $i<count($get_all_section);$i++)
{
//echo htmlspecialchars_decode($get_all_section[$i]['section_desc']);
    //echo  htmlspecialchars_decode(stripslashes(str_replace("&nbsp;","",(str_replace("<br />","\n",$get_all_section[$i]['section_desc'])))));
        echo $get_all_section[$i]['section_desc'];
}
?>

我确定问题与最后的回声有关。但我不确定如何使用htmlspecialchars使其与PHP一起工作,如果它甚至会。或者如果我必须在保存的部分中添加一些奇怪的内容。

这是我的一个部分。任何帮助是极大的赞赏。谢谢。

<div style="height:260px; width:100%; background-color:#000; margin:0px; color:white;">
<div id="header">
    <div id="logo"><a href="<?php echo SITE_URL; ?>"><img src="<?php echo SITE_URL; ?>images/logo.png" alt="<?php echo SITE_TITLE; ?>" title="<?php echo SITE_TITLE; ?>" border="0" /></a></div>
    <div class="start_saving">
    <div id="links">
        <?php if (MULTILINGUAL == 1 && count($languages) > 0) { ?>
            <div id="languages">
            <?php foreach ($languages AS $language_code => $language) { ?>
                <a href="<?php echo SITE_URL; ?>?lang=<?php echo $language; ?>"><img src="<?php echo SITE_URL; ?>images/flags/<?php echo $language_code; ?>.png" alt="<?php echo $language; ?>" border="0" /></a>
            <?php } ?>
            </div>
        <?php } ?>
        <div id="welcome">
        <?php if (isLoggedIn()) { ?>
            <?php echo CBE_WELCOME; ?>, <a href="<?php echo SITE_URL; ?>myprofile.php"><span class="member"><?php echo $_SESSION['FirstName']; ?></span></a><!-- | <a href="<?php echo SITE_URL; ?>myaccount.php"><?php echo CBE_ACCOUNT ?></a>--> | <?php echo CBE_BALANCE; ?>: <span class="mbalance"><?php echo GetUserBalance($_SESSION['userid']); ?></span> | <?php echo CBE_REFERRALS; ?>: <a href="<?php echo SITE_URL; ?>invite.php#referrals"><span class="referrals"><?php echo GetReferralsTotal($_SESSION['userid']); ?></span></a>
        <?php }else{ ?>
            <a class="signup" href="<?php echo SITE_URL; ?>signup.php"><?php echo CBE_SIGNUP; ?></a> <a class="login" href="<?php echo SITE_URL; ?>login.php"><?php echo CBE_LOGIN; ?></a>
        <?php } ?>
        </div>
    </div></div>
</div>

1 个答案:

答案 0 :(得分:1)

您好像从数据库中获取这些部分内容,而不是从Web服务器上存储的文件中获取。这是对的吗?

假设这是真的,那我的下一个问题是,谁填充这些数据?这是以用户输入的方式进行的吗?我问的原因是因为我的下一个建议,可能收到也可能没收到。

你的PHP代码没有执行的原因是因为它是从数据库中检索并以字符串形式输出,而不是作为代码输出。那么你问,如何执行存储在字符串中的代码?那么,这个问题的答案是在字符串上使用eval()但这是你必须非常小心的地方!!!!!!! 如果该字符串的任何部分可能来自不受信任的来源,则可能会执行恶意PHP代码,这可能是让恶意者进入你的服务器,在那里他们可以找到你的数据库,服务器等中的所有信息。确保在执行代码之前知道代码的来源!


你很好地指出它与PHP混合的HTML。所以我看到两种可能的解决方案......

  1. This post建议您可以执行eval(' ?>'. $section .' <?php');这是有道理的,您在评估字符串之前就已经脱离了PHP,因此要求包含的字符串打开自己的PHP标记编写PHP代码。
  2. 我能想到的另一种方法是将内容放入临时文件,然后include()该文件:
  3. // get contents, store in $contents
    $filename = tempnam(sys_get_temp_dir(), 'section');
    file_put_contents($filename, $section);
    include($filename);
    unlink($filename);