【问题标题】:Update using modal and php使用 modal 和 php 更新
【发布时间】:2017-06-14 20:53:00
【问题描述】:

我只使用 php 和 bootstrap 进行 CRUD 操作。我目前卡在更新中,因为我似乎无法将 $_GET['updateid'] 发送到我的模式。

这是我的 href,删除 href 有效,但更新 无效。

<a href="#myModal?updateid=<?php echo $row['sched_id'];?>" data-toggle="modal"  
              class="btn btn-warning" data-target="#myModal">Update</a>
<a href="home.php?deleteid=<?php echo $row['sched_id'];?>" class="btn btn-danger">Delete</a>

这个 php 应该从 href 中获取 updateid 并将其传递给 updateStud() 函数

if(isset($_GET['updateid'])){
  $mupdate_id = $_GET['updateid'];

  if(isset($_POST['modal-submit'])){

    $msubj = $_POST['modalsubject'];
    $msect = $_POST['modalsection'];
    $mday = implode("", $_POST['modalday']);
    $mstrTime = $_POST['modalstarttime'];
    $mendTime = $_POST['modalendtime'];

    $auth_user->updateSchedule($msubj,$msect,$mday,$mstrTime,$mendTime,$mupdate_id);
    $schedRow = $auth_user->readSchedule();
  }
}

这是我的函数更新,它获取所有数据并执行查询

public function updateSchedule($msubj,$msect,$mday,$mstrTime,$mendTime,$mupdate_id){
        $stmt = $this->conn->prepare("UPDATE `schedule`   
            SET `subject_db` = :msubj,
            `section_db` = :msect,
            `sched_day` = :mday,
            `start_time` = :mstrTime,
             `end_time` = :mendTime
            WHERE `sched_id` = :mupdate_id ");

        $stmt->bindparam(":msubj", $msubj);
        $stmt->bindparam(":msect", $msect);
        $stmt->bindparam(":mday", $mday);
        $stmt->bindparam(":mstrTime", $mstrTime);
        $stmt->bindparam(":mendTime", $mendTime);
        $stmt->bindparam(":mupdate_id", $mupdate_id);

        $stmt->execute();

        return $stmt;
    }

【问题讨论】:

  • 您避免使用 Javascript 有什么原因吗?不幸的是,我认为您尝试做的事情是不可能的。删除链接是服务器请求,而模态链接是客户端请求,不会调用您的“if(isset($_GET['updateid'])){”,因为该页面实际上并未被提交。
  • 我认为你在那里尝试这样做是错误的。您正在尝试将 updateid URL GET 参数设置为模态锚触发链接。这不是它的工作原理。如果您想将updateid 作为GET 参数传递,则将其添加到表单操作属性的末尾。您可以编辑您的问题并使用完整的 html 代码进行更新吗?

标签: php get crud


【解决方案1】:

您需要将此脚本用于您的模态。

<a data-toggle="modal" data-target="#modal-target" data-id="<?= $idyouwant ?>">Change</a>

您可以通过 ajax/jquery 像这样的 javascript 使用所需的 html 填充您的模式

$('#modal-target').on('show.bs.modal', function(ev){
    var modal = $(this);
    var link = $(ev.relatedTarget);
    var id = link.data('id');
    modal.find('.modal-body').load('yourserver/?param=' + id); // will load modal body that you want
}

然后您可以根据需要配置您的脚本。

【讨论】:

    【解决方案2】:

    如果您在整个页面中使用具有不同激活链接的相同模式,则必须通过 javascript/jquery 进行填充。除非您直接更改 boostrap.js 函数,否则模态不接受来自目标字符串的参数(我不建议弄乱供应商 js 文件)。如果由于某种原因无法将自己的脚本添加到页面,则可以执行内联 onclick 方法。

    jQuery:

    &lt;a href="#myModal" data-toggle="modal" class="btn btn-warning" data-target="#myModal" onclick="$('#updateid').val('&lt;?= $row['sched_id'] =?&gt;')"&gt;Update&lt;/a&gt;

    您需要在表单上隐藏输入 &lt;input type='hidden' id='updateid' name='updateid'/&gt; 然后在您使用 GET 方法提交表单时传递一个参数。

    如果您将其用作模态的唯一链接,您可以在模态 &lt;input type='hidden' name='updateid' value='&lt;?= $row['sched_id']?&gt;'/&gt; 中回显您的字段

    【讨论】:

      【解决方案3】:

      如果只需要使用 modal 更新数据并在 modal 内显示响应,则不需要在链接中添加#myModal。你应该这样使用它

      "?updateid=<?php echo $row['sched_id'];?>"
      

      而不是

      "#myModal?updateid=<?php echo $row['sched_id'];?>"
      

      希望它会有所帮助。

      【讨论】:

      • 您确定不需要像删除一样在更新 url 中包含 home.php 吗?
      • 如果您只想使用引导模式更新数据并在模型内部显示结果,则不需要在链接中添加#myModal。只需将其删除即可。
      【解决方案4】:

      @tjfo 在您原始问题的 cmets 中进行了观察,并且是正确的。由于“#Modal?...”链接,浏览器没有调用您的脚本。当您告诉浏览器在同一页面上加载新的“#”位置时,浏览器不会与服务器通信以获取页面的新实例。

      如果您想在不使用 javascript 向服务器发送消息的情况下完成这项工作,您可以创建唯一的访问点,每个访问点在服务器上都有自己的 URL。这将强制浏览器在每次调用时重新加载页面,并向服务器发送请求以完成操作。

      类似的方法是更改​​ Web 服务器设置,以便对新 URL 的调用都重定向到您的主脚本(例如 index.php)。

      这两种方法都不推荐,因为您的脚本使用 $_POST 引用,并且浏览器在加载新页面时不会发送 POST 数据。

      最简洁的方法是使用引导按钮调用具有必要 ID 的 javascript 函数。使用 javascript 创建一个 url。将所有数据打包在 POST 数据中(见段落后的注释)。使用 javascript 使用您的 POST 数据调用服务器(在 AJAX 上阅读),然后适当地处理响应。

      (注意:在同一个请求上发送 GET 数据和 POST 数据是没有意义的 --- 注意,如果您坚持选择不时使用 GET 参数发送 id,您可以使用$_REQUEST 变量同时访问 $_POST 和 $_GET 数据)。

      我很高兴在评论部分与您一起解决这个问题。发布更多代码,更多人可以提供更多帮助。

      【讨论】:

        猜你喜欢
        • 2019-03-24
        • 2021-02-01
        • 1970-01-01
        • 2018-04-19
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多