Export MySQL nach CSV mit PHP 7.x Script - Tabelle bleibt leer

  • Hallo zusammen,


    ich lese schon seit geraumer Zeit mit und hole mir hi und da auch Tipps und Tricks ab - vielen Dank an die Mitglieder !:):thumbup:


    Nun habe ein Problem bei meinem Script das eine einfache MySQL DB auslesen soll und in eine CSV Datei schreiben soll. Die DB wird ordendlich geöffnet und die Datei wird erstellt. Auch enthält die Datei die Überschriften. Es werden jedoch nicht die Tabelleninhalte ausgegeben bzw. hier bleibt das csv File leer. Wenn ich die MySQL Tabelle direkt aus dem myadmin Portal exportiere, bekomme ich das csv File mit den Tabelleninhalten.


    Das Problem tritt nun auf, nachdem ich von PHP 4.x auf PHP 7.x umgestellt habe. Unter PHP 4.x lief es, habe es auch mit PHP 5.6 ohne Erfolg versucht. Ich starte das Script über den internen Bereich auf einer Webseite.


    Fällt jemand was dazu ein?


    Vielen Dank

    Herbert


    PHP Version: 7.3

    Perl Version: 5.20

    MySQL Version: 5.7

    Webseite: https://www.freizeitsport.prokulus.de


    Ich habe mal beide Exporte in das turmlauf.zip File gepacht.


    Hier das Script, eigentlich nix besonderes:


    **********************************************************************************************


    <?php


    $DatabaseHost = "localhost";

    $DatabaseUser = "xxxxxx";

    $DatabasePassword = "xxxxxx";

    $Database = "xxxxxx";

    $Table = "turmlauf";


    header('Content-Type: text/x-csv');

    header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');

    header('Content-Disposition: attachment; filename=turmlauf.csv');

    header('Pragma: no-cache');


    $conn = mysqli_connect( 'localhost', 'xxxxxx', 'xxxxxx', 'xxxxxx' );

    if( !$conn ) {

    echo "Couldn't connect to database!<BR>";

    }


    $ResultPointer = mysqli_query($conn, "SELECT Name, Vorname, Datenschutz, Verein, Jahrgang, Geschlecht, Klasse, Wettkampf, Email, Notiz FROM $Table");


    echo "ID;Name;Vorname;Datenschutz,Verein;Jahrgang;Geschlecht;Klasse;Wettkampf;Email;Notiz"."\r\n";


    for($i=0, $Export=""; $i<mysqli_num_rows($ResultPointer); $i++)


    {


    $Daten = mysqli_fetch_object($ResultPointer);


    $Spalte[] = str_replace("\"", "\"\"", $Daten->Name);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Vorname);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Datenschutz);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Verein);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Jahrgang);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Geschlecht);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Klasse);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Wettkampf);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Email);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->Notiz);


    for($j=0; $j<count($Spalte); $j++)

    {

    $Export .= "\"" . $Spalte[$j] . "\"";

    if($j!=count($Spalte)-1)

    {

    $Export .= ";";

    }

    }

    $Export .= "\r\n";

    $Spalte = "";

    }


    echo$Export;


    ?>

  • du meinst so:

    ************************************************


    $ResultPointer = mysqli_query($conn, "SELECT name, vorname, datenschutz, verein, jahrgang, geschlecht, klasse, wettkampf, email, notiz FROM $Table");


    echo "Name;Vorname;Datenschutz,Verein;Jahrgang;Geschlecht;Klasse;Wettkampf;Email;Notiz"."\r\n";


    for($i=0, $Export=""; $i<mysqli_num_rows($ResultPointer); $i++)


    {


    $Daten = mysqli_fetch_object($ResultPointer);


    $Spalte[] = str_replace("\"", "\"\"", $Daten->name);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->vorname);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->datenschutz);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->verein);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->jahrgang);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->geschlecht);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->klasse);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->wettkampf);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->email);

    $Spalte[] = str_replace("\"", "\"\"", $Daten->notiz);


    for($j=0; $j<count($Spalte); $j++)

    {

    $Export .= "\"" . $Spalte[$j] . "\"";

    if($j!=count($Spalte)-1)

    {

    $Export .= ";";

    }

    }

    $Export .= "\r\n";

    $Spalte = "";

    }


    echo $Export;


    ?>

    ************************************************************

    macht keinen Unterschied.

  • Ja... Schade!

    Da müsste ich mich jetzt erst wieder einarbeiten und selber testen! Vielleicht weiß jemand anderes mehr?

    Kannst den Code hier übrigens auch mittels des entsprechenden Editor-Icons als PHP-Code und Spoiler einfügen. Dann wird er übersichtlicher dargestellt.

  • Ich habe das mal lokal mit Xampp und PHP 7.2 getestet. In der csv-Datei erscheint korrekt die Überschriften-Zeile und dann folgende Fehlermeldung:


    Uncaught Error: [] operator not supported for strings (Zeile 29)


    Also bezogen auf: $Spalte[] =


    Wie genau schaut denn deine DB-Tabelle aus. Kannst du davon mal Bilder posten, damit ich das exakt gleich einstellen kann!

  • Der Fehler passiert erst beim zweiten Durchlauf der Schleife. Am Ende der Schleife sagst du:



    $Spalte = "";


    Dann wird aus $Spalte ein String (vorher war es ein Array).


    Ersetze

    $Spalte = "";

    durch

    $Spalte = array ();


    Dann hast du wieder ein leeres Array.


    Oder besser stelle die Zuweisung

    $Spalte = array ();

    an den Anfang der Schleife.