WordPress PHP 脚本未正确被 Javascript 调用

问题描述 投票:0回答:1

我删除了一些不相关的信息。

我有一个 WordPress 网站,并且制作了一个插件,用于更新我创建的数据库。简而言之,我有一个工具,我想限制用户使用该工具的次数。为此,我创建了一个包含用户 ID 和使用计数列的数据库。我有另一个脚本来检查此数据库,如果使用列达到一定数量,它不会让用户使用该工具并且工作正常。

我面临的问题是当我在浏览器中打开插件的链接时https://REDACTED.com/wp-content/plugins/track_user_usage/track_user_usage.php它会获取用户ID并成功更新数据库没有问题,但是当我尝试让它从我为测试创建的简单 javascript/html 脚本请求 php 脚本时,它表示成功,但不会更新数据库。

这是我的 PHP 插件,其中一些内容经过编辑:

<?php
/*
Plugin Name: Track User Usage
Plugin URL: REDACTED
Description: 
Version: 1.0
Author: REDACTED
*/

define('DB_SERVER2', 'REDACTED');
define('DB_USERNAME2', 'REDACTED');
define('DB_PASSWORD2', 'REDACTED');
define('DB_NAME2', 'REDACTED');

// Establish a persistent database connection
$conn = new mysqli(DB_SERVER2, DB_USERNAME2, DB_PASSWORD2, DB_NAME2);
$conn->autocommit(TRUE);
$conn->real_query("SET NAMES 'utf8'");

// Checking connection
if ($conn->connect_error) {
    die('Database connection failed: ' . $conn->connect_error);
}

function process_request() {

    global $conn;

    if ( ! defined( 'ABSPATH' ) ) {
        define( 'ABSPATH', '/home/REDACTED/REDACTED.com/' );
    }

     if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
     
        return;
    }

    include_once ABSPATH . '/wp-load.php';
    $userid = get_current_user_id();

    if ($userid == 0) {
        return;
    }

    $user_id = $userid; 
    $created_at = date('Y-m-d H:i:s'); 

    // Check if the user already exists in the table
    $sql_check_user = "SELECT * FROM tool_usage WHERE user_id = ?";
    $stmt_check_user = $conn->prepare($sql_check_user);
    $stmt_check_user->bind_param("i", $user_id);
    $stmt_check_user->execute();
    $result = $stmt_check_user->get_result();

    if ($result->num_rows > 0) {
        // User exists, update the usage count
        $sql_update_usage = "UPDATE tool_usage SET usage_count = usage_count + 1 WHERE user_id = ?";
        $stmt_update_usage = $conn->prepare($sql_update_usage);
        $stmt_update_usage->bind_param("i", $user_id);
        if ($stmt_update_usage->execute()) {
            
        } else {
            
        }
    } else {
        // User doesn't exist, insert a new record
        $usage_count = 1; // Initial usage count
        $sql_insert = "INSERT INTO tool_usage (user_id, usage_count, created_at) VALUES (?, ?, ?)";
        $stmt_insert = $conn->prepare($sql_insert);
        $stmt_insert->bind_param("iis", $user_id, $usage_count, $created_at);
        if ($stmt_insert->execute()) {
            
        } else {
            
        }
    }

    $stmt_check_user->close();
}

process_request();

$conn->close();
?>

如果您想知道为什么有一些 else 语句什么也没有,那是因为有 echo 语句,但这些语句由于某种原因导致了一些问题,所以我只是删除了它们,因为我真的不需要它们,但他们说成功了。

这是我的简单测试 HTML/Javascript 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Track User Usage</title>
    <script>
        function trackUserUsage() {
            fetch('https://www.REDACTED.com/wp-content/plugins/track_user_usage/track_user_usage.php')
                .then(data => {
                    if (data.success) {
                        console.log('PHP script called successfully:', data);
                    } else {
                        console.error('PHP script error:', data);
                    }
                })
                .catch(error => {
                    console.error('Error calling PHP script:', error);
                });
        }
    </script>
</head>
<body>
    <button onclick="trackUserUsage()">Track User Usage</button>
</body>
</html>

在过去的几个小时里,我尝试了多种不同的 Javascript 和 PHP 方法,但没有成功。

javascript php ajax wordpress request
1个回答
0
投票

这不是 fetch 的工作原理,也许您正在考虑 axios。考虑一下:

fetch(url).then(response => {
  if(response.status === 200){
    response.text().then(html => {
      console.log(html)
    })
  }
})
© www.soinside.com 2019 - 2024. All rights reserved.