我正在使用PHP和MySQL創建網站,目前正在處理通知的頁面上(例如,當有人對您發表的評論,你會得到這種效果的通知)。通知不是作爲電子郵件發送的,而是作爲當您登錄到您的帳戶(Facebook風格)時在網站上的提醒。在創建通知/提醒時,如何知道何時將通知標記爲已讀
現在我的問題是確定何時將通知標記爲已讀。簡而言之:那個事件是什麼(如點擊,視圖),在它發生之後,您可以確定通知已被讀取,您可以將其更改爲讀取?
我正在使用PHP和MySQL創建網站,目前正在處理通知的頁面上(例如,當有人對您發表的評論,你會得到這種效果的通知)。通知不是作爲電子郵件發送的,而是作爲當您登錄到您的帳戶(Facebook風格)時在網站上的提醒。在創建通知/提醒時,如何知道何時將通知標記爲已讀
現在我的問題是確定何時將通知標記爲已讀。簡而言之:那個事件是什麼(如點擊,視圖),在它發生之後,您可以確定通知已被讀取,您可以將其更改爲讀取?
但我已經解決了它。讓我來分享一下吧,這可能有助於某人: 每個警報都應該引導用戶訪問某個特定的URL,例如如果有人對您的帖子發表了評論,點擊該提醒後,您應該直接轉到「www.example.com/posts/?post_id=5」。我將這個目標網址作爲標準。在生成警報時,我將其目標URL和警報詳細信息一起存儲在警報表中,並獲取AI唯一字段(alert_id),我將使用它來生成警報上任何鏈接的href部分,例如<a href="changetoread.php?alert_id=56">G Thuo</a>
對您的帖子。 這是我的方法:在點擊任何提醒時,它首先會將您的狀態更改爲讀取的位置(基於鏈接中的alert_id)。在更改爲讀取之後,我們從表中獲取目標URL並在那裏重定向用戶。這裏是我的代碼:
$alert_id=$_GET['alert_id'];
$user_id=$_SESSION['user_id'];
//create the SQL to update the read_status
$sql="UPDATE alerts_log SET read_status=1 WHERE alert_id=$alert_id AND user_id=$user_id";
$res=mysql_query($sql) or die(mysql_error());
//we can now extract the targer_url from the alerts table and redirect the user automatically to that URL
$sql="SELECT target_url FROM alerts WHERE alert_id=$alert_id";
$res=mysql_query($sql) or die(mysql_error());
$row=mysql_fetch_assoc($res);
$url=$row['target_url'];
//redirect the user to that URL
header("Location: $url");
`
您的代碼是**非常**傾向於SQL注入。 'changetoread.php?alert_id = 0 OR 1 = 1 --'會將**所有** alerts_log'行改爲'read_status' 1.考慮使用MySQLi或PDO和準備好的語句:http://stackoverflow.com/問題/ 12859942/why-shouldnt-i-use-mysql-functions-in-php – h2ooooooo
呵呵,我有點害怕。如果我在檢查'is_numeric($ _ GET ['user_id'])'計算結果爲true後才運行查詢? – gthuo
理論上可行,但當你需要一封信時呢?然後你又有同樣的問題,不能做任何事情。如果你不想切換到MySQLi或PDO,至少在**上使用'mysql_real_escape_string'函數**你放入SQL的任何**變量('$ sql =「UPDATE alerts_log SET read_status = 1 WHERE alert_id =「。mysql_real_escape_string($ alert_id)。」AND user_id =「。mysql_real_escape_string($ user_id)')。但是,請注意,MySQL已被棄用([檢查所有'mysql'頁面頂部的紅色框](http://php.net/manual/en/function.mysql-connect.php)) – h2ooooooo
後通知用戶「鼠標懸停」 - 這也將覆蓋接近/回覆事件 –
感謝eicto(和我已故的反應很抱歉)。但是關於手機上的用戶(無「鼠標懸停」功能)或關閉JavaScript的惡意用戶呢,以至於他們能看到我受到折磨? – gthuo
但我已經解決了它。讓我分享也許它可能有助於某人: – gthuo