Programmausgabe will nicht, Hilfe!

2Pac

Erfahrenes Mitglied
Hallo,

ich versuche Programme in Blocks einzuteilen und diese Blocks dann auszugeben mit Zeiten. Da die Sendezeiten jedoch wiederholt werden, möchte ich nur die Länge der Programme eingeben und dann auf eine Startzeit aufrechnen.

Doch das klappt leider nicht. Ich glaube auch nicht das mein Codeversuch bedonders toll ist.

Helft mir bitte.

Hier mein Versuch:

Code:
<?php

include ("./config.php");
$db = mysql_connect("$DbHostName", "$DbUserName", "$DbPassWord");
$sql1 = mysql_db_query("$DatabaseName", "SELECT id FROM Programm_Programm where woche='1' and tag='1'") OR die(mysql_error());
while ($data = mysql_fetch_row($sql1))
{
 $block_id = $data[0];
 $sql3 = mysql_db_query("$DatabaseName", "SELECT block1,block2,block3,block4 FROM Programm_Zeiten where id='1'") OR die(mysql_error());
 while ($data = mysql_fetch_row($sql3))
 {
  $block1 = $data[0];
  $block2 = $data[1];
  $block3 = $data[2];
  $block4 = $data[3];
  $block1_1 = date("H",$block1);
  $block1_2 = date("i",$block1);
  $block2_1 = date("H",$block2);
  $block2_2 = date("i",$block2);
  $block3_1 = date("H",$block3);
  $block3_2 = date("i",$block3);
  $block4_1 = date("H",$block4);
  $block4_2 = date("i",$block4);
  echo "<br><b><font face='verdana' size='2'> Montag</font></b><center><table border='0' style='border: 1px solid #383189' cellspacing='1' style='font-size: 8pt' width='695'>";
  echo "<tr width='695' bgcolor='#EFA500'>
         <td width='120' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'><b>Zeit</b></font></td>
         <td width='225' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'><b>Titel</b></font></td>
         <td width='175' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'><b>Untertitel</b></font></td>
         <td width='175' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'><b>Rubrik</b></font></td>
        </tr>";
  echo "<tr width='695'>
         <td width='120' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>09:00</font></td>
         <td width='225' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>Panorama</font></td>
         <td width='175' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>Panorama</font></td>
         <td width='175' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>Panorama</font></td>
        </tr>";
  $sekunde11 = 0;
  $monat11 = 2;
  $tag11 = 3;
  $jahr11 = 2007;
  $neue_zeit_1 = $block1_1;
  $neue_zeit_2 = $block2_1;
  $neues_datum1 = mktime($neue_zeit_1, $neue_zeit_2, $sekunde11, $monat11, $tag11, $jahr11);
  mysql_db_query("$DatabaseName", "UPDATE programm_Zeit SET datum=$neues_datum1 where id='1'") OR die(mysql_error());
  $sql2 = mysql_db_query("$DatabaseName", "SELECT titel,untertitel,rubrik,zeit FROM Programm_Daten where block='$block_id'") OR die(mysql_error());
  while ($data = mysql_fetch_row($sql2))
  {
   $programm_titel = $data[0];
   $programm_untertitel = $data[1];
   $programm_rubrik = $data[2];
   $programm_zeit = $data[3];
   $programm_datum = date("d.m.Y",$programm_zeit);
   $programm1_1 = date("H",$programm_zeit);
   $programm1_2 = date("i",$programm_zeit);
   $sql4 = mysql_db_query("$DatabaseName", "SELECT datum FROM programm_Zeit where id='1'") OR die(mysql_error());
   while ($data = mysql_fetch_row($sql4))
   {
    $anzeige_zeit = $data[0];
    $anzeige_zeit_1 = date("H",$programm_zeit);
    $anzeige_zeit_2 = date("i",$programm_zeit);
    echo "<tr width='695'>
          <td width='120' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>$anzeige_zeit_1:$anzeige_zeit_2</font></td>
          <td width='225' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>$programm_titel</font></td>
          <td width='175' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>$programm_untertitel</font></td>
          <td width='175' style='border: 1px solid #383189'><font face='verdana' size='1' color='#3333CC'>$programm_rubrik</font></td>
         </tr>";
    $anderes = $anzeige_zeit_1x60;
    $neues_datum2 = $anzeige_zeit+$anderes+$anzeige_zeit_2;
    mysql_db_query("$DatabaseName", "UPDATE programm_Zeit SET datum=$neues_datum2 where id='1'") OR die(mysql_error());
   }
  }
 }
 echo "</table><br><br><a href='http://www.oksalzwedel.de/v2/programm.php'>Zurück</a><br><br></center>";
}

mysql_close($db);

?>

Zu den Datenbanken ist folgendes zu sagen:

Programm_Programm hat die Spalten woche, tag, id. Woche gibt es die aktuelle = 1 und die nächste = 2. Bei den Tagen gibt es 1-7. Es existieren somit 14 Datensätze vorinstalliert.

1_1
1_2
1_3
1_4
1_5
1_6
1_7
2_1
2_2
2_3
2_4
2_5
2_6
2_7

Dort aktualisiere ich dann einfach per UPDATE welcher Block in der Woche gespielt werden soll.

Programm_Zeiten sind die Blockzeiten. Es wird ein Block 10 Uhr ein Blcok 13 ein Block 16 und ein Block 19 Uhr gesendet. Es ist immer der selbe. Nur stellt er Wiederholungen dar. In den Spalten Block1-Block4 wird ein integer Wert des Datums (timestamp) gespeichert, damit ich eine Ausgangssituation habe.

in Programm_Daten sind die Programme selbst mit block als id gespeichert und programm_Zeit ist eine Tabelle mit id und datum. Ich wollte dort die Zeit speichern und updaten pro schleifendurchlauf und wieder ausgeben. Klappt aber nicht :D

Folgendes gibt er im Moment aus:

09:00 Panorama Panorama Panorama
03:00 Bezeichnung Untertitel Rubrik
02:02 Bezeichnung Untertitel Rubrik

Was mach ich falsch?

P.S: 03:00 und 02:02 sind die bisher eingegebenen Längen in der Tabelle. D.h. er scheint die Variable vorher als 0 zu setzen und einfach dann zu addieren. Was heißt, das addieren scheint zu klappen, nur nicht der Vorwert? Hmm unlogisch irgendwie :X

Danke im Voraus, Sorry wenns das falsche Forum war.

Mit freundlichen Grüßen
2Pac
 
Zuletzt bearbeitet:
Hi,

checke mal deine SQL's. Das sieht alles sehr statisch aus - where woche='1' and tag='1' / where id='1' - möglicherweise gibt der also schon das richtige aus .. nur nicht das was du erwartest.

Ansonsten zerbrösel dein Problem in kleinere Schritte, oder nuzte einen Debuger, ich denke, so wie du das gepostet hast, ist es zu komplex, als das dir da einer ohne die DB etwas helfen kann!

Dirk
 
Hmpf. Sehr schwer zu verstehen was du genau möchtest.

Du hast "Programme" (also ich stell mir mal einach TV Programme vor). Diese haben eine Startzeit sowie eine Länge oder? Jetzt möchtest du sagen können:
Montag Block 1 läuft Program 27.
Montag Block 2 läuft Program 56.
Dienstag Block 1 läut Program 32

etc... ist das richtig so?

Also brauchst du einfach mal eine Tabelle mit den Programmen.
Eine Tabelle mit den Blöcken
Und drittens eine Tabelle dazwischen welche Program und Block verbindet und noch das Datum dazu speichert.

Habe ich da jetzt was total falsch verstanden?

MFG
X
 
Hallo danke erstmal für die Hilfeversuche von euch beiden :)

Das sieht sehr statisch aus, da ich nur 2 Wochen im Programm habe. Diese Wochen werden weder Datumstechnisch noch sonst irgendwie verändert. Daher hab ich die Variante mit Tag=1 Woche=1 Block=Blockid gewählt.

Mein Problem ist nun folgendes.

Wie oben beschrieben, habe ich eine Tabelle für Blöcke. Dort werden diese mit Namen und ID gespeichert. Dann habe ich eine Tabelle für die Programme. In dieser Tabelle gibt es die Daten, sprich Name, Rubrik, Untertitel etc. Zu guter letzt speichere ich bei den Programmen unter block die ID des Blockes dem das Programm angehört.

Weiterhin speichere ich als integer Wert das Datum per mktime(".....").

In Programm_Zeiten sind die Startzeiten vermerkt. Denn es wird jeweils ein Sendeblock wie bereits erwähnt 10 Uhr, 13 Uhr, 16 Uhr, 19 Uhr ausgestrahlt.

Und was ich jetzt eigentlich will ist eine Auflistung des Programms mit den Uhrzeiten.

Sprich:

09:00 Uhr Panorama
10:00 Uhr Programm... aus Block... (Daten ausgeben, Titel, Untertitel)
11:20 Uhr Programm... aus Block...
12:10 Uhr Programm... aus Block...

Sagen wir nun an dieser Stelle der Block ist zu Ende, so sollte nun ab 13:00 (2. Startzeit siehe oben) der Block wiederholt werden.

Die Wiederholung auch für 16 und 19 Uhr dann.

Und mein Problem ist halt er gibt mir statt zu der Uhrzeit (10:00) dazu zu addieren die Längen der Programme aus.

Es ist also nicht so wie du sagtest redX

Montag Block 1 läuft Program 27.
Montag Block 2 läuft Program 56.
Dienstag Block 1 läut Program 32

sondern

Montag ab 10 Uhr kommt Block1
Wiederholungen von Block 1 kommen 13 Uhr, 16 Uhr, 19 Uhr

Dienstag ab 10 Uhr kommt Block5
Wiederholungen von Block 1 kommen 13 Uhr, 16 Uhr, 19 Uhr

Mittwoch ab 10 Uhr kommt Block3
Wiederholungen von Block 1 kommen 13 Uhr, 16 Uhr, 19 Uhr

Es ist halt so, dass die Wiederholungszeiten variabel sein sollen. Kann ja mal sein, dass der OK meint wir senden ab jetzt ab 8 Uhr und nur noch bis 20 Uhr oder sowas in der Art.

Daher werden die Startzeiten 10,13,16,19 vorher in der Datenbank gespeichert.

Hoffe man versteht es jetzt besser?

Danke schonmal

um es nochmal an meinem Beispiel zu erläutern:

ausgegeben werden sollte statt

09:00 Panorama Panorama Panorama
03:00 Bezeichnung Untertitel Rubrik
02:02 Bezeichnung Untertitel Rubrik

folgendes:

09:00 Panorama Panorama Panorama
10:00 Bezeichnung Untertitel Rubrik
13:00 Bezeichnung Untertitel Rubrik

würde ein 3. Programm laufen sollte das nun 13:00 + die 02:02 des 2. Programms anfange.

15:02 Programm3

Mal davon abgesehen, dass das Beispiel schlecht gewählt, war, da die Zeit 13 Uhr für den Block zu Ende sein sollte^^
 
Zuletzt bearbeitet:
Okay - dann würde ich das aber in ne sql Anweisung machen:

select * from
programm_programm as prog
inner join programm_zeiten as block_start
inner join programm_block as block on prog.block = block.id
inner join programm_sendung send on block.ssendung = send.id
where
......

So, dann sollten allen Einträge drin sein - anhand der startzeit aus block_start kannste den Sendebegin für jeden Eintrag berechnen ...

Ausserdem kannste mit dem SQL-Skript auch die Ausgaben sehen und dich nicht durch dein 'gewuschel' von php-Script wühlen :)

Dirk
 
Hallo danke für deine erneute Hilfe :)

Kannst du mir das inner join genauer erklären? Will ja nicht etwas kopieren, sondern den Befehl auch verstehen :)
 
Kuck mal hier:

http://dev.mysql.com/doc/refman/5.1/de/join.html

Ansonsten dienen joins zum Verbinden von mehrere Tabellen über einen Schlüssel (eine oder mehrere Spalten in den zu verbindenden Tabellen). Allerdings ist das absolutes Datenbank-Basic-Wissen.

Also falls dir das nix sagt, dann such doch mal nach einem Tutorial 'SQL-Basic join' oder bei amazon nach einem Buch. Die Möglichkeiten der Datenbank zu kennen ist in sofern sehr wichtig, da du sonst keine vernünftigen front-ends programmieren kannst - deswegen würde ich dir das dringend empfehlen!!

Dirk
 
Zurück