WinFuture-Forum.de: CSV in PHP einlesen und als Tabelle ausgeben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

CSV in PHP einlesen und als Tabelle ausgeben

#16 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 11. Januar 2018 - 23:45

Mal nur das html-Grundgerüst gelassen und nochmal mit fgetcsv

<?php 
$erste_Zeile = TRUE ;
$csvdatei = 'a1.csv' ;
$tabkopf = array('Schichtbeginn','Schichtende','Personal 1','Personal 2','Personal 3');
?>


<!doctype html>
<html lang="de">
<head>

<title>SCHICHTEN</title>

<style>
    .table {display: table ; border-left:1px solid #888888; border-top:1px solid #888888;}
    .tr {display: table-row ;}
    .td {display: table-cell ; padding:3px; border-right:1px solid #888888; border-bottom:1px solid #888888;} 

</style>
</head>
<body>

<?php 

$tabelle = '<div class="table">
             <div class="tr">' ;
  for ($ib = 0; $ib<5; $ib++)
    {
      $tabelle .= '<div class="td">'.$tabkopf[$ib].'</div>';
    }                
$tabelle .= '</div> ' ;

if (($handle = fopen($csvdatei, 'r')) !== FALSE) {
    while (($data = fgetcsv($handle,50,';')) !== FALSE){
 
    if ($erste_Zeile == FALSE)
    {
	$tabelle .=  '<div class="tr">' ;
    
        for ($c=0; $c < 5; $c++) {
            $tabelle .= '<div class="td">'.$data[$c].'</div>' ;
        }      
        $tabelle .= '</div> ' ;
       }
       $erste_Zeile = FALSE ; 
    }
    
    fclose($handle);
}

$tabelle .= '</div>'  ;

echo  $tabelle ;

?>
 
</body>
</html>



Dieser Beitrag wurde von Holger_N bearbeitet: 11. Januar 2018 - 23:47

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

Anzeige



#17 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 11. Januar 2018 - 23:52

Ze longwhile? :ph34r:
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#18 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 12. Januar 2018 - 00:57

Ich kann dann immer nicht mehr aufhören, wenn ich erstmal mit so Schnipseln angefangen habe.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#19 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 12. Januar 2018 - 10:52

Ich wollte das Ding erst in PHP Code ändern, der HTML ausgibt, denn dieses HTML/PHP gemische erinnert mich an die PHP3 Zeiten. Aber mir stellt sich auch die Frage der Aufgabenstellung. Ich meine damit, was damit gemacht werden soll.

Wenn die Seite auf einem Server liegt der nur statische Seiten ausgibt und die Seite somit unbedingt als .html(l) vorliegen muss, wäre die Umstellung auf .php ein Problem, denn dann müsste man die Links in den restlichen .html auch ändern. Zumal wir auch nicht wissen ob auf dem Zielsystem überhaupt PHP installiert ist.

Der TE hat leider überhaupt nichst dazu gesagt wo die Seite ausgeführt/ausgeliefert werden soll und wie sein Auftrag bzw. seine Aufgabenstelltung ist. Wir wissen auch nicht wo die Seite später liegen soll und wie die Quelldateinen der Seite zugeführt werden sollen oder ob sie immer den gleichen Namen haben. Da wir die Umgebung nicht kennen, in der der Code später laufen soll, lohnt sich für mich eine weitere Arbeit daran nicht. Aber als Spielerei ist es trotzdem nicht übel. :)

Momentan sieht es so aus:

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>SCHICHTEN</title>
    <link rel="stylesheet" href="../formate.css" />
    <style>
        table, td, th { border: 1px solid gray }
    </style>
</head>
<body>
    <p>
        <img id="logo-l" src="../img/logo.png" width="201" height="216" alt="Logo" />
    </p>
    <p>
        <img id="logo-r" src="../img/logo.png" width="201" height="216" alt="Logo" />
    </p>
    <h2>SCHICHT A1</h2>
    <nav>
        <div id="Schichten">
            <ul>
                <li><a tabindex="0" aria-current="page">SCHICHT A1</a></li>
                <li><a href=../index.html>SCHICHTEN</a></li>
                <li>SCHICHT A2</li>
                <li>SCHICHT A3</li>
            </ul>
        </div>
    </nav>
    <table>

        <?php

        /* csv datei */
        $file = file("a1.csv");

        /* name des ortes */
        $location = "Hamburg";

        /* festlegen ob die namen mit oder ohne nummern angezeigt werden sollen, TRUE = mit nummern, FALSE = ohne nummern */
        $numbers = FALSE;

        /* array für wochentage */
        $weekdays = array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag");

        /* variablen initialisieren */
        $line_number = NULL;
        $line = NULL;
        $array = NULL;
        $day = NULL;
        $date = NULL;
        $name1 = NULL;
        $name2 = NULL;
        $name3 = NULL;

        /* tabellenkopf schreiben */
        echo "<tr><td>Datum</td><td>Schichtbeginn</td><td>Schichtende</td><td>Personal 1</td><td>Personal 2</td><td>Personal 3</td></tr>";

        /* zeilen der csv datei durchlaufen */
        foreach ($file as $line_number => $line) {

            /* zeile mit ; als trennzeichen in array auflösen */
            $array = explode(";" , $line);

            /* prüfen ob string leerzeichen enthält */
            if (strpos($array[0], " ")) {

                /* wenn ja, string vor leerzeichen abschneiden um den namen des tages zu ermitteln */
                $day = substr($array[0], 0, strpos($array[0], " "));

            } else {

                /* wenn nein, string auf null setzen */
                $day = NULL;

            }

            /* wenn string gleich ort, dann ignorieren */
            if ($array[0] === $location) {

                /* ignorieren */

            /* wenn string in array der wochentage enthalten */
            } else if (in_array($day, $weekdays)) {

                /* dann string nach leerzeichen abschneiden um das datum zu ermitteln */
                $date = substr($array[0], strpos($array[0], " ") + 1);

            /* ansonsten zeile für schicht ausgeben */
            } else {

                if ($numbers === TRUE) {

                    /* zeile für schicht mit nummern ausgeben */
                    echo "<tr><td>" . $date . "</td><td>" . $array[0] . "</td><td>" . $array[1] . "</td><td>" . $array[2] . "</td><td>" . $array[3] . "</td><td>" . $array[4] . "</td></tr>";

                } else if ($numbers === FALSE) {

                    $name1 = substr($array[2], strpos($array[2], " ") + 1);
                    $name2 = substr($array[3], strpos($array[3], " ") + 1);
                    $name3 = substr($array[4], strpos($array[4], " ") + 1);

                    /* zeile für schicht ohne nummern ausgeben */
                    echo "<tr><td>" . $date . "</td><td>" . $array[0] . "</td><td>" . $array[1] . "</td><td>" . $name1 . "</td><td>" . $name2 . "</td><td>" . $name3 . "</td></tr>";

                }

            }

        }

        ?>

    </table>
</body>
</html>



Mit dem angegebenen Format der CSV Datei funktioniert das auch ganz gut.

Dieser Beitrag wurde von Gispelmob bearbeitet: 12. Januar 2018 - 10:53

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#20 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 12. Januar 2018 - 23:07

Was wollt ihr immer mit PHP? Gottverdammmich. Und den TO haben wir auch schon lange (erfolgreich) vergrault.

Wie wär's mit PowerShell? Da gibt es Import-Csv.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#21 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 12. Januar 2018 - 23:24

Was willst du mit der Powershell wenn das Ding auf einem Webserver laufen soll? Jedenfalls war das die Ausgangslage.^^
AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#22 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 12. Januar 2018 - 23:46

Na prinzipiell scheint es da keine wirkliche Vorgabe zu geben. Er kriegt regelmäßig eine csv-Datei und will sich den Inhalt in einer schicken Tabelle angucken und dachte wohl nun, wenn er das mit einer php-Datei macht, geht das ganz einfach in einem Browser. Natürlich wäre es etwas übertrieben, nur für diesen einen Zweck den Apache oder XAMPP oder sowas zu installieren, aber die Powershell nutzt da ja auch nichts. Dann könnte man sich auch gleich die csv in Notepad angucken. Man könnte natürlich ein kleines »Anguckprogramm« schreiben.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#23 Mitglied ist offline   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.794
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 12. Januar 2018 - 23:47

Wobei ich mir da nicht so sicher bin, ob die Ausgangslage wirklich die ist bzw. war, dass das auf einem Server laufen soll. Das wurde vermutlich von den meisten hier nur hereininterpretiert, weil da PHP Code im Spiel ist.

frankc müsste sich dazu mal äußern, ob das Ganze einfach nur lokal im Browser laufen soll oder wirklich auf einem Server.

Edit: Holger war mit dem Gedankengang schneller. ;)
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#24 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 12. Januar 2018 - 23:59

Ansonsten kann es aber Anderen helfen. Egal wie es nun gemeint ist, steht ja in der Überschrift trotzdem »CSV in PHP einlesen und als Tabelle ausgeben« und jeder der das machen will und nicht genau weiß wie das geht, tippt ja in sein Internet ein »CSV in PHP einlesen und als Tabelle ausgeben«, landet dann hier und findet lauter Ideen und wenn das bei dem dann funktioniert, dann lacht der mitn Mund.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#25 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 13. Januar 2018 - 00:16

Es war einfach ein hanebüchenes Beispiel in die Richtung, "wie es auch gehen könnte", analog allen anderen hanebüchenen Vorschlägen hier. :wink:

Per Webserver würd ich sagen, vergiß das mit der CSV und nimm stattdessen Datenbank. Wenn aber doch Webserver und CSV, würd ich immer noch sagen, vergiß serverseitige Sprache und mach das clientseitig mit Javascript oder sowas.

CSV und Tabelle UND PHP oder dergleichen ist nur dann sinnvoll, wenn man a) bloß CSV hat (bzw einfach eine Datei mit Daten drin und keine Datenbank) und diese Information an mehrere Ziele verteilt werden soll (nur lesend, an dieser Stelle). Dann würde man die CSV an einen zentralen Ort tun (den Webserver) und den das ausliefern lassen, an dieser Stelle notwendigerweise mit einer serverseitigen Scriptsprache.

Ansonsten geh ich mit... möchte aber herausstellen, daß es -denk ich- schon genug Ansätze gibt, wie man das in PHP mit CSV machen könnte, zumindest kurz und vergleichsweise schmerzlos.

"Richtig" würde man die Ausgabe abstrahieren und die Chose modularisieren bzw. bereits existierende Module verwenden. Dann hätte man eine "Methode" (nenn ich's mal so) GetCsvData() und eine Methode PutCsvData() und der Code in unserem Dokument würde sich auf sowas wie
Document doc = new Document(DOCTYPE_XHTML1_STRICT);
DataSource csv = New DataSource("a1.csv", DATASOURCE_CSV); 

doc.Initialize();
doc.Title = "Title";
doc.isStyled = True;
doc.useGenericHeader = True;
doc.addTable(csv.getData(5,DS_GETALLROWS), TABLE_USEPROVIDEDHEADER);
csv.Close();
doc.Terminate();



beschränken können, was dann genau dasselbe macht, aber ohne daß man es dem Quellcode ansieht und wo man nur ein paar Parameter für gänzlich anderes Ergebnisformat verändern muß (sagen wir Textdokument mit Daten aus einer ODBC-Verbindung oder was weiß ich).

Code ist erst dann gut, wenn man ihn praktisch nicht wieder anfassen muß.

Dieser Beitrag wurde von RalphS bearbeitet: 13. Januar 2018 - 00:20

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#26 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 13. Januar 2018 - 07:54

Mir stellte sich der Fall so dar, dass die Seiten in der Firma im Intranet liegen und die Schichtzeiten immer per Hand in die statische HTML Seite hinein edititert wurden. Nun hat der der TE wohl behauptet er könne das einfacher lösen in dem eine aus Excel exportierte CSV Datei (das wird bei dem CSV Format die Quelle sein) in die Seite importiert wird und dadurch automatisch die Seite mit den aktuellen Schichtzeiten erzeugt werden kann.

Wenn dem nicht so ist, so ist eine Verwendung für zuhause auf einem Webserver viel zu umständlich. Denn zuhause könnte man für den Privatgebrauch die CSV Datei einfach wieder in Excel oder LO Calc importieren.

Wie geschrieben, ohne konkrete Zielstellung und Beschreibung des Einsatzumfeldes ist die hier nur Spielerei und Raterei.

Dieser Beitrag wurde von Gispelmob bearbeitet: 13. Januar 2018 - 07:54

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#27 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 13. Januar 2018 - 08:13

Laut Ausgangsbeitrag kriegt er stündlich eine Mail mit der csv-Datei.

Nun will er sich einfach nur die Tabelle angucken, ohne die csv jedes Mal händisch in irgendein Programm importieren zu müssen. Die Idee war, die Mail kommt, csv an einem definierten Ort speichern, Browser öffnen, angucken. Mehr nicht. Möglicherweise hat er sich das mit php nur einfacher vorgestellt, also ohne den ganzen Server-Klimbim, der notwendig ist.

Dieser Beitrag wurde von Holger_N bearbeitet: 13. Januar 2018 - 08:14

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0