Eintrag-Details: Tagestipp mit PHP automatisch erzeugen

06.02.2006

Tagestipp mit PHP automatisch erzeugen

Neulich erreichte mich folgende Frage:

Ich möchte ein PHP-Skript haben, dass ich in meine Internetseite einfügen kann. Beim Aufruf der Seite soll dann ein zufällig ausgewählter Text als "Tagestipp" erscheinen

[Mehr:]

Hier eine mögliche Lösung:

Die Tagestipps schreiben Sie in eine Textdatei und nennen diese "tagestipps.txt"

Morgens und Abends zähneputzen nicht vergessen
Vor dem Abbiegen Blinker setzen
Gekochte Eier immer kurz kalt abschrecken
Nach dem Stuhlgang, vor dem Essen, Händewaschen nicht vergessen

Code herunterladen

Nun erstellen Sie ein PHP-Skript mit dem Namen "tipp.php"

<?php
// zufälligen Tagestipp anzeigen
// Die Tagestipps befinden sich in der
// Datei 'tagestipps.txt' und zwar
// jeweils eine Zeile pro Tipp.

define(DATEI, 'tagestipps.txt');

function zeige_tagestipp()
{
    // Zeilen zählen:
    $fp = fopen(DATEI, 'r');
    if (!$fp) die ('kann Datei ' . DATEI . ' nicht öffnen');
    $count = 0;
    while (!feof($fp))
    {
        $zeile = fgets($fp); // eine Zeile lesen
        // mögliche leere Zeilen übergehen
        if (trim($zeile) > '')
        {
            $count++;   // Zähler + 1
        }
    }
    echo "count: $count<br>";
    // Zufallsgenerator initialisieren
    // kann ab PHP Version 4.2 entfallen
    mt_srand ((double) microtime() * 1000000);
    
    // Zufallszahl erzeugen
    $num = mt_rand(1, $count);
    
    echo 'Tipp Nummer ' . $num . ': ';
    
    // Datei zurückspulen
    rewind($fp);
    while ( ($num > 0) and (!feof($fp)) )
    {
        $zeile = fgets($fp);
        if (trim($zeile) > '')
        {
            $num--;
        }
    }
    echo $zeile;
    fclose($fp);
}

Code herunterladen

Wie funktioniert das Ganze?

Zunächst wird der Dateiname als Konstante DATEI definiert, damit sie später im Skript bequem verwendet werden kann. Falls der Dateiname einmal geändert werden soll, so braucht später nur diese Zeile mit der Funktion define() geändert zu werden

Advertisement/Werbung

Es wird eine eigene Funktion zeige_tagestipp() definiert, die dann später auf der eigentlichen Seite so aufgerufen werden kann. Die Funktion öffnet die Datei mit den Tipps. Kann die Datei nicht geöffnet werden, wird das Skript mit der Funktion die() beendet.

Nun werden erst einmal alle Zeilen der Datei eingelesen. Dabei soll nur die Anzahl der Zeilen ermittelt werden. Vom Inhalt der Zeile wird lediglich geprüft, ob die Zeile aus einer Leerzeile besteht. Diese sollen nämlich nicht mitgezählt werden. Die Funktion trim() löscht dabei alle möglicherweise in der Zeile vorhanden Leerzeichen und Zeilenschaltungen, so dass bei einer leeren Zeile nichts übrigbleiben würde.

Hinweis: Wenn die Datei sehr viele Zeilen enthält, ist diese Methode nicht besonders effektiv, weil die Datei im Skript mindestens einmal eingelesen werden muss. Besser wäre es dann, die Anzahl der Zeilen (sofern diese bekannt ist) an einer anderen Stelle (in einer Konstanten oder in einer zweiten Datei) abzulegen.

Noch ein Hinweis: Natürlich würde man in der Praxis für eine solche Tagestipp-Funktion lieber eine Datenbank-Tabelle benutzen. In diesem speziellen Fall sollte aber gezeigt werden, wie so etwas auch ohne eine Datenbank realisierbar ist.

Nach dem Zählen der Zeilen wird die Textdatei mit rewind() "zurückgespult" so dass die Zeilen mit fgets() noch einmal gelesen werden können.

Die Funktion mt_rand() ermittelt dann eine zufällige Zahl zwischen 1 und der Anzahl der Textzeilen. In der nun folgenden While-Schleife werden nun genau so viele Zeilen eingelesen, wie in dieser Zufallszahl vorgegeben.

Zur Erzeugung von Zufallszahlen mit PHP können Sie übrigens hier ein weiteres Tutorial nachlesen: http://www.heddesheimer.de/coaching/password.html

Dieses Skript können Sie nun so in eine beliebige Internetseite einfügen:

<?php
include 'tipp.php';

?>
<html>
<head><title>Meine Homepage</title></head>
<body>
<?php zeige_tagestipp() ?>
</body>
</html>

Code herunterladen

Der Aufruf des "Tagestipps" erfolgt also an einer beliebigen Stelle auf der Seite über den Aufruf der PHP-Funktion zeige_tagestipp()

Hinweis: Diesen Text und die enthaltenen Beispielprogramme und Skripte dürfen Sie zum Erlernen der einzelnen Techniken und auch als Grundlage für Ihre eigenen Projekte auf eigene Gefahr kostenlos nutzen.

Bitte denken Sie daran, dass alle Texte und Quellcodes trotzdem urheberrechtlich geschützt sind. Eine direkte Weitergabe ist nur nach ausdrücklicher schriftlicher Genehmigung gestattet.

Permalink 06.02.2006 07:09:37, von Marian eMail , 168 Wörter, 8202 mal angeschaut   German (DE) Kategorien: PHP

Kommentare, Pingbacks:

Bisher keine Kommentare/Pingbacks für diesen Eintrag...

Kommentar schreiben:

Ihre E-Mail-Adresse wird nicht angezeigt.
Ihre URL wird angezeigt.
Antispam-Feld
Erlaubte XHTML Tags: <p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite, abbr, acronym, q, sub, sup, tt, i, b, big, small>
Optionen:
 
(Zeilenumbrüche werden zu <br />)
(Setze Cookies für Name, eMail & URL)

Werbung

Online-Kurse

  • Bequem PHP lernen bei freier Zeiteinteilung von zuhause
  • Der Onlinekurs den jeder versteht
  • www.lernpilot.de/wbt/

Konnte ich helfen?

mehr Werbung

buy viagra online|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66| levitra overdose effects levitra overdose symptoms which is stronger levitra or viagra cialis levitra or viagra levitra or viagra which is better levitra interactions alcohol levitra uk side effects levitra uk online generic levitra uk levitra use for women levitra use instructions levitra user group levitra tabs 20mg levitra trial coupon levitra time effectiveness levitra time frame levitra ratings and reviews levitra effects viagra levitra effects use levitra effects forum levitra effects liver levitra effects women levitra effectiveness reviews levitra women effect standard levitra dose levitra generic medication levitra generic viagra levitra generic cheap levitra generic drug levitra generic available