【发布时间】:2021-11-16 01:57:48
【问题描述】:
我有一个表notifications,其中有一个字段notification,它具有值:
<?php echo '.$user['name'][0].' ?>, you are <?php echo popularity(); ?>% popular today.
输出为:, you are % popular today.
这里忽略了PHP。我不明白为什么。
预期输出为Shubham, you are 35% popular today.
在检查元素的网络下,带有原始数据的响应选项卡显示如下:
<div class="notiText">
<?php echo $user['name'][0]; ?> you are <?php echo popularity(); ?>% popular today.
</div>
这里有什么问题?为什么脚本没有从数据库中加载 PHP 标签?
编辑
我已经尝试从这里Reading php code from database 使用eval()。但是,我必须在数据库中而不是在代码中这样做。新输出有这个eval(), you are eval()% popular today.。还没看。
注意:我不能在编码中使用eval()。这必须是动态的并且来自数据库。因此,任何想要建议 eval() 的人我都需要一个替代方法或解决方法来解决 eval() 和数据库的情况。
更新
这里是示例代码:
processes/notifications.php
$stmt = $pdo->prepare("SELECT notification FROM notifications");
$stmt-> execute();
$html = "<div class='notifications'>";
while($f = $stmt->fetch()){
$html .= '<a href="'.$link.'">'.$f['notification'].'</a>';
}
$html .= "</div>";
echo $html;
jQuery
$(".notificationsBell").on("click", function(e){
$.ajax({
type: "POST",
url: "processes/notifications.php",
data: "all",
success: function(data){
$(".loadNotifications").html(data);
}
});
});
HTML
<div class="loadNotifications"></div>
更新 2
好的,下面的代码给了我正确的输出。
$str = ''.$user['name'][0].', you are '.popularity().'% popular today.';
eval("\$str = \"$str\";");
echo $str;
输出:Shubham Jha, you are 100% popular today.
现在,如何将该字符串($str 的值)插入数据库?在表格字段中,格式应该是什么,以便正确识别和回显。我试过了,但没有用。
'.$user['name'][0].', you are '.popularity().'% popular today.
返回此错误:
Parse error: syntax error, unexpected string content "", expecting "-" or identifier or variable or number in E:\xampp\htdocs\newchat\processes\notifications.php(65) : eval()'d code on line 1
【问题讨论】:
-
您应该显示生成上述代码的 php 代码。但是,您需要注意,从数据库中检索到的任何内容都是数据而不是代码。
-
因此,如果数据库中的数据是php代码,那么就必须通过eval()函数来执行,这个限制是没有办法绕过的。坦率地说,我不明白为什么你不能使用 eval() (嗯,为什么你首先需要将 php 代码存储在数据库中......)。请提供更多上下文!
-
@Shadow 我已经更新了这个问题。我已经提供了从 PHP 代码到 AJAX 再到 HTML 的所有必要内容。请看一看。
-
回声流行度();??你到底是如何回应它的?!您可以回显一个变量,函数返回值或在函数内打印,然后直接调用它而不回显。
-
你应该 $something = Popular();然后回显 $something;也是一个字符串吗?如果返回的数据不是字符串,则无法回显它... print_r($something);