• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[GELOEST] Linkliste aus txt-Dateien erstellen

peternmb

Mitglied
Hallo,

ich biete auf meiner Webseite die Möglichkeit an, die Ergebnisse von Sport-Veranstaltungen kostenlos zu veröffentlichen.
Die HTML-Seiten werden dabei von meinem Windows-Programm generiert und per FTP hochgeladen.
Für jede Veranstaltung wird dabei eigenes Verzeichnis mit einer Indexdatei erstellt.

Funktioniert alles soweit prima, sofern dem Nutzer der direkte Link zum Verzeichnis bekannt ist.
Ich möchte jetzt auf der Hauptseite eine Übersicht der vorhandenen Veranstaltungen erstellen, um diese auch ohne Kenntniss des direkten Linkes ansehen zu können, die neuste Veranstaltung sollte oben stehen. Mein Windows-Programm erstellt dafür neben dem Verzeichnis mit den Turnierdaten im Hauptverzeichnis eine kleine Textdatei mit 3 Zeilen Inhalt (Datum, Veranstalter, Veranstaltung). Die txt-Datei hat den gleichen Namen wie das Verzeichnis.

Ich müsste also alle txt-Dateien einlesen, den Inhalt nach Datum sortieren und als Tabelle ausgeben, jede Tabellenzeile als Link.
Das ist vermutlich nur mit PHP machbar, von dem ich recht wenig Ahgnung habe.
Es wäre nett, wenn mit jemand da den richtigen Weg zeigen könnte, wie ich das realisieren kann.

Ich hoffe, das Ganze halbwegs verständlich erklärt zu haben.
 
Werbung:
Das schreit nach einer Datenbank.
Ich würde, wenn die Dateien per FTP hochgeladen wurden, ein Script starten, das den DB-Import durchführt. Die Ausgabe für die Nutzer würde ich dann aus der Datenbank lesen, wobei man das Sortieren der Datenbank überlassen kann.

Das Gehampel mit Dateien und Verzeichnissen ist doch viel zu umständlich.
 
Das schreit nach einer Datenbank.
Ich würde, wenn die Dateien per FTP hochgeladen wurden, ein Script starten, das den DB-Import durchführt. Die Ausgabe für die Nutzer würde ich dann aus der Datenbank lesen, wobei man das Sortieren der Datenbank überlassen kann.

Das Gehampel mit Dateien und Verzeichnissen ist doch viel zu umständlich.
das mit den Verzeichnissen klappt prima, ich kann in meinem Windows-Programm die Verzeichnisse per FTP erstellen, füllen und auch löschen lasssen.

Da ich wenig/keine Ahnung von PHP, MySQL usw. habe muss ich mit dem arbeiten das ich einigermaßen kann, es geht hier auch nicht um wirklich viele Daten.

Das Einlesen der txt-Dateien und das Anzeigen in einer Tabelle habe ich jetzt schon nach stundenlanger Arbeit (try_and_error) hinbekommen, womit ich noch Probleme habe ich die Verlinkung in der Tabelle. Ich müsste dafür den Dateinamen der txt-Dateien vermultich als 4. Element ins Array nehmen, da dieser gleichzeitig der Link ist.
 
Werbung:
Ich komme da einfach nicht weiter.
Wie kann ich den Namen der txt-Datei die in das Array eingelesen wird als 4. Element in mein Array aufnehmen?
Code:
<?php
   $files = 0;                // Zähler
   $path = scandir('./');     // Gibt den Inhalt des ganzen Verzeichnisses in einem Array wieder
   $array =[];                // Array für Dateiinhalt
    
   foreach($path as $file){   // Wiederhole den Vorgang für jedes Element des Arrays "$path" 
    
   if (substr($file,-4 )== '.txt') {   // nur txt-Dateien
         $files++;                     // Inkrementiert $files um 1
            $array[] = file($file);    // Inhalt in array einlesen
          }
      }
    echo "es wurden $files txt-Dateien im Verzeichnis gefunden<BR>";
...
 
PHP:
if (substr($file,-4 )== '.txt') {   // nur txt-Dateien
    $array[] = file($file);    // Inhalt in array einlesen
    $array[$files][] = $file;
    $files++;                     // Inkrementiert $files um 1
}

Da ich wenig/keine Ahnung von PHP, MySQL usw. habe muss ich mit dem arbeiten das ich einigermaßen kann
Man kann aber auch lernen, wenn man denn will. Mit einer DB würdest du die Sache um ein vielfaches erleichtern.
 
Zuletzt bearbeitet von einem Moderator:
vielen Dank, das funktioniert.
Ich muss jetzt noch die Endung .txt entfernen und das als Link verarbeiten - ich denke das schaffe ich selber...

Man kann aber auch lernen, wenn man denn will. Mit einer DB würdest du die Sache um ein vielfaches erleichtern.
Die Funktion mit dem Hochladen von Ergebnissen biete ich nicht nur für meine Webseite an.
Auf Wunsch kann dafür auch auf eine beliebige eigene Webseite genutzt werden.
Solange ich mit einer einfachen Verzeichniss-Struktur arbeite funktioniert das praktisch überall - auch ohne DB oder spezielle Kenntnisse, was für die Meisten am wichtigsten ist...

Ich bin nicht mehr der Jüngste und als Autodidakt und Hobbyprogrammierer unter Windows und Android bin ich da eigentlich schon recht ausgelastet...

PS.: ideal wäre natürlich noch eine Filterfunktion. Da die ganzen Veranstalternamen ja bereits im Array sind müsste das doch machbar sein...
 
Werbung:
Wenn es vor allem einfach zu realisieren sein soll und die Datenmenge überschaubar ist, würde sich datatables anbieten:
Sortierung und Filterung bzw. Suchfunktion ist eingebaut.
Danke für den Link, das schaue ich mir Morgen einmal in Ruhe an.
Im Moment bin ich erstmal glücklich, dass es so funktioniert wie ich es mir vorgestellt habe.
Eine Filter-/ Suchfunktion wird es nötig sein, wenn es entschieden mehr Daten werden...
 
Habe ich mir eben angesehen, ist aber zu aufwändig und kompliziert.

Ich möchte eine ganz einfach Filterfunktion einbauen, die ersten Schrritte habe ich schon gemacht und stoße auf das erste Problem: Ich sortiere mein Array nach dem 2.Wert (Veranstalter) um ein select damit zu füllen.
Das klappt soweit noch - ich möchte aber, dass in dem select jeder Wert nur einmal drin ist.
Ist es einfacher, das bereits bei der array-Sortierung irgendwie zu machen oder beim Füllen des selects?
Code:
<html>
<head>
<title>Turnier-Ergebnisse immer aktuell</title>
</head>
<body>

<p align=center><font face="Arial" size="5">
aktuelle Turnierauswertungen sortiert nach Veranstaltungsdatum:

<div id="form_abfrage" align=center>
<select size="1" id="Veranstalter" name="Veranstalter">
<option value="0" selected="selected">alle Veranstalter</option>

<?php
    $files = 0;                // Zähler
   $path = scandir('./');     // Gibt den Inhalt des ganzen Verzeichnisses in einem Array wieder
   $array =[];                // Array für Dateiinhal
   
   foreach($path as $file){   // Wiederhole den Vorgang für jedes Element des Arrays "$path"
   
   if (substr($file,-4 )== '.txt') {   // nur txt-Dateien
            $array[] = file($file);  // Inhalt in array einlesen
            $array[$files][] = substr($file,0,-4);  // Dateiname ohn Extension merken
         $files++;           // Inkrementiert $files um 1      
          }
      }

    $Avereine = array_merge(array(), $array);
    usort($Avereine, function ($a, $b) {
         if ($a[1] > $b[1]) {
              return 1;
         } else if ($a[1] < $b[1]) {
              return -1;
         }
         return 0;
    });

    for($i=0; $i < $files; $i++) {
        echo '<option value='.$i.'>'.utf8_encode($Avereine[$i][1]).'</option>';
    }

    echo '</select>';
    echo '</div></font></p>';
    echo '<div align=center>';
    echo '<table bgcolor=000000 border=1 cellpadding=2  width=60%>';


    $Adatum = array_merge(array(), $array);
    usort($Adatum, function ($a, $b) {
         $date_a = konv_date2($a[0]);
         $date_b = konv_date2($b[0]);
         if ($date_a > $date_b) {
              return -1;
         } else if ($date_a < $date_b) {
              return 1;
         }
         return 0;
    });

    for($i=0; $i < $files; $i++) {
       
      echo '<tr bgcolor="E7E7E7">';
      echo '<td><font face="Arial" size="4">';  
      echo $Adatum[$i][0];
     echo '<BR><B><font face="Arial" size="4">';
     echo utf8_encode($Adatum[$i][1]);
      echo '</B><BR>';
      echo '<a href='.$Adatum[$i][3].'>';
     echo utf8_encode($Adatum[$i][2]);
           
      echo '</a></td></tr>';
    }
    echo '</div></tbody></table>';
       
       
    // Datum konvertieren (für Sortierung)
    function konv_date2($datum)
    {
        $jahr = substr($datum,6,4);
        $mon  = substr($datum,3,2);
        $tag  = substr($datum,0,2);
        $datneu = $jahr.''.$mon.''.$tag;
    return $datneu;
    }
?>  
</body>
</html>
Ich habe eine Testseite erstellt, das sieht dann so aus:
www.hildegarda.de/TEST
 
Werbung:
dein html ist auch veraltet.
in diesen Code
Code:
</font></p><div align=center><table bgcolor=000000 border=1 cellpadding=2  width=60%><tr bgcolor="E7E7E7"><td><font face="Arial" size="4">15.03.2020
<BR><B><font face="Arial" size="4">
ist eigentlich alles veraltet.
Habe ich mir eben angesehen, ist aber zu aufwändig und kompliziert.
Du brauchst da eigentlich nur datatables einbinden, den rest wie Filtern und sortieren macht dann datatables,

Dein ganzes echo gewurste muss auch nicht sein, man kann mehrere Zeilen auch in ein echo schreiben ( bitte mit aktuellen html )
 
dein html ist auch veraltet.
in diesen Code
Code:
</font></p><div align=center><table bgcolor=000000 border=1 cellpadding=2  width=60%><tr bgcolor="E7E7E7"><td><font face="Arial" size="4">15.03.2020
<BR><B><font face="Arial" size="4">
ist eigentlich alles veraltet.
das ist bei den paar Zeilen Code doch nicht allzu tragisch, es muss nur funktionieren, keinen Schönheitspreis gewinnen. Auch der Lerneffekt ist dabei eher nebensächlich da ich das vermutlich kaum noch einmal benötige...

Dein ganzes echo gewurste muss auch nicht sein, man kann mehrere Zeilen auch in ein echo schreiben ( bitte mit aktuellen html )
wie sieht das dann konkret in meinem Beispielcode aus?

Wie kann ich nach einer Auswahl in dem select die Tabelle entsprechend der Auswahl neu erstellen?
 
ich habe das jetzt versucht umzusetzen, bekomme aber eine Fehlermeldung:
meine HTML-Datei sieht so aus:
Code:
<!DOCTYPE html>
<html>

<head>
    <title>Datatables Events</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css">
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
    <script src="https://cdn.datatables.net/plug-ins/1.10.20/sorting/datetime-moment.js"></script>
</head>

<body>
    <table id="events" class="display" style="width:100%">
        <thead>
            <tr>
                <th>Datum</th>
                <th>Veranstalter</th>
                <th>Veranstaltung</th>
            </tr>
        </thead>
    </table>
    <script>
        $.fn.dataTable.moment('DD.MM.YYYY');
        $('#events').DataTable({
            "ajax": "data.php"
        });
    </script>
</body>

</html>
die PHP-Datei sieht so aus:
Code:
<?php
    $files = 0;                // Zähler
   $path = scandir('./');     // Gibt den Inhalt des ganzen Verzeichnisses in einem Array wieder
   $array =[];                // Array für Dateiinhal
    
   foreach($path as $file){   // Wiederhole den Vorgang für jedes Element des Arrays "$path" 
    
   if (substr($file,-4 )== '.txt') {   // nur txt-Dateien
            $array[] = file($file);  // Inhalt in array einlesen
            $array[$files][] = substr($file,0,-4);  // Dateiname ohn Extension merken
         $files++;           // Inkrementiert $files um 1       
          }
      }
        
$outarray = ["data" => $array];
echo json_encode($outarray);

?>
was mache ich falsch?
 
Werbung:
Werbung:
Jaaa, jetzt werden die Dateinhalte angezeigt - wie kann ich die Links da einbauen?

Sieht schon toll aus, und die Such-und Sortierfunktionen sind Oberklasse :smile:
Bestimmt lässt sich das Ganze auch "eindeutschen"...

Feierabend für Heute, Morgen gehts weiter :wink:
 
Zuletzt bearbeitet:
Am Besten die ganze Tabellenzeile als Link, alternativ die Veranstaltung.
Keine Endung, der Link weist auf ein Verzeichnis mit eigener index.html.
 
Werbung:
das ist bei den paar Zeilen Code doch nicht allzu tragisch, es muss nur funktionieren, keinen Schönheitspreis gewinnen. Auch der Lerneffekt ist dabei eher nebensächlich da ich das vermutlich kaum noch einmal benötige...

Ich kann dich da schon verstehen.
aber..
Auch wenn es so funktioniert ist es trotzdem nicht empfehlenswert.
Die Browser sind heute noch so nett und lesen den veralteten Code und zeigen ihn meißtens auch richtig an.
Man muß aber mit rechnen das die Browser irgendwan beim update solche ( schlechtes html ) nicht mehr lesen und damit nix oder falsch anzeigen( muß nicht sein aber kann ).

Wenn du aber mal vor hast dich mehr mit den Thema auseinander zu setzen , benutze dann aber bitte aktuellen html5 Code.
Gerade dann wenn du eine Homepage erstellen tust wo jeder zugriff drauf hat.
Auch wenn es jetzt nicht wichtig ist , aber Googel und co achten auch darauf , das siehst du dann bei der Googel suche das solche Webseiten ganz hinten stehen.

Aber schön das Du / Ihr jetzt datatables zum laufen bekommen habt , wie du siehst ist das ein sehr gutes Script was seine sache sehr gut macht. Habe noch kein vergleichbares Script gefunden.
 
Zurück
Oben