Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
03.07.11, 17:14
|
#1
|
<php> echo ''; </php>
Registriert seit: Dec 2010
Beiträge: 182
Bedankt: 52
|
MySQL Eintrag alle 24 Stunden
Guten Tag,
ich schreibe zurzeit etwas neues in PHP. Das Skript ist schon fast fertig, dennoch brauche ich hilfe..
Ich möchte das gerne so haben, dass ein MySQL Eintrag nur alle 24 Stunden erlaubt ist. Ich habe es bereits mit time(); versucht, ich komme nicht weiter.
Also zu der Datenbank:
Tabelle: videos
enthält diese Colums: id, video, time, ip
Time etc wird alles schon gespeichert. Dann hab ich es mal so versucht:
PHP-Code:
$time = time(); $time_query = mysql_query('SELECT * FROM videos WHERE time='.$time.' AND ip='.$ip.'') or die(mysql_error()); $time_db = mysql_fetch_assoc($time_query);
if($time_query > time() + 86400) { echo '<body bgcolor="black"><font color="red"><b><center><center>Du kannst nur alle 24 Stunden ein Video einsenden!</center></b></font></body>'; }
Funktionert aber nicht. Was kann ich tun? Danke für jede Hilfe.
|
|
|
03.07.11, 19:04
|
#2
|
Banned
Registriert seit: Jun 2011
Beiträge: 62
Bedankt: 40
|
Wie soll man Dir helfen, wenn wir den Datentyp nicht kennen an dem es ganz sicher liegt!
P.S.: Schon mal über Injection nachgedacht?
|
|
|
03.07.11, 19:12
|
#3
|
<php> echo ''; </php>
Registriert seit: Dec 2010
Beiträge: 182
Bedankt: 52
|
Ich verstehe nicht was Du meinst...? Injectionen sind ausgeschlossen bzw gefixxt.
|
|
|
05.07.11, 23:17
|
#4
|
Anfänger
Registriert seit: Sep 2010
Beiträge: 23
Bedankt: 5
|
Das Problem ist recht einfach...
Du fragst in dem qry nach einem Eintrag mit der aktuellen time...
Das ganze kannst du wie folgt lösen:
- Abfrage, nach dem letzten Eintrag (ORDER BY `time` DESC LIMIT 1) und dann der Vergleich mit der aktuellen Zeit
- zB über die MySQL-Funktion [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Versuch dein Glück erstmal selbst - das fördert das Verständnis - wenns dann immernoch nicht klappt, poste deinen aktuellen Code und ich guck mal drüber...
//edit: Was soll das qry denn genau machen? Evtl mal einen Cronjob bedacht? Den kann man dann ja zB mit .htaccess absichern...
lg
|
|
|
06.07.11, 00:19
|
#5
|
is poking \\Device\\Beep
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
|
je nachdem wie weit du zugriff auf das sytem hast, lautet das Zauberwort Trigger.
Damit macht dein DBMS die ganze arbeit.
mfg
sirleo
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
|
|
|
06.07.11, 19:20
|
#6
|
Anfänger
Registriert seit: Sep 2010
Beiträge: 23
Bedankt: 5
|
Und du hast einen Fehler in der if-Abfrage...
Du fragst nach "wenn $time 24 Std größer als jetzt"...
Du fragst quasi nach morgen
lg
|
|
|
10.07.11, 21:36
|
#7
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
das kannste auch direkt den mysql-server entscheiden lassen:
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
erstes beispiel:
The following query selects all rows with a date_col value from within the last 30 days:
Code:
SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
machst du aus der 30 eine 1 und gut ist.
__________________
entropie erfordert keine wartung
|
|
|
10.07.11, 22:20
|
#8
|
Anfänger
Registriert seit: May 2011
Beiträge: 20
Bedankt: 5
|
aendere mal deinen query, beispielsweise wie folgt:
Code:
SELECT date FROM videos WHERE ip = '.$ip.' DESC LIMIT 1;
(ein pro kann ja drueberschauen ob es so hin haut *g)
hierbei wird nur die spalte "date" in der tabelle "videos" selektiert, gesucht wird nach dem wert der $ip zugewiesen wurde. ausgegeben wird das ganze absteigend (also neu-alt), das limit bewirkt, das nur die erste zeile (also die neuste) ausgelelesen wird.
du suchst in deinem query nach der aktuellen zeit, die per time() an $time zugewiesen wird. du musst aber schon beim vorhergehenden erfolgreichen eintrag den timestamp hinterlegen, sodass ueberhaupt geprueft werden kann, ob das 24h-limit eingehalten wurde. simpler logikfehler
also:
PHP-Code:
$ip = //whatever $now = time(); $result = $db->query("SELECT date FROM videos WHERE ip = '.$ip.' DESC LIMIT 1;"); $then = $result->fetch_row();
$msg = if ($then > $now + 86400) ? "yeah" : "<body bgcolor='black'><font color='red'><b><center><center>Du kannst nur alle 24 Stunden ein Video einsenden!</center></b></font></body>"; //etwas andere syntax echo $msg;
(auch hier der verweis an einen pro *g)
//achja: die idee mit der ip ist daemlich, es sei denn, du hast nur nutzer mit einer statischen ip-adresse, da wuerde der schutz was bringen
|
|
|
11.07.11, 13:11
|
#9
|
Newbie
Registriert seit: May 2010
Beiträge: 81
Bedankt: 49
|
Ist es nicht völlig verkehrt herum wenn man in die Datenbank einträgt wann er das nächste mal ein video abschicken darf? Normalerweise würde man die Datenbank doch so aufbauen das man einen Eintrag macht mit dem aktuellen Datum, wann er das Video eingestellt hat und bei einem erneuten versuch folgende Abfrage macht:
PHP-Code:
$now = time(); $result = $db->query("SELECT date FROM videos WHERE ip = '.$ip.' DESC LIMIT 1;"); $result = $result->fetch_row();
$msg = if ($result +86400 >= $now) { // das video darf eingestellt werden } else { echo "<body bgcolor='black'><font color='red'><b><center><center>Du kannst nur alle 24 Stunden ein Video einsenden!</center></b></font></body>"; }
|
|
|
11.07.11, 20:30
|
#10
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
so sollte das ganze in etwa ausehen:
Code:
$sql = 'SELECT date FROM videos WHERE DATE_SUB(NOW(),INTERVAL 1 DAY) <= date ';
// oder auch:
// $sql = 'SELECT date FROM videos WHERE DATE_SUB(NOW(),INTERVAL 24 HOUR) <= date ';
if ($ip_abfrage) {
$sql .= "and ip like '%$ip%' ";
}
$sql .= 'LIMIT 1';
// das limit 1 kann man sich eigentlich schenken, da es max 1 datensatz geben sollte...
$result = $db->query($sql);
if (mysql_fetch_row ($result) !== false) {
// es gibt datensätze in der DB mit date > (jetzt - 1tag)
echo 'du darft kein neues video hochladen';
}
else {
$sql = 'insert into ..... ';
}
__________________
entropie erfordert keine wartung
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
().
|