myGully.com

myGully.com (https://mygully.com/index.php)
-   Entwicklung & Programmierung (https://mygully.com/forumdisplay.php?f=72)
-   -   MySQL Eintrag alle 24 Stunden (https://mygully.com/showthread.php?t=2355492)

Teke1337 03.07.11 17:14

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.

Pillewutz 03.07.11 19:04

Wie soll man Dir helfen, wenn wir den Datentyp nicht kennen an dem es ganz sicher liegt!

P.S.: Schon mal über Injection nachgedacht?

Teke1337 03.07.11 19:12

Ich verstehe nicht was Du meinst...? Injectionen sind ausgeschlossen bzw gefixxt.

siegener89 05.07.11 23:17

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 und freigeschaltete Mitglieder sichtbar. Jetzt 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

sirleo 06.07.11 00:19

je nachdem wie weit du zugriff auf das sytem hast, lautet das Zauberwort Trigger.
Damit macht dein DBMS die ganze arbeit.
mfg

sirleo

siegener89 06.07.11 19:20

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

urga 10.07.11 21:36

das kannste auch direkt den mysql-server entscheiden lassen:

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt 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.

bufomyva 10.07.11 22:20

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

Pain12345 11.07.11 13:11

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



urga 11.07.11 20:30

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 ..... ';
}



Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.