2011-12-21 69 views
3

作爲標題說 我想創建一個按鈕,說「可用」,一旦任何一次點擊它變成「不可用」爲所有未來的用戶 任何想法?一個按鈕,只能點擊一次,EVER

注:其爲學校的項目,沒有什麼花哨,甚至安全的,只是想證明一點

遺憾的是含糊一些,所有我試圖做的是建立在我的Joomla網站的文章有一個按鈕,只有最快的用戶可以訪問和點擊,這就是它 我不擔心安全,甚至欺騙企圖 的Joomla文章可以讓PHP的js代碼等加入到他們

+8

有什麼意義? – BoltClock

+1

在數據庫中保存一個bool,然後檢查它是真是假。 – slinzerthegod

+0

所有那些在同一臺計算機前有多少個鼠標(例如,在一個遊戲中)? – hakre

回答

1
不使用數據庫

最簡單的方法,下面是一個使用簡單的文本的基本邏輯(或者你可以使用YAML,INI,XML等),或者1(點擊)文件或0(不點擊)在其:

$filePath = './clicked.txt'; 

if((int) file_get_contents($filePath)){ 
    // put code here to display the button and mark it as disabled 
    echo "Can't click"; 
} else { 
    // code to display button 
    // code to process button request and marked clicked as true in the file 
    file_put_contents($filePath, '1'); 
    echo "changed file"; 
} 

你需要做一些驗證檢查,即文件是可讀的,你可以更新文件等,但這幾乎是所有你需要做的,如果你不想使用數據庫。

此外,請務必將該文件放在Web目錄下,以便用戶無法瀏覽到該目錄。

編輯:但是,如果你使用Joomla,只需使用數據庫來做到這一點。這種方式是醜陋

0

你可以保存的值成數據庫或創建一個文本文件,如果按下按鈕。如果數據庫條目或文件存在,則不允許進一步按壓。當按下按鈕時,一定要禁用該按鈕以及不執行服務器端操作。

+0

mmmmmm我使用joomla,任何更簡單的方法比創建數據庫?因爲我不擔心安全問題,我只是點擊時更新html文件? – a7medo778

+0

當然你可以更新HTML文件。但是惡意用戶無論如何都可以提交該公式;) – TimWolla

+0

以及我不關心作弊者:P,關於如何做到這一點的任何建議?比去數據庫簡單得多 – a7medo778

0

你真的想要這個按鈕只能點擊一次嗎?如果是這樣,那麼您需要將其狀態存儲在某種數據庫中,並在有人點擊時更新數據庫。

這可能也會對您的最佳利益而不是禁用JavaScript,因爲有人可能會關閉JavaScript並繞過您的決定。

順便說一句,這個要求對我來說沒有多大意義。這將是 - 至多 - 很難驗證。您可以創建一個提交按鈕,將其重定向到另一個頁面,但用戶只需點擊瀏覽器的後退按鈕並再次單擊該按鈕即可。你可以做什麼來防止這種情況。

既然你澄清了:你最好的選擇仍然是將「clicked」值存儲在某個數據庫中(一個文件可以正常工作)。

當你加載頁面時,使用PHP來檢查文件中的「已單擊」值。如果它在那裏,您可以直接在HTML中禁用按鈕。

我建議在PHP中添加第二級別的檢查(或者您正在使用的任何服務器端語言)。當有人點擊按鈕時,您可以返回到數據庫/文件並檢查「clicked」值。如果您發現它已被點擊,您什麼也不能做(或者向用戶顯示一條消息,讓他們知道它已被點擊)。否則,您可以相應地更新數據庫/文件。

+1

沒有真正的安全問題,它對於一個小型的學校項目 – a7medo778

+0

如果你將來會問這樣的問題 - 關於學校項目的問題 - 請給他們加上家庭作業。它會幫助社區更好地理解您的需求。 – jwiscarson

+0

下次肯定會這樣做:D – a7medo778

0

那麼你有幾件去這裏。

首先你需要一個方法來存儲值(這是否被點擊或不)。我的標準做法是在DB中創建一個user_properties表(uid,property,value)來存儲值。

要在應用程序中管理它,我將屬性加載到用戶(配置文件)對象並將其存儲到會話以供參考。當按鈕被渲染時,您可以快速檢查用戶配置文件的Properties數組中是否存在該值,如果存在,則禁用;別讓它一個人留下。

單擊按鈕時,用戶配置文件中的屬性將被存儲並更新到數據庫。我個人會檢查加載時會話配置文件中是否有更改,如果它有更新數據庫。

+0

這是一個合理的答案,但並沒有真正解決確保按鈕被單擊一次的問題,因爲2個用戶可以同時打開該頁面,當A點擊並設置時B服務器上的值仍然有一個活動的可用按鈕。 –

2

非常複雜,真的。通過JavaScript生成按鈕,以防止沒有JavaScript的用戶不受控制地點擊它。保留一個彗星服務器,以便當一個用戶點擊它時,該更改立即傳播到所有其他連接的客戶端,並且該按鈕被移除。之後,不要爲任何新用戶授權生成按鈕。

+0

不一定是JavaScript,PHP或任何其他語言將是好的 – a7medo778

+0

只是尋找最簡單的,我的意思是沒有去數據庫調用 – a7medo778

+0

使用彗星是大幅減少這種情況的機率的唯一方法:用戶A加載頁面,用戶B加載頁面,用戶A點擊按鈕,用戶B點擊按鈕。如果你使用javascript,你只能做彗星。實際上,您可以使用閃光燈,但應用相同的原則。你需要客戶端,與服務器端交流。至於數據庫,一個簡單的文件就足夠了 - 按下按鈕時創建一個文件,如果文件存在,按鈕被禁用。 – Amadan

0

鑑於問題的性質,您可能會更好地阻止來自另一端的用戶。這意味着,因爲您只想訪問一次鏈接,請讓該服務器只提供一次該頁面,然後拒絕訪問。該按鈕將保持每個人都可以點擊,但只有一個用戶實際上會收到請求的頁面,而且只有一次。

這樣做的方式與其他人建議隱藏按鈕,在文件或數據庫中設置一個值,或者在服務器上設置一個永久的值,並檢查當頁面加載,中止或重定向到拒絕頁面如果存在。