【问题标题】:Send query to database while closing browser关闭浏览器时向数据库发送查询
【发布时间】:2022-01-18 20:38:47
【问题描述】:

在我的网站name combiner 上,我想在关闭浏览器的同时向数据库发送查询我已经尝试过这个脚本,但它没有在数据库中执行查询来更改列状态的值

$(window).on("beforeunload", function() { 
     <?php 

    include('config/configuration.php'); 
    $uid=$_GET['id_p'];
    $statue_pharmacie = mysql_query('update pharmacies set statue=0 where id="'.$uid.'"');



     ?>
    return inFormOrLink ? "Do you really want to close?" : null; 
   
   
});

【问题讨论】:

  • 不可能。 JS 运行在客户端,PHP 运行在服务器端。您的 PHP 代码在页面生成时运行,并且在客户端的 js 代码中完全没有任何内容。您可以让 beforeunload 向服务器发出 ajax 请求以尝试执行此操作,但由于浏览器已关闭,因此无法保证请求有足够的时间进入网络。
  • 如上所述,我认为您正在混淆 PHP 和 javascript。看看ajax,创建一个php文件来处理数据库逻辑
  • 所以在关闭浏览器时无法更新数据库 =/?@MarcB
  • @SteveReck 如上所述,您必须使用 AJAX。当浏览器关闭时,使用 JS 触发对运行查询的 PHP 脚本的 AJAX 调用。
  • @versalle88 你能举个例子吗?

标签: javascript php ajax html


【解决方案1】:

这是一个基本示例(假设您使用的是 jQuery),但我会谨慎,因为卸载事件通常具有不同的浏览器支持:

Javascript:

<script>
// Grab ID for use later
var data = <?php (isset($_GET['id_p']) ? (int) $_GET['id_p'] : 0); ?>;

// On page unload
$( window ).unload(function() {
    // Send data to script
    $.post( "ajax.php", function( data ) {
        // Handle return
    });
});
</script>

ajax.php

<?php
// Make sure 0 wasn't passed
if (!empty($_POST['data'])) {
    // Run query
}

您可以在此处阅读有关 AJAX 的信息:http://api.jquery.com/jQuery.ajax/ 以及此处的简写 POST:http://api.jquery.com/jQuery.post/

另外,我会远离 PHP 的 MySQL 库,因为它已被弃用。您应该使用 PDO:http://php.net/manual/en/book.pdo.php

谢谢,

安德鲁

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多