<?php require_once "../../connctions/connect.php";  ?>
<?php include "cookie_timely.php" ?>
<?php session_start() ?>
<?php
    if(isset($_SESSION['member_id'])){
        /*$sql_track = "SELECT `track_room_id` FROM `member_track` WHERE `member_id` = '{$_SESSION['member_id']}' ";
        $result_track = mysqli_query($link,$sql_track);
        $row_track = mysqli_fetch_assoc($result_track);*/
        
        if(!isset($_COOKIE['track']) ){
            echo "tracking";
            $sql_record_track = "INSERT INTO `member_track`(`member_id`,`track_room_id`) VALUE ('{$_SESSION['member_id']}','{$_POST['track']}') ";
            $result_record_track = mysqli_query($link,$sql_record_track);
            $count = count($_COOKIE['track']);
            cookie2('track['.$count.']',$_POST['track'],time()+3600,'/');
        }
        else if(!in_array($_POST['track'],$_COOKIE['track'])){   //比對cookie陣列,是否已經加入追蹤  
            echo "tracking";
            $sql_record_track = "INSERT INTO `member_track`(`member_id`,`track_room_id`) VALUE ('{$_SESSION['member_id']}','{$_POST['track']}') ";
            $result_record_track = mysqli_query($link,$sql_record_track);
            $count = count($_COOKIE['track']);
            cookie2('track['.$count.']',$_POST['track'],time()+3600,'/');     
        }else{
            $sql_delete_track = "DELETE FROM `member_track` WHERE `track_room_id` = '{$_POST['track']}' and `member_id` = '{$_SESSION['member_id']}' ";
            $result_delete_track = mysqli_query($link,$sql_delete_track);
            $key = array_search($_POST['track'],$_COOKIE['track']);
            cookie2('track['.$key.']','',time()-3600,'/');
            $_COOKIE['track']=array_values($_COOKIE['track']);
                
            echo "delete_track";
        }
    }else{
        echo "no_login";
    }
    header("Access-Control-Allow-Credentials:true");   //ajax傳送cookie方法
?>
我做了一個Ajax新增追蹤系統,但是在重新排列$_COOKIE['track']=array_values($_COOKIE['track']);
他並不會執行,應該如何解決呢?
1.array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
參考
使用這個方法 $_COOKIE['track'] 結構會改變,確定要這麼用?
建議用 ksort/asort/arsort 見第二點
2.在array_values前先排序或用sort替代
由小到大排序值(Value)sort  (鍵值消失)
由小到大排序鍵值(Key) ksort
排序值小到大但要保留鍵值 asort
排序值大到小但要保留鍵值 arsort
自訂排序 usort
參考:[PHP] 陣列排序 sort, ksort, asort, usort...
我是想要當陣列友直被刪除,陣列的key值從0開始
例如原本key值是0,1,2,3,4
當key1的值被刪除
新key值要是
0,1,2,3
若要即時刪除的話,可以用unset
參考:https://dotblogs.com.tw/jhsiao/2015/05/16/151311
cookie2('track['.$key.']','',time()-3600,'/');
這行設定了cookie的生命週期時間,但也只是編輯時間,並不會在後端刪除,會在前端的瀏覽器中進行刪除過期的cookie
所以我後端執行cookie2('track['.$key.']','',time()-3600,'/');
時並沒有馬上刪除,是前端重新整理時才會刪除囉
那我$_COOKIE['track']=array_values($_COOKIE['track']);
也要放前端囉?
但我不知道要怎麼讓回傳後執行$_COOKIE['track']=array_values($_COOKIE['track']);
可以在js裡執行php嗎?
一樣放在後端,沒特殊需求也不用刻意砍他,清空內容並讓他失效(過期)就可以了
php删除/清除cookie的两种方法
$_COOKIE本身不是陣列,
我不知道你到底想要做什麼 XD
呃
其實 $cookie 算是 array
<?php
  setcookie('test1', 1, time()+3600*24);
  setcookie('test2', 2, time()+3600*24);
  setcookie('test3', 3, time()+3600*24);
  print_r ($_COOKIE);
  echo '<br>'.gettype($_COOKIE);
?>
result
Array ( [test1] => 1 [test2] => 2 [test3] => 3 ) 
array
                    如果在C#應該稱為Dictionary...
其實PHP也有Array和Dictionary之分...
據我所知
php 應該沒有 Dictionary 喔
不過 php 的 array 可以達到類似的效果
it can be treated as an array, list (vector), hash table (an implementation of a map), dictionary, collection, stack, queue, and probably more.