Zum Inhalt springen

SQL/PHP: mit getdate() rechnen?


Empfohlene Beiträge

Guten Abend liebe Leute,

fast fertig mit meiner Page, stoße ich nun auf folgendes schwerwiegendes Problem.

User können sich pro Tag(24h) 1x für ein Gewinnspiel "registrieren".

Nachdem sie auf "Teilnehmen" gedrückt haben schreibt mein Script alles in die Datenbank.

USER_ID, E-Mail, Datum, IP values ($ID, $Mail, getdate(), $SERVER[REMOTE_ADDR'])

Funktioniert soweit alles Top.

Im Datumsfeld findet sich nun folgender Wert aufgrund getdate() wieder:

2014-09-25 20:04:55.340

Ansich ja richtig, nun, wenn die 24 Stunden abgelaufen sind will ich mit folgender Function ausrechnen ob er für einen erneuten Vote berechtigt ist.


$time = mssql_query(getdate());
define("VOTE_TIME", "24");
function clean_requests($time) {
$query = mssql_query("select * from vote_log");
$i = 0;
while($row = mssql_fetch_array($query)) {
$i++;
$lastvoted = $row['Datum'];
if($time-$lastvoted > VOTE_TIME*3600) {
if (!mssql_query( "delete from vote_log where vote_time='$lastvoted'")) {
return false;
}
}[/PHP]

Nur leider kann er mit meinem getdate() nicht rechnen.

Habe schon x viele converts (in int, oder varchar, float whatever) probiert, aber es klappt einfach nicht -.-

Der Code-Schnipsel ansich passt, der cleanrequest ist noch für weitere Parameter die funktionieren.

Mein Problem ist eben die 24 Stunden auszurechnen....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus!

Wie es meist ist, führen viele Wege zum Ziel.

Ein Weg wäre: Das /die Kriterien zum Löschen in der WHERE-Klausel zu setzen (Siehe YEAR, MONTH, DAY, ...)

Beispiel: "WHERE YEAR(vote_time) <= " . date(Y) . " AND ..."

ODER

Die Datum - Zeitangabe aus der DB in Sekunden wandeln, 86400 addieren mit der akt. Zeit vergleichen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man kann auch den Wert der aus der Datenbank kommt an die PHP-Funktion "strtotime()" geben und bekommt damit den Unix-Timestamp zurück. Da kannst du dann rechnen ;) Wenn es einmal am Tag sein soll und nicht alle 24 Stunden würde ich noch mktime() empfehlen ;) Einfach ein bisschen basteln dann kommt was hübsches raus^^

PS: Ich würde sowie nicht getdate in die Datenbank schreiben sondern hier schon "time()" verwenden um direkt einen Zeitstempel zu speichern. Integer sind für Datenbanken immer angenehmer und wenn du sowie damit rechnen willst und nicht nur für Ausgabezwecke gedacht ist ein Zeitstempel immer die bessere Wahl.

Bearbeitet von Heikooo
Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum erledigst du das nicht komplett im SQL?

Erst alle Daten aus der Datenbank holen und dann im PHP die Logik abzubilden halte ich für keine gute Idee.

Kleiner Hinweis: SQL Server DATEDIFF() Function

OT: Warum nutzt du in Verbindung mit PHP eigentlich MSSQL?

Auch: Durch eine neue IP Adresse hätte ich wieder die Berechtigung zu voten. Setz am besten noch einen Cookie oder nutze Browserfingerprints.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum erledigst du das nicht komplett im SQL?

Erst alle Daten aus der Datenbank holen und dann im PHP die Logik abzubilden halte ich für keine gute Idee.

Kleiner Hinweis: SQL Server DATEDIFF() Function

OT: Warum nutzt du in Verbindung mit PHP eigentlich MSSQL?

Auch: Durch eine neue IP Adresse hätte ich wieder die Berechtigung zu voten. Setz am besten noch einen Cookie oder nutze Browserfingerprints.

Nein, da ein Counter dies verhindert, ist ja Benutzerabhaengig und dieser clean-request über die Zeit setzt den Counter für den Benutzer auf 0

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was soll denn in die Tabelle geschrieben werden, oder war das nur eine falsche Formulierung?

getdate(), time() sind PHP-Functions.

Die Aufgabe die Du beschrieben hast lassen sich im SQL-Statement realisieren, ohne zuvor rechnen zu müssen.

Das WIE solltest Du allerdings durch Recherchen einfach finden oder erroieren können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann haben wir ja das Problem.

Wie eben schon von jemandem hier erwähnt ist time() eine PHP-Funktion.

Das heisst das hier würde gehen:

$time = time();

ohne dieses mssql_query drum herum.

Und aus Interesse. Du hast Schätzungsweise für "Vote_count" den Typ Integer hinterlegt ja? Wieso versuchst du deine Datenbank noch zu ärgern indem du ihr dennoch einen String übergibst?

Ich gehe davon aus das account, vote_time und vote_count jeweils Integer sind.

Daher würde diese Zeile völlig ausreichen (auch die $time = time(); kannst du dir dann sparen):

mssql_query("insert into vote_log (account, ip, vote_time, vote_count) VALUES (" . $userID . ", '" . $ip . "', " . time() . ", 1)");

Link zu diesem Kommentar
Auf anderen Seiten teilen

Daher würde diese Zeile völlig ausreichen (auch die $time = time(); kannst du dir dann sparen):

mssql_query("insert into vote_log (account, ip, vote_time, vote_count) VALUES (" . $userID . ", '" . $ip . "', " . time() . ", 1)");

Sobald ich diese Zeile von dir teste, wird wieder überhaupt nichts in die DB geschrieben.

post-86876-14430449845761_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Soll das jetzt heissen es ist so wie du es haben wolltest oder nicht?

Das da jetzt kein Datum mehr steht sondern eine Zahl mit der du rechnen kannst und die du mit date('d.m.Y', VALUE_AUS_DB); wieder zu einem Datum bekommst war hoffentlich klar.

Nein, so ist es perfekt! :)

Wollte mit dem Screenshot aufzeigen, dass es funktioniert und nun endlich werte in die DB schreibt.

Damit kann ich dann auch eben rechnen, hab es schon getested und xx - (24*3600) genommen und dann wieder gevoted und das hat dann funktioniert. Also läuft perfekt! :)

Vielen Dank!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...