我管理我的网页内容数据库。当您访问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>
答案 0 :(得分:2)
首先,请看eval
。我怀疑它不起作用的原因是,eval期望代码以php代码开头(意味着它预先设置了一个开放<?php
。所以它试图将HTML作为php执行。要解决,只需在代码前加上{在将其提交到?>
...
其次,这通常被认为是非常糟糕的做法。它使安全性降低(因为SQL注入漏洞实际上可能影响服务器而不仅仅是数据)并且更难维护(因为您的代码现在位于两个地方)。
我强烈建议找到解决问题的另一种方法......