Download für 24 Stunden erlauben

30 09 2009

Die Problemstellung war, einen Download erst nach Eingabe eines Codes zu starten. Die verschiedenen Codes sind in einer Datenbank-Tabelle gespeichert. Nun kann allerdings nie ganz sicher gestellt werden, dass der Download beim ersten Mal auch wirklich funktioniert hat. Deshalb soll für 24 Stunden die Möglichkeit bestehen bleiben, den Download erneut anzustarten.

Zum Test erstellen wir uns eine Tabelle für die Codes. In diese tragen wir ein paar Werte ein. Interessant bei der Tabellenanlage ist das Feld „verbraucht“. Hier soll gespeichert werden, wann die Datei zum ersten Mal herunter geladen wurde. Neue Einträge erhalten per Default einen Wert weit in der Zukunft, so dass diese nicht so schnell aus laufen.

CREATE TABLE IF NOT EXISTS codes (
code varchar(10) NOT NULL,
verbraucht datetime NOT NULL default '2099-12-31 23:59:59'
);

INSERT INTO codes(code)
VALUES ('aaaaaaaaaa', 'bbbbbbbbbb', 'cccccccccc', 'dddddddddd', 'eeeeeeeeee');
  1. Soll eine Datei herunter geladen werden, prüfen wir zunächst, ob der angegebene Code wirklich existiert.
  2. Existiert der Code ist die nächste Frage, ob bereits ein Download erfolgt ist. Das ist dann der Fall, wenn nicht mehr der Default-Wert gesetzt ist. Ist der erste Download länger als einen Tag her, wird kein weiterer Zugriff gestattet.
  3. Ist dies der erste Download, wird noch das aktuelle Datum in „verbraucht“ gesetzt. Damit fängt die Uhr an zu ticken, sobald dieses Datum + 1 älter ist als der aktuelle Zeitpunkt, ist der Zugriff gesperrt.
<?php
 
define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_BENUTZER', 'root');
define('DB_PASSWORT', '');
 
if (!empty($_POST['code'])){
 
$code = strip_tags($_POST['code']);
 
/* DB-Verbindung herstellen */
mysql_connect(DB_HOST, DB_BENUTZER, DB_PASSWORT) or die (mysql_errno().": ".mysql_error()."<br /><br />Kann keine Datenbankverbindung herstellen!");
@mysql_select_db(DB_NAME) or die (mysql_errno().": ".mysql_error()."<br /><br />Kann nicht auf die Datenbank zugreifen!");
 
$sql = "
SELECT verbraucht
FROM codes
WHERE code = '".mysql_real_escape_string($code)."'
";
$ergebnis = mysql_query($sql) or die(mysql_errno().": ".mysql_error());
 
// ***** (1) ***** Keine Zeile zurueckgeliefert? Dann gibt es so einen Code in der DB nicht
if (mysql_num_rows($ergebnis) < 1) die('Der Code ist falsch!');
 
list($verbraucht) = mysql_fetch_row($ergebnis);
 
// ***** (2) ***** Das Datum in "verbraucht" ist aelter als 1 Tag (86400 Sekunden)
if (strtotime($verbraucht) + 86400 < strtotime("now")) die('Der Code ist verbraucht!');
 
// ***** (3) ***** "verbraucht" ist noch auf dem Standard-Wert, Count-Down starten
if ($verbraucht === '2099-12-31 23:59:59'){
$sql = "
UPDATE codes
SET verbraucht = NOW()
WHERE code = '".$code."'
";
mysql_query($sql) or die(mysql_errno().": ".mysql_error());
}
echo "Ok.";
}
 
if (empty($_POST['code'])){
echo <<<HTML
<form action="code.php" method="post">
<input type="text" id="code" name="code" tabindex="1" />
<input type="submit" value="Los" tabindex="2" />
</form>
HTML;
}
?>
Advertisements

Aktionen

Information

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s




%d Bloggern gefällt das: