【问题标题】:Create multi-row json from a pdo query and pass it from php to a jquery function从 pdo 查询创建多行 json 并将其从 php 传递给 jquery 函数
【发布时间】:2021-03-15 05:32:48
【问题描述】:

我正在使用 X-editable 和 PHP 下拉选择框创建内联编辑数据。我面临一个问题,我无法在 jquery 中从数据库数据创建动态选择选项。

实际上,我想在 PHP 中回显 source 格式的文本,以便在 jquery 中添加。下面的 sn-p 格式正确,但我不知道如何使用 PHP 中的数据动态回显该文本。

-- PHP -- 
$stmt = $connect->prepare("SELECT * FROM `profile`");
$stmt->execute();  

-- JQUERY --
$('#employee_data').editable({
  container: 'body',
  selector: 'td.gender',
  title: 'Gender',      dataType: 'json',
  source: [{value: "Male", text: "Male"}, {value: "Female", text: "Female"}]
 });

请帮助我从服务器端查询创建此 json 结构 [{value: "Male", text: "Male"}, {value: "Female", text: "Female"}] 并将其传递给 jquery 中的 editable() 函数参数。

我试过了,但没用:

$result = $stmt->fetchAll();     

foreach($result as $data => $value) {         
  $data = array('value' => $value["category_id"], 'text' => $value["category"]);     
}     

$category_list = json_encode($data);

【问题讨论】:

  • 可以使用json_encode函数。但首先您需要处理该查询的结果
  • 我使用了 foreach 函数,但它不适用于 json encode
  • 请帮我按你的方式写
  • 您需要向我们展示尝试了什么。然后我们可以帮助您了解它为什么不起作用以及如何解决它。这就是这个网站的运作方式。因此,请使用代码更新您的问题。谢谢。
  • 我希望在执行上述问题的 PHP 时,它会以这种格式提供输出 [{value: "Male", text: "Male"}, {value: "Female", text: "Female"}]

标签: javascript php arrays json pdo


【解决方案1】:

有几点要通知您...

  1. 如果您没有在 sql 中使用任何占位符,那么使用准备好的语句是不必要的开销。只需使用query()

  2. 不要从您的 SELECT 子句中请求比您实际打算使用的更多的数据。我不知道您的表中有多少列,但您只需要根据您发布的脚本获取category_idcategory

  3. 通过在 SELECT 子句中为列名设置别名,您可以避免为了调整键而迭代结果集的行的额外步骤。

  4. category_idcategorygendergender 之间似乎存在脱节。我不确切知道使用什么数据来创建这些<option>s,但我想告诉你,在选项的文本和相同的选项的value 属性中重复相同的文本永远不会有任何好处。换句话说,<option value="Male">Male</option> 只能写成<option>Male</option>;前者只是多余的标记膨胀。我会假设 category_idcategory 不是相同的值,所以不必担心冗余。

  5. fetchAll() 最适合在您不在同一“层”中迭代数据时使用。因为服务器端(php)的数据正在传递给客户端(js),所以不需要手动迭代结果集来创建数组;让fetchAll() 完成所有工作。

代码:(假设您在打印到屏幕的同一文件中查询)

source = <?php echo json_encode($pdo->query("SELECT `category_id` AS `value`, `category` AS `text` FROM `profile`")->fetchAll()); ?>

有很多好的建议/技术@https://phpdelusions.net/pdo_examples/select

【讨论】:

  • 恐怕有人误按了我正确、有见地和慷慨的答案上的 DV 按钮。
【解决方案2】:

这里有一个简单的逻辑错误 - 每次循环运行时您都会覆盖 $data 的值,因此您最终只会对数据中最后一个条目的值进行编码。

相反,您需要声明一个数组,然后在每次循环时向该数组添加项目:

$result = $stmt->fetchAll();     
$list = array();

foreach($result as $data => $value) {         
  $list[] = array('value' => $value["category_id"], 'text' => $value["category"]);     
}     

$category_list = json_encode($list);

然后在 JavaScript 中,简单地写:

source: <?php echo $category_list; ?>

【讨论】:

  • 不工作,错误 - 不能将标量值用作数组
  • 抱歉,您已经将 $data 定义为循环参数。试试上面的更新版本 - 只需要使用不同的变量名
  • 谢谢你..我相信你知道代码..你能帮我吗..https://stackoverflow.com/questions/65120394/append-function-is-not-working-in-jquery-ajax-of-php-response?noredirect=1#comment115133476_65120394
猜你喜欢
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多