在PHP中更新数据库后继续注销

在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

我最近发布了一篇关于删除数据库中的多行的文章,基本上是重复使用代码来更新数据库中的多行,但是现在我遇到了一个问题,一旦数据库被更新,页面刷新,它就会一直记录我,我不知道为什么

以下是ajax:

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(),它不会将我重定向回登录页面,但如果我点击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数组,它破坏了它,因为它需要一个一维数组。数据库中的用户正在更新,但我的问题是,在页面重新加载后,我一直会注销。不过我确实更新了我的代码。