Thread Verfasser: Catzenjaeger
Thread ID: 1440
Thread Info
Es gibt 6 Beiträge zu diesem Thema, und es wurde 3531 Mal angesehen.
 Thema drucken
PHP zu Excel (CSV) (PHP Fusion 9)
Catzenjaeger
Hola ... auf meiner seite hatte ich immer dem user die Möglichkeit gegeben bestimmte daten nach excel zu exportieren.
seit einem Core Update geht es nicht mehr und ich weiss nicht warum

ich weiss die DB abfrage ist sicher nicht mehr zeitgemäss . ich benutzte PHP Fusion 9 !!!!

kann da mal ejmand schauen und mir hier helfen? das wäre klasse danke

hier mein Script was wie gesagt bis zum core update auch ging ... ich denke ma kann es sicher besser machen


<?php
/***************************************************************************
 *   mycollection.php for FIGURELIB                                        *
 *                                                                         *
 *   Copyright (C) 2016 Catzenjaeger                                       *
 *   www.AlienCollectors.com                                               *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 ***************************************************************************/
require_once file_exists('maincore.php') ? 'maincore.php' : __DIR__."/../../maincore.php";
include INFUSIONS."figurelib/infusion_db.php";
//require_once THEMES."templates/header.php";
//require_once INCLUDES."infusions_include.php";
//require_once INFUSIONS."figurelib/_functions.inc.php";


define("csv_delimeter", ";"); // Trennzeichen
define("db_user", "xxxxxxxxxx"); // Username
define("db_password", "xxxxxxxxxx");  // Passwort
define("db_server", "xxxxxxxxxx");  // Host
define("db_db_name", "xxxxxxxxxxx");  // Name der Datenbank
 
 
mysql_connect(db_server, db_user, db_password) or die(mysql_error());
mysql_select_db(db_db_name) or die(mysql_error());

// Datenbankabrfrage.
      
                        $sql = "SELECT
                           
                           tbc.figure_cat_name                      as 'Category Name',
                           tb.figure_title                         as 'Figure Name',
                           tb.figure_variant                         as 'Variant',
                           tb.figure_series                         as 'Series',   
                           tbm.figure_manufacturer_name                as 'Manufacturer',
                           tb.figure_artists                         as 'Artists/Sculper',   
                           tb.figure_retailprice                      as 'Retailprice',
                           tb.figure_usedprice                      as 'Usedprice',
                           tbb.figure_brand_name                      as 'Brand',
                           tbs.figure_scale_name                      as 'Scale',
                           tb.figure_weight                         as 'Weight',
                           tbheight.figure_measurements_inch             as 'Height',
                           tbwidth.figure_measurements_inch             as 'Width',
                           tbdepth.figure_measurements_inch             as 'Depth',
                           tbmat.figure_material_name                   as 'Material',
                           tbpoa.figure_poa_name                       as 'Points of articulation (POA)',
                           tbpack.figure_packaging_name                 as 'Packagaing',
                           tb.figure_status                         as 'Releasestatus',
                           tb.figure_pubdate                        as 'Releasedate',
                           tbl.figure_limitation_name                      as 'Limitation',
                           tb.figure_editionsize                     as 'Editionssize',
                           tb.figure_accessories                      as 'Accessories',
                           tb.figure_description                      as 'Description'
                        FROM ".DB_FIGURE_ITEMS." tb
                        LEFT JOIN ".DB_USERS." tbu ON tb.figure_submitter=tbu.user_id
                        INNER JOIN ".DB_FIGURE_USERFIGURES." fuf ON fuf.figure_userfigures_figure_id=tb.figure_id
                        INNER JOIN ".DB_FIGURE_LIMITATIONS." tbl ON tb.figure_limitation=tbl.figure_limitation_id
                        INNER JOIN ".DB_FIGURE_CATS." tbc ON tb.figure_cat=tbc.figure_cat_id
                        INNER JOIN ".DB_FIGURE_MANUFACTURERS." tbm ON tbm.figure_manufacturer_id = tb.figure_manufacturer
                        INNER JOIN ".DB_FIGURE_MATERIALS." tbmat ON tbmat.figure_material_id = tb.figure_material
                        INNER JOIN ".DB_FIGURE_PACKAGINGS." tbpack ON tbpack.figure_packaging_id = tb.figure_packaging
                        INNER JOIN ".DB_FIGURE_BRANDS." tbb ON tbb.figure_brand_id = tb.figure_brand
                        INNER JOIN ".DB_FIGURE_MEASUREMENTS." tbheight ON tbheight.figure_measurements_id = tb.figure_height
                        INNER JOIN ".DB_FIGURE_MEASUREMENTS." tbwidth ON tbwidth.figure_measurements_id = tb.figure_width
                        INNER JOIN ".DB_FIGURE_MEASUREMENTS." tbdepth ON tbdepth.figure_measurements_id = tb.figure_depth
                        INNER JOIN ".DB_FIGURE_POAS." tbpoa ON tbpoa.figure_poa_id = tb.figure_poa
                        INNER JOIN ".DB_FIGURE_SCALES." tbs ON tbs.figure_scale_id = tb.figure_scale
                        ".(multilang_table("FI") ? "WHERE figure_language='".LANGUAGE."' AND" : "WHERE")." tb.figure_freigabe='1' AND ".groupaccess("tb.figure_visibility")."
                        AND figure_userfigures_user_id='".$userdata['user_id']."'
                        
                        ";   
/*                                                
figure_measurements
figure_country
*/                                 

// Umwandlung zum Windows-Charset                 
function convertToWindowsCharset($string) {
  $charset =  mb_detect_encoding(
    $string,
    "UTF-8, ISO-8859-1, ISO-8859-15",
    true
);
 
$string =  mb_convert_encoding($string, "Windows-1252", $charset);
  return $string;
}
                 
$result = mysql_query($sql) or die(mysql_error());

$result_row = array();
while ( $array_result = mysql_fetch_assoc($result) )
    {
       if ( empty($result_row) )
      {
        $result_row[] = "";
        $row_data = array();
        $index = count($result_row)-1; // Index holen
                   
        foreach ( array_keys($array_result) as $key_name )
          {
             $row_data[] .= "\"" . $key_name . "\"";
          }
                  $result_row[$index] = implode(csv_delimeter, $row_data);
                    unset($row_data);
      }
               
                $result_row[] = "";
                $row_data = array();
                $index = count($result_row)-1;
                foreach ( $array_result as $key => $value )
                {
                  $row_data[] .= "\"" . $value . "\"";
                }
                $result_row[$index] = implode(csv_delimeter, $row_data);
                unset($row_data);
    }

header('Content-Type: text/x-csv');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
//Hier wird die Datei zum Download angeboten. Dateiname kann frei gewählt werden!
header('Content-Disposition: attachment; filename=MyCollection.csv');
header('Pragma: no-cache');

echo implode(PHP_EOL, $result_row);

?>
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Befindet sich die verwendete Datenbank-Tabelle in einer anderen Datenbank? Falls nein, warum werden trotz include der maincore.php nochmals die Zugangsdaten zur DB festgelegt und danach erneut eine Verbindung zur DB aufgebaut?

Die Funktionen mysql_connect, mysql_select_db, mysql_query und mysql_fetch_assoc sind in aktuellen PHP-Versionen nicht mehr vorhanden.

Ich gehe mal davon aus, dass die Tabelle in der gleichen Datenbank vorhanden ist, in die auch PHP-Fusion installiert wurde.
Daher kann folgender Codeabschnitt komplett raus:

define("db_user", "xxxxxxxxxx"); // Username
define("db_password", "xxxxxxxxxx");  // Passwort
define("db_server", "xxxxxxxxxx");  // Host
define("db_db_name", "xxxxxxxxxxx");  // Name der Datenbank 

mysql_connect(db_server, db_user, db_password) or die(mysql_error());
mysql_select_db(db_db_name) or die(mysql_error());
Die maincore.php lädt nämlich autom.die config.php mit und stellt bereits eine Verbindung zur Datenbank her.

Die Zeile

$result = mysql_query($sql) or die(mysql_error());
änderst du in

$result = dbquery($sql);

Zum Schluss änderst du noch die Zeile

while ( $array_result = mysql_fetch_assoc($result) )
so ab:

while ( $array_result = dbarray($result) )

Ungetestet, sollte aber so zumindest schon mal funktionieren. Allerdings wäre der Code der while-Schleife noch optimierbar.

Falls sich die hier verwendete Datenbak-Tabelle aber in einer anderen Datenbank befindet, muss der erste Codeabschnitt umgebaut werden, entfällt also nicht. Hier müsste parallel eine zusätzl. Datenbak-Verbindung zur bereits bestehenden (da ja die maincore.php included ist) hergestellt werden und am Ende dieses Scriptes separat geschlossen werden. Einfacher wäre in dem Fall, die Tabelle einfach umzulegen in die gleiche Datenbank.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Catzenjaeger
Du bist mein held des Tages ... funzt wieder einwandfrei .. ich hatte das mit der DB auch in verdacht und hatte das fast so wie du allerings fehlten da einige zeichen Smile
aber jetzt schnurrt es weider coollllllllll dickes Danke!!!

was mich aber stört .. in den feldern Beschreibung usw wird der text als beispiel in excel so ausgegeben:

Zitat

&lt;strong&gt;Hicks&lt;/strong&gt;<br />
- new version of Hicks<br />
- brand new aggressive combat headsculpt<br />
- helmet<br />
- headset<br />
- pulse rifle<br />
- shotgun, <br />
- motion detector<br />
- shoulder lamp<br />
- welding torch and more.<br />
<br />
&lt;strong&gt;Aliens Warrior &lt;/strong&gt;<br />
- exclusive “shotgunned” head reflecting the shotgun blast damage he takes in combat with Hicks


und da du ja echt vom fach bist wie es scheint .. wie könnte ich unten als letzte Zeile einen summenzeile einfügen um zB den wert auszugeben .. ich weiss kann man aja auch in excel dann machen aber ich will den user schon alles zur hand geben Smile

PS and ei Amdins hier: beim bearbeiten ider text kaum lesbar da sehr hell und grau ... kann man das nicht ändern?
Bearbeitet von Catzenjaeger am 22. März 2018 15:10:31
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Um die HTML-Tags loszuwerden kannst du einfach die Funktion "strip_tags()" einsetzen.
Vor die Zeile

$string =  mb_convert_encoding($string, "Windows-1252", $charset);
setzt du einfach noch folgende Zeile ein

$string = strip_tags($string);

Das andere Problem mit der Summen-Auswertung ist mir jetzt zu komplex.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Catzenjaeger
Hallo,

wie bekomme ich so etwas weg im execl? --> Aliens – 7″ Action Figure – 2pk das sollte so heissen --> Aliens – 7? Action Figure – 2pk (? = Gänsefüsschen)
Bearbeitet von Catzenjaeger am 23. März 2018 10:44:12
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Ich weiß zwar nicht, in welchem Zeichensatz die umzuwandelnden Daten vorliegen, aber du könntest versuchsweise die neu eingefügte Zeile so ergänzen:

$string = utf8_decode(strip_tags($string));
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Springe ins Forum: