2013-05-19 51 views
-1

是否有可能運行更新查詢只有一次,在這裏我有一個鏈接或按鈕,如果他點擊他的個人資料將被自動更改(更新),並將他帶到myaccount.php頁面。 一切正常,工作正常,但重新加載相同的頁面時發生的主要問題(myaccount.php)和他的個人資料每次更新。但我想,當他點擊了鏈接或按鈕,只有一次他的個人資料應該只改變...我設置的環節運行更新查詢只有一次在php

<a href='myaccount.php.php?age =$age && status= $status' target='_blank' style='color:#E07707;font-weight:bold;'>Update Profile</a></div></div><br> 

,我設置更新查詢上myaccount.php爲:

if(($age== '') || ($location= '') || ($status= '')) 
    { 
     $newquery1 = "update $tabl_u something...................... where id='$id'"; 
    } 

沒有提交按鈕沒有其他事件的更新數據,但只有點擊URL或鏈接,我通過一些ID更新數據,我希望我的問題是在我身邊完成,並希望你會明白,如果我錯過了或失蹤,請讓我知道...隨時問任何關於我的問題..plz幫助我真的需要幫助....提前感謝!

+0

你想更新什麼?用戶的登錄時間? –

+0

不...用戶細節實際上我已經設置了他們由管理員端和用戶點擊可以將其添加到他的個人資料 – Tracy

回答

1

執行更新後,不要輸出任何內容。取而代之的是,將用戶在其他地方,例如:

header("Location: myaccount.php"); 
exit(0); 

通過這種方式,GET數據從鏈路上丟失和重裝不會重複更新,同時點擊「返回」按鈕將用戶帶到頁面(可能是表格)之前的更新,所以 - 再次 - 更新將不會重複。

3

您不應該在GET請求中進行任何數據更改。 如HTML 4和HTTP規範所述

如果窗體的處理是等冪的(即它具有對世界的狀態沒有持續觀察到的效果),則形式方法應該是GET。許多數據庫搜索沒有明顯的副作用,並且使得查詢表單理想的應用程序。

如果與處理表單相關的服務有副作用(例如,修改數據庫或訂閱服務),則該方法應爲POST。

例如,如果用戶具有預加載頁面上所有URL的「web加速器」會發生什麼?

您還應該檢查請求是否確實來自您網站上的用戶,或者您打開一個非常容易的CSRF漏洞的大門。

即便如此,解決您所需問題的常用方法是,在更新數據庫中的用戶狀態之後,應該向非修改頁面發出重定向。

基本頁面 - >點擊更改鏈接 - >更改狀態數據庫,並重定向到基頁再次

<?php 
if(($age== '') || ($location= '') || ($status= '')) { 
    mysqli_query(/* update whatever */); 
    header('Location: myaccount.php'); 
    exit; 
} 

如果他刷新頁面,他是基頁,所以它不會改變任何事情上。 如果他在瀏覽器中按「返回」,他也會回到頁面底部(發送重定向的頁面不保存在瀏覽器歷史記錄中)。

0
session_start(); 
if(isset($_GET)) { 

    if(empty($_SESSION['update'])) { 
    //update data 
    $_SESSION['update'] = 'Finished'; 
    echo 'updating is finished'; 
    }else{ 
    echo 'Your details have beed updated already'; 
    } 
}