2017-04-07 58 views
-4

我有一個表單,我希望有一個用戶提交它一天一次。如果用戶在一天內多次提交該消息,則該消息將顯示您已經完成的抱歉!限制用戶每天使用Jquery或J.S或php提交表格一次,或者使用php

+2

您只能在服務器上實施安全限制。 – SLaks

+0

但我希望它在**客戶端** @SLaks –

+1

不是一個大師,但我想最好的,你可以做客戶端存儲一些cookie ......但這是不可信的 – DaniP

回答

0

您可以這樣做,但是當用戶更改頁面時,數據將會消失。這是後話了JavaScript/jQuery的不應該處理:

做一個隱藏的輸入, 被按下時提交,有一個提交功能:

<form id=theForm> 
<input type=hidden name=last id=last></input> 
<input type=button onclick="submitFunction()"></input> 
</form> 

然後有一個腳本

<script> 
submitFunction = function() { 
    var ONE_DAY = 60 * 60 * 1000 * 24; /* ms */ 
    var lastTime = document.getElementById('last').value; 
    document.getElementById('last').value = new Date(); 
    if (lastTime == "" || !lastTime) 
    { 
    document.getElementById('last').value = new Date(); 
    document.getElementById('theForm').submit(); 
    } 
    else if (((new Date()) - lastTime) < ONE_DAY) 
    { 
    alert('you must wait one day'); 
    } 
    else { 
    document.getElementById('theForm').submit(); 
    } 

} 
</script> 

要正確解決這個問題我建議在用戶上次提交表單時使用PHP和數據庫記錄。這樣數據將永久保存。

要做到這一點與PHP: 首先創建一個數據庫; 對於這個例子,我將它稱爲測試數據庫,表將被稱爲lastcheck。表格中的 有一列:last_time設置爲時間戳; 那麼就

<?php 
    $last = ""; 
    $servername = "xxx"; 
    $username = "xxx"; 
    $password = "xxx"; 
    $dbname = "test"; 

    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $stmt = $conn->prepare("Select last_time from test.lastcheck order by last_time asc limit 1"); 
     $stmt->execute(); 

     // set the resulting array to associative 
     $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     foreach($stmt->fetchAll() as $k=>$v) { 
      $last = $v; 
     } 
    } 
    catch(PDOException $e) { 
     $conn = null; 
    } 
    $conn = null; 


    echo '<form id=theForm> 
     <input type=hidden value="'.$last.'" name=last id=last></input> 
     <input type=button onclick="submitFunction()"></input> 
     </form>'; 
?> 
<script> 
submitFunction = function() { 
    var ONE_DAY = 60 * 60 * 1000 * 24; /* ms */ 
    var lastTime = document.getElementById('last').value; 
    document.getElementById('last').value = new Date(); 
    if (lastTime == "" || !lastTime) 
    { 
    document.getElementById('last').value = new Date(); 
    document.getElementById('theForm').submit(); 
    } 
    else if (((new Date()) - lastTime) < ONE_DAY) 
    { 
    alert('you must wait one day'); 
    } 
    else { 
    document.getElementById('theForm').submit(); 
    } 

} 
</script> 

基本上所有這就是現在剩下的是你的窗體的方法。應該有一個動作導致新的php頁面將新的日期保存到數據庫中,並在表單提交時執行任何您想要執行的代碼,或者可以在將新日期保存到數據庫後重定向到上一頁,等等。

+0

如果你可以這樣做** php **顯示我**代碼**在php –

+0

完成。這是寫得很快,但我確定你可以理解我嘗試使用的邏輯。基本上所有的事情都是你的形式。

應該有一個動作,導致一個php頁面將一個新的日期保存到數據庫中,並在表單提交時完成你想要做的任何代碼,或者你可以在保存新的數據後重定向到上一頁日期到數據庫。如果這對你有幫助,請接受我的回答。 –

0

如果用戶提交的使用ONLY JS或jQuery的,因爲它們是基於客戶端語言形式不能檢查...
你需要做的是從服務器端。
例如,您可以使用PHP和/或數據庫或cookie在有人提交時存儲,然後檢查他是否在一天之間提交。

+0

好的,如果你有一個解決方案在PHP然後**幫我** –