php - 为什么我的删除按钮在 PHP 中不起作用?
问题描述
我刚开始使用 PHP,有点迷茫。我觉得这可能是我遗漏的一些小东西,但是当我单击删除按钮时它不起作用。它没有给我任何错误,按钮只是单击并且什么都不做。任何想法为什么?我花了几个小时试图弄清楚,但我什么也没想到。我已经完成了添加用户并以几乎相同的方式显示用户并且它有效,但这让我很难过。提前致谢 :)
users.controller.php
static public function DeleteUserController(){
if(isset($_GET["userId"])){
$table ="users";
$data = $_GET["userId"];
var_dump($data);
$answer = UserModel::DeleteUserModel($table, $data);
if($answer == "ok"){
echo'<script>
swal({
type: "success",
title: "User has been Deleted",
showConfirmButton: true,
confirmButtonText: "Close"
}).then(function(result){
if (result.value) {
window.location = "users";
}
})
</script>';
}
}
}
users.model.php
static public function DeleteUserModel($table, $data){
$stmt = Connection::connect()->prepare("DELETE FROM $table WHERE id = :id");
$stmt -> bindParam(":id", $data, PDO::PARAM_STR);
if ($stmt->execute()) {
return 'ok';
} else {
return 'error';
}
$stmt -> close();
$stmt = null;
}
用户.js
$(".btnDeleteUser").click(function(){
var userId = $(this).attr("userId");
var username = $(this).attr("username");
swal({
title: 'Are you sure you want to delete user?',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
cancelButtonText: 'Cancel',
confirmButtonText: 'Confirm'
}).then((result)=>{
if(result.value){
window.location = "index.php?route=users&userId="+userId+"&username="+username;
}
})
})
用户.php
<button class="btn btn-danger btnDeleteUser" userId="'.$value["id"].'" username="'.$value["user"].'"><i class="fa fa-times"></i></button>
用户.php
<?php
$deleteUser = new ControllerUsers();
$deleteUser -> DeleteUserController();
?>
索引.php
<?php
require_once "controllers/template.controller.php";
require_once "controllers/products.controller.php";
require_once "controllers/sales.controller.php";
require_once "controllers/users.controller.php";
require_once "models/products.model.php";
require_once "models/sales.model.php";
require_once "models/users.model.php";
$template = new TemplateController();
$template -> tempController();
解决方案
我在这个脚本中看到了一些我们可以开始的问题。首先,它是公共静态函数,而不是文档中的静态公共函数php Static。接下来,您将实例化ControllerUsers
with并将 the作为实例化方法new ControllerUsers()
调用。DeleteUserController
当您使用静态方法或变量时,您不会实例化该类,而是直接使用ControllerUsers::DeleteUserController()
. 再次,从上面查看 php Static。这就是使用静态方法的目的,您可以在不实例化类的情况下调用它们。
我的建议是在你第一次学习 PHP 时根本不要使用静态方法,除非你熟悉其他编程语言及其对静态方法的使用。静态方法通常不受欢迎,并且无论如何在现实世界中的使用有限,因此最好实例化类并以这种方式使用方法。
无论如何,回到剧本。当您创建程序来删除用户时,使用 POST 而不是 GET 更受欢迎,因为它不会在 URL 中传输数据,这使得它更安全。我建议切换到 POST 操作而不是 GET 操作。
另外,您可以发布 index.php 文件吗?我很想知道这些路线在您的程序环境中是如何工作的。
让我们先从这些开始,然后再继续。
更新:
因此,如果您单击删除用户按钮但没有任何反应,甚至没有任何错误,可能有几个不同的原因。第一个大问题是该users.js
文件尚未添加到具有“删除用户”按钮的页面,因此请确保已将其添加到该页面。
接下来,您需要确保在使用 Jquery 中的单击功能之前已加载页面。检查here以供参考,Jquery Click。
就我个人而言,我.click
在 Jquery 中使用该方法时遇到了问题,因此我通常使用该.on
方法。我发现这是一种功能更好的更新方法,所以也试试看。您也可以在上面的 Jquery Click 中找到一个示例。
推荐阅读
- javascript - 为什么我可以在将匿名函数分配给标识符时获得它的名称?
- java - 为什么首先有抽象类?
- list - 如何在 Dart 中创建一个空列表
- r - 根据 R 中的两列计算差异
- c# - 控制在 Entity Framework Core 中生成的查询
- java - Java SplashScreen 始终在 Mac 上处于领先地位
- java - 增加 Junit(Jacocco) 中方法的行覆盖率
- gnuplot - 如何让 gnuplot 读取我的时间格式并按照输入文件的顺序保持时间?
- c - 用C设计分布式应用程序
- objective-c - 在 macOS 上,我遇到了问题。在我所有的非沙盒项目中运行 10.14.2,在任何 NSOpenPanel 中,右键单击命令都不起作用。任何想法?