Brauche Hilfe bei Scripts für Geburts- und Jahrestage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Brauche Hilfe bei Scripts für Geburts- und Jahrestage

    Hallo,

    ich bin’s leid, ich brauche Hilfe.
    Ich will für eine Vereinsseite einige Dinge bereitstellen, bei denen ich einfach nicht bis zum Ende komme, weil ich immer wieder woanders vor eine Wand laufe.
    Da ich nicht gerade ein begnadeter Programmierer bin, habe ich mir verschiedene Skripte „zusammengeloadet“ und die dann weiter bearbeitet.

    1. Problem:
    Ich will über ein Skript jedem Vereinsmitglied über die Homepage zum Geburtstag gratulieren. Dazu habe ich die Geburtstag.php zusammengebastelt, die auf der Hauptseite.php inkludiert ist und sich die entsprechenden Geburtsdaten aus der Geburtstag.txt holt. Wenn ich die Tabellenzelle für die Geburtstag.php allerdings in die Datei selber schreibe, dann schreibt er mir bei mehr als einem Geburtstag auch mehr als eine Zelle. Das will ich aber nicht. Die Geburtstagskinder sollen in einer Zelle schön untereinander stehen.
    Schreibe ich die Tabellenzelle in die Hauptseite.php, dann steht dort immer die Zelle mit der Überschrift Geburtstag auch wenn keiner Geburtstag hat. Das ist nicht Sinn der Sache.

    Hier ist der Code:

    PHP-Code:
    <?
    $fp = fopen('Geburtstage.txt', 'r');


    while (!feof($fp)) {
        $zeile = fgets($fp,4096);
        if ($zeile!="") {
          $tmp=split(",", $zeile );
          $temp['vorname']=trim($tmp[1]);
          $temp['name']=trim($tmp[0]);
          list($temp['datum']) = split(". ", trim($tmp[2]) );
          ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})", $temp['datum'], $tmp);
          $temp['tag']=$tmp[1];
          $temp['monat']=$tmp[2];
          $temp['jahr']=$tmp[3];
          $temp['Alter']=date(Y)-$temp['jahr'];
          $speicher[]=$temp;
        }
    }
    fclose($fp);



    foreach ( $speicher AS $Wert)
    {
     if (date ("z")==date("z", mktime(0, 0, 0, $Wert['monat'], $Wert['tag']) ) )
     {

    echo

     "".$Wert['vorname']." ".$Wert['name']." (".$Wert['Alter'].") <br><br>\n";
     }
    }

    ?>
    Dazu die Geburtage.txt

    Bonk, Andreas, 01.01.1973
    Oleksy, Darius, 13.01.1973
    Leszek, Thomas, 14.04.1973


    2. Problem
    Ich will über ein Skript Jahrestage des Vereins in dem Stil „Vor 50 Jahren“ auf die Homepage stellen. Das müsste eigentlich so ähnlich ablaufen wie bei der Geburtstag.php. Prüfen des Datums und bei Übereinstimmung Sichtbarmachung auf der Homepage.
    Neben dem Problem, was im 1.Problem beschrieben ist, funktioniert hier einiges mehr nicht. Ich kann zwar noch das Element „Vor 50 Jahren“ anzeigen lassen, aber das eigentliche Ereignis (z.B. „Harald Trexler hält zwei Elfmeter in einem Spiel“) kann ich nicht sichtbar machen. Außerdem wird mir dann in der Tabellenzelle für die Geburtstag.php noch eine Klammer angezeigt, die wohl aus der Anzeige für das Alter kommt. Irgendwie kollidieren die beiden Skripte Geburtstag.php und Jahrestag.php wohl.

    Hier ist der Code:

    PHP-Code:
    <?
    $fp = fopen('Jahrestage.txt', 'r');


    while (!feof($fp)) {
        $zeile = fgets($fp,4096);
        if ($zeile!="") {
          $jhrstg=split(", ", $zeile );
          $jahrestag['ereignis']=trim($jhrstg[0]);
          list($jahrestag['datum']) = split(". ", trim($jhrstg[1]) );
          ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})", $jahrestag['datum'], $jhrstg);
          $jahrestag['tag']=$jhrstg[1];
          $jahrestag['monat']=$jhrstg[2];
          $jahrestag['jahr']=$jhrstg[3];
          $jahrestag['stichtag']=date(Y)-$jahrestag['jahr'];
          $speicher[]=$jahrestag;
        }
    }
    fclose($fp);


    foreach ( $speicher AS $Wert)
    {

     if (date ("z")==date("z", mktime(0, 0, 0, $Wert['monat'], $Wert['tag']) ) )
     {
    ?>
      <font size="-2" color="white">Vor
    <?
      echo

       "".$Wert['stichtag']."\n";
    ?>
       Jahren:</font>
    <?

       "".$Wert['ereignis']."\n";
     }
    }

    ?>

    Dazu die Jahrestage.txt

    Harald Trexler hält zwei Elfmeter in einem Spiel, 13.02.1978
    Das Spiel SV Schüren - SG Castrop endet 4:4, 20.03.1977
    Das Spiel SV Sodingen - SG Castrop wird beim Stand von 1:0 abgebrochen, 21.08.1977


    Wäre klasse, wenn mir jemand helfen könnte.

    Danke schon mal
    und bis dann
    Zuletzt geändert von Linksaussen_11; 05.08.2005, 01:09.

  • #2
    php-Tags benutzen, kann ja kein Schwein lesen O_o,

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Schreibe ich die Tabellenzelle in die Hauptseite.php, dann steht dort immer die Zelle mit der Überschrift Geburtstag auch wenn keiner Geburtstag hat. Das ist nicht Sinn der Sache.
      Mach erst eine Abfrage ob du einen Treffer für den besagten Tag hast und wenn die Anzahl > 0 ist, erst dann schreibst du den Titel.
      PHP-Code:
      echo "<table><tr><td>";
      foreach ( 
      $speicher AS $Wert)
      {
       if (
      date ("z")==date("z"mktime(000$Wert['monat'], $Wert['tag']) ) )
       {

      echo

       
      $Wert['vorname'].$Wert['name'].$Wert['Alter']."<br><br>\n";
       }
      }
      echo 
      "</td></tr></table>"
      So sollte die gesamte Ausgabe in eine Zelle (td) geschrieben werden. Allerding hast du eine leere Tabelle wenn keine Geburtstage aktuell sind.
      Auch kannst du die " weglassen und auch die Klammer um Alter.
      Deine zuviel angezeigte Klammer kommt vielleicht von dort.
      Ausserdem frage ich mich, ob du die Daten nicht einfacher einlesen kannst z.B. Hubert,Schuster,timestamp_geburtstag\r\n
      PHP-Code:
      $temp explode('<br />',nl2br(file_get_contents('test.txt')));
      foreach(
      $temp as $wert){
          
      $inhalt explode(',',$wert);
          
      $speicher[] = array('vorname' => $inhalt[0], 'name' => inhalt[1],'geburi' => $inhalt[2]);

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Hallo jahlives,
        das kann noch nicht die Lösung sein. Das Problem mit der leeren Zelle bei Nichtgeburtstag besteht nach wie vor.
        Es lässt sich natürlich vermeiden, wenn man den Code
        PHP-Code:
         "<table><tr><td>"
        vor
        PHP-Code:
         $Wert['vorname'].$Wert['name'].$Wert['Alter']."<br><br>\n"
        schreibt, aber dann besteht das Problem der doppelten Zelle, wenn zwei Leute an einem Tag Geburtstag haben.




        Wenn ich die Anführungszeichen rausnehme, dann erhalte ich aber keine Leerzeichen zwischen Vorname, Name und Alter. Auch will ich die Klammer um Alter behalten, da man dann eher weiß, dass es sich um das Alter handelt.

        Bis dann
        Zuletzt geändert von Linksaussen_11; 21.08.2005, 10:50.

        Kommentar


        • #5
          Nachdem ich das Skript Jahrestage.php noch mal neu programmiert habe, funktioniert jetzt auch das Anzeigen des Ereignisses.

          Das Problem mit der Klammer habe ich mittlerweile lösen können. Die beiden Skripte Jahrestage.php und Geburtstage.php haben sich wohl tatsächlich gestört. Ich habe jetzt aus der Variablen $speicher, die ja in beiden Skripten gleich war, die Variablen $speicher1 in Geburtstage.php und $speicher2 in Jahrestage.php gemacht.

          Hier ist der Code:

          PHP-Code:
          <?
          $fp = fopen('Jahrestage.txt', 'r');

          while (!feof($fp)) {
              $zeile = fgets($fp,4096);
              if ($zeile!="") {
                $jhrstg=split(",", $zeile );
                $jahrestag['ereignis']=trim($jhrstg[0]);
                list($jahrestag['datum']) = split(". ", trim($jhrstg[1]) );
                ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})", $jahrestag['datum'], $jhrstg);
                $jahrestag['tag']=$jhrstg[1];
                $jahrestag['monat']=$jhrstg[2];
                $jahrestag['jahr']=$jhrstg[3];
                $jahrestag['stichtag']=date(Y)-$jahrestag['jahr'];
                $speicher2[]=$jahrestag;
              }
          }
          fclose($fp);

          foreach ( $speicher2 AS $Wert)
          {
           if (date ("z")==date("z", mktime(0, 0, 0, $Wert['monat'], $Wert['tag']) ) )
           {

          ?>
            <font size="-2" color="white"><b>Vor
          <?

            echo
             "".$Wert['stichtag']."\n";
          ?>
             Jahr(en):</b><br>
          <?

          echo "".$Wert['ereignis']." </font><br><br>\n";

           }
          }
          echo "</td></tr>";

          ?>
          Die Sache mit der Tabellenzelle, die auch zwei Geburtstage in einer Zelle anzeigen soll und gar nicht zu sehen sein soll, wenn keiner Geburtstag hat, konnte ich aber immer noch nicht lösen. Vielleicht kann sich ja noch mal jemand erbarmen.

          Bis dann

          Kommentar

          Lädt...
          X