2017-04-07 2 views
-4
senden

Ich habe ein Formular, und ich möchte ein Benutzer es einmal am Tag senden. Wenn der Benutzer die Nachricht von mehr als einem Mal an einem Tag abschickt, wird die Nachricht zeigen, dass Sie es bereits getan haben!Beschränken Sie den Benutzer, um ein Formular einmal am Tag mit JQuery oder J.S oder

+2

Sie können nur sichere Einschränkungen auf dem Server implementieren. – SLaks

+0

aber ich will es in ** client-side ** @SLaks –

+1

Nicht ein Guru, aber ich denke, das Beste, was Sie tun können client-seitige speichern einige Cookie ... aber das ist nicht vertrauenswürdig – DaniP

Antwort

0

Sie könnten dies tun, aber wenn der Benutzer die Seite wechselt, sind die Daten verschwunden. dies ist etwas, das Sie Javascript/jquery nicht umgehen sollte:

einen versteckten Eingang machen, wenn einreichen gedrückt wird, haben eine einreichen Funktion:

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

dann ein Skript

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

zu löse dieses Problem richtig Ich schlage vor, PHP mit einer Datenbankaufnahme zu verwenden, wenn der Benutzer das Formular zuletzt absendet. Auf diese Weise werden Daten dauerhaft gespeichert.

Um dies mit PHP zu tun: zuerst erstellen Sie eine Datenbank; für dieses Beispiel werde ich es Test-Datenbank nennen und Tabelle wird lastcheck aufgerufen werden. in der Formulartabelle haben eine Spalte: last_time als Zeitstempel festgelegt; dann nur

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

Im Grunde alles, das verlassen nun ein Verfahren für Ihre Form ist. sollte eine Aktion haben, die zu einer neuen PHP-Seite führt, die ein neues Datum in der Datenbank speichert und den Code ausführt, der beim Senden des Formulars ausgeführt werden soll, oder Sie können einfach auf die vorherige Seite umschalten, nachdem Sie ein neues Datum in der Datenbank gespeichert haben. usw.

+0

wenn du das mit ** php ** machst zeige mir den ** code ** in php –

+0

fertig. Das ist schnell geschrieben, aber ich bin sicher, dass Sie die Logik verstehen können, die ich zu verwenden versuche. Im Grunde ist alles, was übrig bleibt, eine Methode für Ihre Form.

sollte eine Aktion haben, die zu einer PHP-Seite führt, die ein neues Datum in der Datenbank speichert und den Code ausführt, den Sie beim Übermitteln des Formulars tun möchten, oder Sie können einfach auf die vorherige Seite umschalten Datum in der Datenbank. Bitte akzeptiere meine Antwort, wenn dir das weitergeholfen hat. –

0

Sie können nicht überprüfen, ob ein Benutzer ein Formular mit NUR JS oder jQuery eingereicht, weil sie Client-basierten Sprachen sind ...
Sie müssen, dass von Server-Seite tun.
Zum Beispiel könnten Sie PHP und/oder eine Datenbank oder Cookies verwenden, um zu speichern, wenn sich jemand beworben hat, und dann überprüfen, ob er zwischen einem Tag eingereicht hat.

+0

ok wenn du eine lösung in php hast dann hilf mir ** –

Verwandte Themen