PHP zu Excel (CSV) (PHP Fusion 9)
|
Catzenjaeger |
Geschrieben am 21. März 2018 08:42:35
|

|
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 |
Geschrieben am 22. März 2018 14:47:05
|

|
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
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 |
Geschrieben am 22. März 2018 14:54:50
|

|
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 
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 <strong>Hicks</strong><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 />
<strong>Aliens Warrior </strong><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 
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 |
Geschrieben am 22. März 2018 17:35:10
|

|
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 |
Geschrieben am 23. März 2018 10:08:26
|

|
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 |
Geschrieben am 23. März 2018 22:04:19
|

|
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 |
|
|