2015-01-26 96 views
0

我最近發佈了一個question關於刪除數據庫中的多行,基本上重新使用代碼來更新數據庫中的多行,但現在一旦數據庫有問題已更新和頁面刷新它保持我登出我不知道爲什麼。在PHP中更新數據庫後保持註銷狀態

這裏是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; 
} 

我試圖改變cache: true,但沒有奏效。再次,我不想被註銷。任何想法我做錯了什麼?

編輯:我縮小了它只發生在頁面刷新時。我從ajax調用中刪除了這段代碼location.reload();,它不會將我重定向回登錄頁面,但如果我點擊F5或單擊刷新,則會將我註銷。

+1

你會在你的PHP文件的頂部調用session_start()嗎?我沒看到它。 – 2015-01-26 22:48:31

+0

在我的'config.php'文件的底部我有'session_start()'。 ajax和php是兩個獨立的文件,它們都有'config.php'文件 – iamthestreets 2015-01-26 23:27:13

+0

@iamthestreets,可能需要看看你是如何進行身份驗證才能看到問題可能是什麼。 – Devon 2015-01-27 02:00:50

回答

0

看起來我需要將session_start()移動到config.php文件的頂部,以確保它是頁面上首先調用的第一個東西。現在一切似乎都很順利。

0

這是一個評論太長:我

沒有什麼是跳出會導致你失去什麼在$_SESSION['user']設置。嘗試在每個頁面上傾銷$_SESSION,以便跟蹤它並立即禁用重定向(只需輸入錯誤消息或其他內容)。你可以轉儲陣列像這樣:

print_r($_SESSION);

你也知道你準備語句是壞了?我沒有看到陣列的點或者$ids$inQuery的內爆點。它應該是這樣的:

$stmt = $db->prepare(
    'UPDATE users 
    SET role = ?, account_status = ? 
    WHERE user_id = ?' 
); 
$stmt->execute(array($_GET['role'], $_GET['status'], $_GET['userID'])); 

有使用IN如果你只有一個入口是沒有意義的。您也無法保護您的查詢,因爲您仍將值插入到準備語句中。

+0

謝謝!我會試一試''__SESSION'轉儲。我確實有多個值,但它也可以是一個值。這就是我使用'IN'的原因。我傳遞了表中選定的所有userids的參數,然後更新每個用戶。 – iamthestreets 2015-01-27 18:18:17

+0

所以'$ _GET ['userID']'是一個數組?因爲'$ ids = array($ _ GET ['userID']); $ inQuery = implode(',',$ ids);'永遠不會工作。你在'$ ids'中只用一個元素定義了一個數組,然後將它打亂,它只是在沒有任何改變的情況下返回'$ _GET ['userID']'。 – Devon 2015-01-27 18:31:06

+0

@iamthestreets:這裏是我正在談論的沙盒示例:http://sandbox.onlinephpfunctions.com/code/d97343f33e5d7cc0799caa385546acf9a3eb9efd。它實際上根本不會返回userid數組,它會打破它,因爲它需要一個單維數組。 – Devon 2015-01-27 18:42:07

相關問題