在PHP中更新数据库后继续注销
我最近发布了一篇关于删除数据库中的多行的文章,基本上是重复使用代码来更新数据库中的多行,但是现在我遇到了一个问题,一旦数据库被更新,页面刷新,它就会一直记录我,我不知道为什么 以下是ajax:在PHP中更新数据库后继续注销,php,mysql,ajax,Php,Mysql,Ajax,我最近发布了一篇关于删除数据库中的多行的文章,基本上是重复使用代码来更新数据库中的多行,但是现在我遇到了一个问题,一旦数据库被更新,页面刷新,它就会一直记录我,我不知道为什么 以下是ajax: function editUser(){ var url = 'edit-user.php'; var ids = document.getElementById("edit-user-id").value; var role = document.getEl
function editUser(){
var url = 'edit-user.php';
var ids = document.getElementById("edit-user-id").value;
var role = document.getElementById("role").value;
var status = document.getElementById("accountStatus").value;
var data = 'userID=' + ids.toString() + '&role=' + role + '&status=' + status;
$.ajax({
url: url,
data: data,
cache: false,
error: function(e){
alert(e);
},
success: function () {
var selects = $('#users-table').bootstrapTable('getSelections');
ids = $.map(selects, function (row) {
return row.id;
});
$('#users-table').bootstrapTable('refresh', {
silent: true
});
location.reload();
}
});
}
下面是PHP:
require("../config.php");
try{
$role = $_GET['role'];
$status = $_GET['status'];
$ids = array($_GET['userID']);
$inQuery = implode(',', $ids);
$query = 'UPDATE users SET role = :role, account_status = :status WHERE user_id IN ('.$inQuery.')';
$query_params = array(
':role' => $role,
':status' => $status
);
$stmt = $db->prepare($query);
$stmt->execute($query_params);
// Set variable message of affected rows
$count = $stmt->rowCount();
$user_updated = ''.$count.' user(s) updated successfully.';
$_SESSION['user_updated'] = $user_updated;
} catch (Exception $e){
$error = '<strong>The following error occured:</strong>'.$e->getMessage();
$_SESSION['error'] = $error;
}
require(“../config.php”);
试一试{
$role=$_GET['role'];
$status=$_GET['status'];
$ids=数组($_GET['userID']);
$inQuery=内爆(“,”,$ids);
$query='UPDATE users SET role=:role,account_status=:user_id所在的状态('.$inQuery');
$query_params=数组(
':role'=>$role,
“:状态”=>$status
);
$stmt=$db->prepare($query);
$stmt->execute($query\u参数);
//设置受影响行的变量消息
$count=$stmt->rowCount();
$user_updated='.$count.'user已成功更新';
$\u会话['user\u updated']=$user\u updated;
}捕获(例外$e){
$error='发生以下错误:'.$e->getMessage();
$\会话['error']=$error;
}
我尝试更改了缓存:true
,但没有成功。同样,我不想被注销。你知道我做错了什么吗
编辑:我已经把它缩小到只在页面刷新时发生。我删除了这段代码
location.reload()从ajax调用中选择code>,它不会将我重定向回登录页面,但如果我点击F5或单击refresh,它会将我注销。这对于注释来说太长了:
没有任何东西会向我跳出来,导致您丢失在$\u会话['user']
中设置的内容。尝试在每个页面上转储$\u会话
,以便跟踪它并暂时禁用重定向(只需输入错误消息或其他内容)。可以按如下方式转储阵列:
print\r($\u会话)代码>
你也知道你准备好的声明被破坏了吗?我看不到$ids
和$inQuery
的数组或内爆的意义。应该是这样的:
$stmt = $db->prepare(
'UPDATE users
SET role = ?, account_status = ?
WHERE user_id = ?'
);
$stmt->execute(array($_GET['role'], $_GET['status'], $_GET['userID']));
如果只有一个条目,则在
中使用没有意义。您也没有保护您的查询免受任何影响,因为您仍在将值插入prepare语句。似乎我需要将session\u start()
移动到config.php
文件的顶部,以确保它是页面上调用的第一个内容。现在一切正常。是否在PHP文件的顶部调用session_start()?在我的config.php
文件的底部,我有session\u start()
。ajax和php是两个独立的文件,它们都有config.php
file@iamthestreets,可能需要查看您是如何通过身份验证的,才能了解问题所在。@Devon原谅我,因为我仍在学习,但您的确切意思是什么?我确实在我的php页面顶部有这段代码,ajax就位于这里:if(空($\u SESSION['user']){$\u SESSION['redirect\u url']=$\u SERVER['php\u SELF'];header(“Location:../index.php”);die(“Redirecting to:index.php”)}
谢谢!我将尝试一下$\u会话
转储。我有多个值,但也可以是一个。这就是我在
中使用的原因。我正在传递表中选定的所有userID的参数,然后更新每个用户。那么$\u GET['userID']
是一个数组吗?因为$ids=array($\u GET['userID'])$inQuery=内爆(',',$id)代码>永远不会起作用。您正在$ids
中定义一个数组,该数组只有一个元素,然后将其内爆,该数组将返回$\u GET['userID']
,而不做任何更改。@iamthestreets:下面是我所说的沙盒示例:。它实际上根本不返回userid数组,它破坏了它,因为它需要一个一维数组。数据库中的用户正在更新,但我的问题是,在页面重新加载后,我一直会注销。不过我确实更新了我的代码。