Php Zeitsperre
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktie
aktion
anzahl
befehl
belegt aktien
benutzer
code
datum
eintragung
format
frage
header
nummer
sekunde
spalte
sperre
tabelle
uhrzeit
url
vergleichen
-
Hallo,
ich habe momentan folgendes Problem. Es werden auf einer meiner Homepages Daten eingegeben. Um genau zu sagen handelt es sich um Nummern. Jeder Benutzer hat eine und muss sie öfters eingeben. Dies sollte er jedoch nur jede Minute einmal können.
Wie kann ich eine Zeitsperre von 60 Sekunden einrichten so das er eine Nummer nur einmal alle 60Sekunden eingeben kann. Die Sperre muss sich jedoch auf die Nummer beziehen. Die eingabe für den Computer oder den Benutzer für 60 Sekunden zu sperren geht nicht, da manche Benutzer auch mehrere Nummern haben. Wie kann man das am besten lösen.
In der mysql Tabelle wird jeweils das Datum und die Uhrzeit mit abgespeichert. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du trägst bei den Userdaten den Timestamp mit ein, bei einer neuen Eintragung fragst du erst den Timestamp ab, rechnest 60 Sec drauf und prüfst, ob der jetzige Timestamp größer oder gleich dem bisherigen + 60 ist.
-
vertico schrieb:
Du trägst bei den Userdaten den Timestamp mit ein, bei einer neuen Eintragung fragst du erst den Timestamp ab, rechnest 60 Sec drauf und prüfst, ob der jetzige Timestamp größer oder gleich dem bisherigen + 60 ist.
Kann ich denn Uhrzeiten auch einfach mit
vergleichen?<
-
Und sollte er größer sein wird einfach der aktuelle per update eingespeist und was auch immer ausgeführt und schon klappt das.
Naja den Timestamp schon
Ist halt die Frage wie Zeit und Datum in der Tabelle gespeichert werden. -
reimann schrieb:
Naja den Timestamp schon
Ist halt die Frage wie Zeit und Datum in der Tabelle gespeichert werden.
So:
2010-09-12 18:06:11
Funktioniert das damit? -
Einfach nur < reicht ja nicht, dann wäre eine neuer Eintrag bereits 1 Sec später möglich. Und auf eine normale Uhrzeit-Angabe 60 Sek drauf zu zählen ist aufwendig, da es ja kein reiner Int-Wert sondern ein String mit : und - ist. Daher würde ich den Timestamp nehmen.
-
no-smoke schrieb:
reimann schrieb:
Naja den Timestamp schon
Ist halt die Frage wie Zeit und Datum in der Tabelle gespeichert werden.
So:
2010-09-12 18:06:11
Funktioniert das damit?
nein.
normalerweise wandelst Du Datum+Uhrzeit um in die Sekunden die seit dem 1.1.1970 0:00 Uhr vergangen sind.
Dadurch erhältst Du immer eine fortlaufende Zahl mit der Du vergleiche anstellen kannst.
Ließ Dir das hier von www.schattenbaum einmal zu dem Thema durch. -
Wie generiere ich denn nun so einen Wert im Fall von mysql? Bisher füge ich in die Tabelle mittels PHP Befehl
Das Datum und die Zeit ein. Wie mache ich das anders? Der BefehlNOW(),
scheint nicht zu funktionieren.time()
Und viel wichtiger noch, wie kann ich dann die Differenz errechnen? -
du musst schon mit time() arbeiten, das ist die Funktion die php dafür bereitstellt.
du musst in die datenbank " time()+60" schreiben. Und wenn du die zeile ausliest prüfst du ob der wert größer oder kleiner time() ist. -
no-smoke schrieb:
Wie generiere ich denn nun so einen Wert im Fall von mysql? Bisher füge ich in die Tabelle mittels PHP Befehl
Das Datum und die Zeit ein. Wie mache ich das anders? Der BefehlNOW(),
scheint nicht zu funktionieren.time()
Und viel wichtiger noch, wie kann ich dann die Differenz errechnen?
Geht auch mit NOW().
Wandel es in php mit strtotime in einen UNIX-timestamp (UNIX-timestamp =sekunden seit dem 1.1.1970 ) um.
diesen umgewandelten timeestamp aus sql vergleichst du mit der aktuellen zeit (die du auch umgewandelt hast).
Wie es ja in meinem vorherigen link beschreiben steht bekommst Du die Aktuelle zeit mit:
<?php $timestamp = time(); ?>
edit:
kleine randnotiz:
NOW() ist ein sql-befehl kein php-befehl.
Beitrag zuletzt geändert: 12.9.2010 22:39:38 von simuliertes -
die Werte von time() kannst du natürlich nicht in mysql in eine Spalte mit dem Format date, o.ä. eingeben, dazu solltest du eine neue Spalte mit dem Format int erstellen und diese hier abspeichern.
Ansonsten wenn du nichts in der DB ändern willst, musst du das Datum aus dem YYYY-MM-DD hh:mm:ss mit mktime (http://php.net/manual/de/function.mktime.php) in einen Unix-Timestamp umwandeln (sekunden seit 1970) kannst dann 60 hinzuaddieren und mit der aktuellen Zeit (time()) vergleichen, wenn jetzt > db+60 dann Eintrag in DB ändern und Nummer eingeben.
lg Ole
Beitrag zuletzt geändert: 12.9.2010 23:16:15 von ole-reglitzki -
Vielen vielen Dank!
Ich habe es nun mit time() und einem neuen Feld in der Datenbank hinbekommen.
Super und schnelle Hilfe! -
hallo zusammen ich habe ein ähnliches probelm....
ich erstelle grad eine börse...
nur zeigt die sperre keine wirkung
break; case'sellaktien': $xx=500700; $datum=$aktien_user['kaufdatum']+$xx; $sql ='SELECT * FROM aktien where id=\''.$_POST['id'].'\''; $index1 = mysql_query($sql) OR die(mysql_error()); $aktien = mysql_fetch_assoc($index1); $sql ='SELECT * FROM aktien_user where id=\''.$_POST['kaufid'].'\''; $index1 = mysql_query($sql) OR die(mysql_error()); $useraktien = mysql_fetch_assoc($index1); $preis=$aktien['kurs']*$_POST['anzahl']; $belegt=$aktien['belegt']-$_POST['anzahl']; $belegtuser=$useraktien['anzahl']-$_POST['anzahl']; if($_POST['anzahl']>$useraktien['anzahl']) {$no=change('So viele Aktien hast du nicht.<br>'); header('Location: '.$site.'/boerse/?aktion=useraktien&n='.$no.''); exit;} if($_POST['anzahl']=='') {$no=change('Du musst schon eine Zahl angeben.<br>'); header('Location: '.$site.'/boerse/?aktion=useraktien&no='.$no.''); exit;} if($datum>time()) {$no='Na du schon wieder warum willst du die Aktien nicht behalten?? Du wartest bitte noch 2-4 stunden.<br>'; header('Location: '.$site.'/boerse/?aktion=useraktien&no='.$no.'');
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage