PHP/MySQL: Ablaufdatum?

Virginia

Ensign
Registriert
Aug. 2005
Beiträge
133
Hallo,
ich möchte gerne meine TV-Tipps über meine Datenbank regeln. Dazu würde ich Ihnen gerne ein Ablaufdatum geben. Nur irgendwie klappt das nicht.
Reicht es nicht, wenn ich die jetzige Zeit und das Ablaufdatum als UNIX-Zeit habe und dann die jetzige Zeit von der Ablaufzeit abziehe?? Dann hätte ich doch theoretisch die Restzeit, und wenn die kleiner-gleich Null wäre, wäre der Tipp doch abgelaufen?
Oder hab ich da nen Denkfehler drin?
 
Also... ich habe auf meiner Page immer aktuell den "TV-Tipp". Bisher habe ich den immer direkt im Quellcode geändert, nun möchte ich das über ein ganz normales HTML-Formular und meine Datenbank eintragen können.
Da so ein TV-Tipp ja aber nur eine begrenzte Gültigkeit hat, möchte ich dem ganzen ein Ablaufdatum geben, d.h. ein Tipp soll nur solange angezeigt werden, wie er gültig ist.
Nun fehlt mir halt ne Idee, wie man das mit dem Ablaufdatum programmiertechnisch realisiert (bin auf dem Gebiet noch etwas Anfängerin...) ...
 
Warum denn berechnen? Einfach aktuelle Unixzeit mit Ablaufzeit vergleichen und dann entsprechend handeln.
Oder falls bei DB Anfrage alle Spalten wo Ablaufdatum >= aktuelle UnixZeit ist zurückgeben.

zb. $rs = mysql_query("SELECT * FROM tabelle WHERE EndUnixzeit >= ".$aktuelleunixZeit);

Edit:
Hehe jetzt hatte ich nen kleinen Denkfehler. ;)
Habs nochmal korrigiert.
 
Zuletzt bearbeitet:
Sowas ähnliches hatte ich schon, aber das hat leider nicht funktioniert :(

Hier mal mein Code:
PHP:
	$timestamp = time(); 

	$query = "SELECT * FROM tvtipp";
			
	$result = mysql_query($query, $connection) or die('error making query');
		
	$zeile = mysql_fetch_array($result);
			
	$termin = $zeile['termin'];
	$ablaufdatum = $zeile['ablaufdatum'];
			
	$unix = mktime($ablaufdatum);
	
	$restzeit = $unix - $timestamp;
			
		if ($restzeit >= 0){
			echo $termin;
			}
		else {
		echo "Bald wieder neu";
		}

Ich habe derzeit nur einen Termin in der DB stehen mit Ablaufdatum 30.07.2006. Trotzdem wird der Termin angezeigt :(
 
Ich habe die Werte jetzt mal per echo ausgeben lassen. Heraus kommt dies:
30.07.2006
unix-ablaufdatum: 1154407997
unix-jetzt: 1154357597
rest: 50400
Wie kann es denn sein, dass die jetzige Zeit einen höheren Unix-Wert hat als der gestrige Tag??
 
Ist doch klar: Unix Zeit sind die Sekunden seit dem 1.1.1970 um 00:00 Uhr. Dass die Zeit heute größer ist als gestern ist logisch

EDIT: Also ich glaube ich habe gelesen was du geschrieben hast, aber nicht auf die Zahlen geachtet... unix-jetzt ist in deinem Beispiel kleiner als unix-ablauf. Sprich: Der Zeitpunkt den unix-jetzt beschreibt liegt vor unix-ablauf. Sprich: Der Tipp ist noch nicht abgelaufen...
 
Zuletzt bearbeitet:
Klar war der Tipp abgelaufen , ich hatte doch den 30.07.06 angegeben :)

Ich habe nun das Ablaufdatum in ablauftag, ablaufmonat und ablaufjahr getrennt und mktime geändert:
PHP:
	$unix = mktime(0, 0, 0, $ablaufmonat, $ablauftag, $ablaufjahr);
So scheint es zu funktionieren :)

Andere Frage: wie ist es denn, wenn ich nun statt nur einem mehrere TV-Tipps, also mehrere zeilen der Tabelle ausgeben will? Reicht es, wenn ich meinen Code dazu in eine while-Schleife packe?
 
Hallo,

wenn du das Dateum in der Datenbank nicht in einem Timestamp, sondern in dem "normalen" Datumsformat speicherst(so hab ich es verstanden), dann kannst du auch einfach folgendes schreiben:
Code:
SELECT * FROM tvtipp WHERE ablaufdatum < NOW

Gruß
FreeZeY
 
Oh cool, muss ich mal austesten. Das wäre ja viel einfacher, vor allem wenn ich mehrere Termine eingebe.

Aber nun mal zu meiner anderen Frage (siehe oben) ^^
 
Für alle TV-Tipps, die noch nicht "abgelaufen" sind, müsstest du deinen Code wie folgt abändern:

PHP:
$timestamp = time(); 

    $query = "SELECT * FROM tvtipp";
            
    $result = mysql_query($query, $connection) or die('error making query');
        
while($zeile = mysql_fetch_array($result)) {
            
    $termin = $zeile['termin'];
    $ablaufdatum = $zeile['ablaufdatum'];
            
    $unix = mktime(0, 0, 0, $ablaufmonat, $ablauftag, $ablaufjahr); 
    
    $restzeit = $unix - $timestamp;
            
        if ($restzeit >= 0){
            echo $termin;
            }
        else {
            echo "Bald wieder neu";
        }
}

Ich würde dir aber die Variant über das MySQL Query empfehlen, sofern möglich.
 
Also wenn ich es so mache:
PHP:
	$query = "SELECT * FROM tvtipp WHERE ablaufdatum < NOW";

	$result = mysql_query($query, $connection) or die('error making query');
	
	while($zeile = mysql_fetch_array($result)) {		
	$termin = $zeile['termin'];
	$ablaufdatum = $zeile['ablaufdatum'];

	echo $termin;
			}
kommt "error making query" :( Muss das Datum in meiner Spalte "ablaufdatum" denn ein bestimmtes Format haben? Ich habe jetzt 23.08.2006 drin stehen.
 
Neue Frage ^^
Ich habe nun via HTML eine Tabelle gemacht, wo alle eingetragenen TV-Tipps aufgelistet werden. So weit, so gut.

PHP:
  <?php
	
	$query = "SELECT * FROM tvtipp ORDER BY datum";
	
	$result = mysql_query($query, $connection) or die('error making query');
  
  ?>
  
  <table width="70%" align="center" cellpadding=3 border="1" bordercolor="#CCCCCC">
  <tr>
    <td width="15%"><i>Datum</i></td>
    <td><i>Inhalt</i></td>
  </tr>

<?

while ($ausgabe = mysql_fetch_array($result)){
?>

  <tr>
	<td><?=$ausgabe['datum']?></td>
    <td><?=$ausgabe['inhalt']?></td>
  </tr>
  
<?
}
?>
Das funktioniert auch. Nun wollte ich aber unten drunter ein Auswahlmenü erstellen, wo man jedes eingetragene Datum auswählen kann. Das soll dann an eine andere php-Datei weitergegeben werden zum löschen.
PHP:
<form name="loeschen" method="post" action="tvtipp-loeschen.php">
<select name="loeschen">
<?  
	 while($row = mysql_fetch_array($result)) {         
  ?>  
<option value="<?=$row['datum']?>" </option>       
<?
}
?>
</select>
<input type="submit" name="submit" value="Löschen">
</form>
Leider wird in dem Auswahlmenü nichts angezeigt. Wo liegt der Fehler?? Bin am verzweifeln :(
 
Zurück
Oben