我删除了一些不相关的信息。
我有一个 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 方法,但没有成功。
这不是 fetch 的工作原理,也许您正在考虑 axios。考虑一下:
fetch(url).then(response => {
if(response.status === 200){
response.text().then(html => {
console.log(html)
})
}
})