<?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.