Javascript Update mysql Row on Bootstrap modal open

Posted

技术标签:

【中文标题】Javascript Update mysql Row on Bootstrap modal open【英文标题】: 【发布时间】:2018-07-24 07:13:38 【问题描述】:

我认为我已经在主题标题中阐述了我的问题。

我在网格视图中有产品的电子商务商店。对于每个项目,我都有带有产品信息等的独特模式。

产品存储在 mysql 数据库中。并获得了浏览量(计数,有多少用户浏览了该产品)

我想在 Modal 打开时更新 MySQL 行。

但此时我遇到了两个问题: 1.即使没有打开模式,它也会更新值。(页面只是加载) 2.它会更新所有产品的浏览量。(我认为是因为1.问题)

对于每个产品,我都有唯一的 ID 和类别(将仅复制起始代码,因为所有模式都很大)

<div class="modal fade shop_item_<?php echo $item['id'];?>" id="shop_item_<?php echo $item['id'];?>" tabindex="-1" role="dialog" aria-hidden="true" style="width:100%">

这就是我尝试更新视图的方式(此代码位于模态之后):

<script>
    $('#shop_item_<?php echo $item['id'];?>"').on('shown.bs.modal', function() 
      <?php
      $id = $item['id'];

      $stmt = $this->conn->prepare("SELECT views FROM shop_items WHERE id='$id'");
      $stmt->execute();
      $result = $stmt->fetchAll();
      foreach ($result as $views)
        $newviews = $views['views'] +1;
        $stmt = $this->conn->prepare("UPDATE shop_items SET views = '$newviews' WHERE id='$id'");
        $stmt->execute();
      
     ?>
</script>

【问题讨论】:

为所有模态输入通用类名,并为您打开模态的按钮或墨迹放置通用类名。为该 comman 类名称定义一个单击事件,如果唯一的 ID 字段不常见,则获取属性。这样您就可以根据 ID 跟踪激活了哪个模式。永远不要为同一组组件放置唯一的类名。因为我们可以根据类为这些组件组定义操作,并根据 ID 唯一标识它们。当您可以按预期方式同时使用类和 ID 时,您的问题将得到解决 @webDev 我不明白这如何解决所有产品视图更新的问题? 好的,所以当你点击一个元素来打开模态框时......你需要获得模态框的 id = .....attr('id') ,该模态框将具有 id的记录。触发 ajax 调用并根据存储在模式的 ID 属性上的 id 更新记录。首先告诉我你是如何打开模态的,你在循环中有按钮或链接吗? @webDev 我发现问题出在此处 "$('.shop_item22_"').on('shown.bs.modal ', function() " 因为 shop_item22 甚至不存在,但更新功能仍然有效 是的,这就是为什么我说对 JS 的操作使用类名而不是 ID。因为重复没有太大区别的JS代码和方法不是一个好主意。只需 tract 当前 item_id 点击。看我的例子 【参考方案1】:

根据您的评论,您可以做的只是简单地输入项目 ID 和 html 属性 ID

查看我放置的所有 ID 和类。对于一组相同的模态,您只需要一个 javascript 方法。

<!-- Inside a loop -->
<button type="button" class="btn btn-info btn-lg open_modal" id="<?php echo $item['id']; ?>" data-toggle="modal" data-target="#<?php echo $item['id']; ?>">Open Modal</button>

<div class="modal fade" id="<?php echo $item['id']; ?>" tabindex="-1" role="dialog" aria-hidden="true" style="width:100%">
    .......
    .......
    .......
</div>
<!------------------>

一种基于打开的模式更新记录的单一JS方法

<script>
    $('.open_modal').click(function () 
        var item_id = $(this).attr("id");
        //get all other data based on this ID and also get updated one from modal
        //make a ajax call to update the record base on this item_id
    )

</script>

假设:我假设您通过循环创建了许多模态,并且您希望根据要打开的模态记录来更新每个模态记录。

【讨论】:

以上是关于Javascript Update mysql Row on Bootstrap modal open的主要内容,如果未能解决你的问题,请参考以下文章

js能循环执行自身函数吗

如何在 mysql 查询中编写 javascript 代码?

mysql You can't specify target table 'sys_org_relation' for update in FROM clause 删除表

PHP MySQL Update 之 Update

Rails update.js.erb 不执行 javascript

freebsd-update upgrade -r 11.1-RELEASE