从数据库返回php并呈现代码

时间:2010-06-30 17:33:57

标签: php

我管理我的网页内容数据库。当您访问certian页面时,将对db进行查询以返回该页面的内容。 Usualy我只是将静态html存储为字符串,当它从数据库返回并放入网页时,它会正确呈现。但是现在,一些内容实际上包含php,当返回时,php显示为文本。我查看了eval()函数,但似乎不适合我,或者我使用它错了。

以下是我的代码示例:

mysql_select_db("default_DB1", $con);

                $result = mysql_query("SELECT * FROM submenus WHERE active = '1' and menu_id='" . $_GET['article'] . "'");

    echo "<ul>\n";
                $counter = 1;
                while($row = mysql_fetch_array($result))
                {
                        echo "<li><a href=\"#tabs-" . $counter . "\" onclick=\"storySize('tabs-" . $counter . "');\">" . $row['submenu_name'] . "</a></li>\n";
                        $counter = $counter + 1;                    
                }
                echo "</ul>\n";

                $counter = 1;
                $result2 = mysql_query("SELECT * FROM submenus WHERE active = '1' AND menu_id='" . $_GET['article'] . "'");
                while($row2 = mysql_fetch_array($result2))
                {
                        echo "<div id=\"tabs-" . $counter . "\" style=\"height:100%; overflow:visible;\">" . str_replace("*#*","'",$row2['submenu_content']) . "</div>\n";                      
                        $counter = $counter + 1;
                }

                mysql_close($con);

然后返回的内容是:

<table width="100%">
<tr>
<td align="right">Username: </td>
<td align="left"><input type="text" id="txtUsername" name="txtUsername" value=""></td>
</tr>
<tr>
<td align="right">Password: </td>
<td align="left"><input type="text" id="txtPassword" name="txtPassword" value=""></td>
</tr>
<tr>
<td>User Type</td><td><select id="ddlUserType" name="ddlUserType">

$con = mysql_connect("domain.com","username","pwd");
if (!$con)
  {
  die(#*#Could not connect: #*# . mysql_error());
  }

mysql_select_db("default_DB1", $con);

$result = mysql_query("SELECT * FROM user_types WHERE user_type_name <> #*#Admin#*# and active = #*#1#*#");

while($row = mysql_fetch_array($result))
  {
  echo "<option value=\"" . $row[#*#user_type_id#*#] . "\">" . $row[#*#user_type_name#*#] . "</option>";
  }

mysql_close($con);

</select></td>
</tr>
<tr>
<td align="right"></td>
<td align="left"><input type="button" id="txtReg" name="txtReg" value="Register" onclick="alert(*#*plaka*#*);"></td>
</tr>
</table>

1 个答案:

答案 0 :(得分:2)

首先,请看eval。我怀疑它不起作用的原因是,eval期望代码以php代码开头(意味着它预先设置了一个开放<?php。所以它试图将HTML作为php执行。要解决,只需在代码前加上{在将其提交到?> ...

之前{1}}

其次,这通常被认为是非常糟糕的做法。它使安全性降低(因为SQL注入漏洞实际上可能影响服务器而不仅仅是数据)并且更难维护(因为您的代码现在位于两个地方)。

我强烈建议找到解决问题的另一种方法......