【问题标题】:Fetching PHP code from table field in database从数据库中的表字段中获取 PHP 代码
【发布时间】: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);

标签: php jquery mysql sql ajax


【解决方案1】:

试试这个:

while($f = $stmt->fetch()){
  // STORE IN SIMPLE VARIABLES 
  $name = $user['name'][0];
  $popularity = popularity();

  $notiText = $f['notification'];
  eval("\$notiText = \"$notiText\";");

  $html .= '<a href="'.$link.'">'.$notiText.'</a>';
}

在数据库中使用这些简单的变量名,避免使用引号。

$name, you are $popularity% popular today.

【讨论】:

  • 完美....谢谢:)
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 2011-04-02
  • 2013-03-08
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多