Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Automatisches Importscript für einen Onlineshop

Frage Entwicklung PHP

Mitglied: illy79

illy79 (Level 1) - Jetzt verbinden

07.01.2012 um 15:34 Uhr, 5790 Aufrufe, 11 Kommentare

Wäre es möglich ein php Script zu schreiben das aus CSV Dateien einen Import in einen XTC Modified macht

Hallo,

erstmal ein frohes neues Jarh allen.

es geht darum das Script sollte sich aus 5 CSV Dateien herunterladen, in eine Importdatei wandeln und dabei diverse Preise berechnen und dann per cron regelmäßig ausgeführt werden.

Ist dies überhaupt machbar?

Greetz illy
Mitglied: nxclass
08.01.2012 um 13:57 Uhr
Ist dies überhaupt machbar?
sicher - so einfach wie Kuchen essen
Bitte warten ..
Mitglied: illy79
09.01.2012 um 07:21 Uhr
Hi,

na jetzt ist mir alles klar, wenn ich schon Probleme mit dem Kuchen essen habe

Würdest Du mir dabei helfen? Leider habe ich gar keine Ahnung vom php.

Greetz illy
Bitte warten ..
Mitglied: nxclass
09.01.2012 um 09:12 Uhr
Würdest Du mir dabei helfen?
sicher

Leider habe ich gar keine Ahnung vom php
das solltest Du aber jetzt ändern, da so ein Import Script gewartet werden muss. Da ich dein XTC auch nicht kenne "kann ich Dir auch nur die Richtung zeigen ... durchgehen musst Du alleine"

Mal ein paar Tipps:
Die Datenbank (MySQL ? ) ist ein sehr mächtiges Werkzeug - wenn immer möglich solltest Du die Daten in eine temporäre Tabelle einlesen und den Rest von der DB erledigen lassen.
Das einlesen der CVS Dateien kann ebenfalls aus der DB erfolgen, muss dann nur von PHP aus angestoßen werden.

Oder: aus PHP mit ftp_get() mit fgetcsv() oder file_get_contents() die Dateien vom FTP Server holen.
Bitte warten ..
Mitglied: illy79
09.01.2012 um 12:28 Uhr
erstmal Danke das mir helfen willst. PHP kenne ich micht nicht aus weil ich nur gelernter KFZ-Mech bin, aber denke ich verstehe Programme anhand des Codes komischerweise recht schnell und gut

zu den Daten XTC Modified Shop, MySQL Datenbank.

Würde sagen fangen wir erstmal von vorne an csv Dateien liegen auf einem http Server. Gibts ftp_get auch als http Version?

Das mit dem Einlesen in eine seperate DB erspart auch noch viel Arbeit
Bitte warten ..
Mitglied: nxclass
09.01.2012 um 13:18 Uhr
Gibts ftp_get auch als http Version?
da kannst du file_get_contents() benutzen - und einfach die URL angeben.
01.
<?php 
02.
$data = file_get_contents('http://server.de/datei.csv'); 
03.
 
04.
// debug 
05.
echo $data;
Einlesen in eine seperate DB
Wenn dann gleich in die Datenbank der XTC Anwendung - Temp. Tabellen sind nur für die Session der MySql Verbindung im Speicher präsent, und man kann dann mit einer SQL Anweisung die Berechnungen durchführen und die Daten aktualisieren.
Bitte warten ..
Mitglied: illy79
09.01.2012 um 19:27 Uhr
Aha. Ok und die Daten muss man zwischenspeichern oder kann man die Ausgabe direkt in die Datenbank geben? Wäre es vielleicht besser erst die Dateien zwischenzuspeichern? Teilweise sind Sie 95 MB groß und wenn es dann zwischenzeitlich abbricht?
Bitte warten ..
Mitglied: nxclass
10.01.2012 um 09:55 Uhr
besser erst die Dateien zwischenzuspeichern?
die temp. Tabelle besteht nur solange wie das Script läuft ( je Session ) - d.h. wenn beim füllen und einlesen der Daten ein Fehler passiert ist diese temp. Tabelle eh weg.

Sollte dann beim Import der Daten in die Tabellen des XTC ein Fehler auftreten, muss ein rollback gemacht werden.
Sollte der Datenbankserver beim Import abstürzen sollte der Server Admin Hintern verkloppt werden.
Bitte warten ..
Mitglied: illy79
10.01.2012 um 10:46 Uhr
hmm. eigentlich wollte ich nach dem Script ein Importscript starten, oder meinst Du wir kriegen das hin direkt Artikel in die Datenbank neu anlegen?

01.
<?php  
02.
$data = file_get_contents('http://haendler.csv');  
03.
 
04.
explode(";", data$) 
05.
echo "Teil1:";$data[1];"       Teil2:";$data[2];"        Teil3:";$data[3];"       Teil4:";$data[4]; 
06.
 
07.
// debug 
Hab mal versucht die Eingabe zu splitten. Ist dies so richtig?
Bitte warten ..
Mitglied: nxclass
10.01.2012 um 14:21 Uhr
versucht die Eingabe zu splitten
Ich würde die CSV Datei auf dem MySql Server ablegen - file_put_contents() - und dann mit dem SQL Befehl LOAD DATA INFILE ( http://dev.mysql.com/doc/refman/5.0/en/load-data.html ) in eine vorher erstellte Temporäre Tabelle ( http://dev.mysql.com/doc/refman/5.1/de/create-table.html ) laden.
Dazu musst du den Inhalt der CSV Datei kennen (Namen und Position der Felder) und deren enclosure und escape Zeichen

zum "manuellen" einlesen einer CSV Datei würde ich fgetcsv() ( http://php.net/manual/en/function.fgetcsv.php ) benutzen.

EDIT: ggf. hab ich heute Abend mal etwas Zeit Dir ein Beispiel Code zu bauen
Bitte warten ..
Mitglied: nxclass
22.01.2012 um 13:21 Uhr
gut das Du die PM geschrieben hast, hatte es völlig vergessen - nun mal etwas Code für Dich zu lesen:
01.
<?php 
02.
 
03.
define('PATH_CSV_IMPORT', '.'); 
04.
// anhand der CSV Daten festlegen 
05.
define('CSV_DELIMITER', "\t"); 
06.
define('CSV_ENCLOSURE', '"'); 
07.
 
08.
/** 
09.
 * Enter description here ... 
10.
 */ 
11.
class Your_Library_Import 
12.
13.
	/** 
14.
	 * Enter description here ... 
15.
	 * @var PDO 
16.
	 */ 
17.
	private $_db; 
18.
	 
19.
	/** 
20.
	 * Enter description here ... 
21.
	 * @throws Exception 
22.
	 */ 
23.
	public function __construct() 
24.
25.
		try  { 
26.
			$this->_db = new PDO('mysql:dbname=xtc;host=127.0.0.1', 'user', 'password'); 
27.
		} catch(PDOException $e) { 
28.
			throw new Exception('konnte nicht mit der Datenbank verbinden', null, $e); 
29.
30.
		 
31.
		try { 
32.
			$this->_createTempTable() 
33.
				 ->_readCsv( PATH_CSV_IMPORT.PATH_SEPARATOR.'deineDatei.csv' ) 
34.
			 	 ->_transferData(); 
35.
		} catch (Exception $e) { 
36.
			throw new Exception('Fehler beim Importvorgang', null, $e); 
37.
38.
39.
	 
40.
	/** 
41.
	 * Enter description here ... 
42.
	 * @throws Exception 
43.
	 * @return Your_Library_Import 
44.
	 */ 
45.
	private function _createTempTable() 
46.
47.
		$sql = <<<__SQL__ 
48.
CREATE TEMPORARY TABLE IF NOT EXISTS `__tempTable` ( 
49.
/*  hier deine Spalten definitionen anhand der CSV Datei angeben */ 
50.
51.
__SQL__; 
52.
		if (!$this->_db->exec( $sql )) { 
53.
			throw new Exception( 'Fehler beim erstellen der temp. Tabelle'."\n".print_r($this->_db->errorInfo(),true), null, $e ); 
54.
55.
		return $this; 
56.
57.
	 
58.
	/** 
59.
	 * Enter description here ... 
60.
	 * @param string $filename		Pfad und Dateiname der CSV Datei 
61.
	 * @throws Exception 
62.
	 * @return Your_Library_Import 
63.
	 */ 
64.
	private function _readCsv( $filename ) 
65.
66.
		if (!file_exists($filename) || !is_readable($filename)) { 
67.
			throw new Exception('Datei ('.$filename.') existiert nicht oder ist nicht lesbar'); 
68.
69.
		 
70.
		if ($handle = fopen($filename, 'r')) { 
71.
			$sql = <<<__SQL__ 
72.
INSERT INTO `__tempTable` ( /* deine Spaltennamen */ ) VALUES ( ?, ?, ? /* etc */) 
73.
__SQL__; 
74.
			try { 
75.
				$statement = $this->_db->prepare( $sql ); 
76.
			} catch (PDOException $e) { 
77.
				throw new Exception( 'Fehler beim INSERT prepare'."\n".print_r($this->_db->errorInfo(),true), null, $e); 
78.
79.
			while ($dataRow = fgetcsv($handle, null, CSV_DELIMITER, CSV_ENCLOSURE)) { 
80.
				/* ggf noch die Daten aufbereiten damit diese zum INSERT Befehl passen */ 
81.
				if (!$statement->execute( $dataRow )) { 
82.
					throw new Exception('Fehler beim INSERT'."\n".print_r($this->_db->errorInfo(),true)); 
83.
84.
85.
86.
		 
87.
		return $this; 
88.
89.
	 
90.
	/** 
91.
	 * Enter description here ... 
92.
	 * @throws Exception 
93.
	 * @return Your_Library_Import 
94.
	 */ 
95.
	private function _transferData() 
96.
97.
		$sql = <<<__SQL__ 
98.
/* Deine SQL Anweisungen um die Daten aus der temp Tabelle in die Live-Daten-Tabellen zu übertragen */  
99.
__SQL__; 
100.
		try { 
101.
			$this->_db->exec($sql); 
102.
		} catch (PDOException $e) { 
103.
			throw new Exception('Fehler beim Importvorgang'."\n".print_r($this->_db->errorInfo(),true), null, $e); 
104.
105.
		return $this; 
106.
107.
}
Für mehr Details was die SQL Anfragen angeht, musst Du mal mehr Informationen zu deinen CSV Dateien und den Zieltabellen bereitstellen.
Bitte warten ..
Mitglied: illy79
22.01.2012 um 17:32 Uhr
Diese 5 Dateien habe ich von Händler zum Download. Leider gibts es keine fertige Datei.

1 Artikelnummer / Bestand / Artikel UVP ink. MwSt ) / Artikel-Shoppreis Ink. MwSt.
2 Artikelnummer / EAN CODE / Artikel Überschrift / Artikel Kurzbeschreibung / Artikel-Langbeschreibung / Artikel Bild 1 / Artikel Bild 2...
3 Artikelnummer / EAN CODE / Artikel Überschrift / Artikel Kurzbeschreibung / Artikel-Langbeschreibung / Artikel Kategorie
4 Artikelnummer / EAN CODE / Artikel Fahrzeughersteller Zuordnung / Artikel Fahrzeugmodell Zuordnung
5 ArtNr/EAN/Händler Einkaufspreis A-netto/Händler Einkaufspreis-B-netto

Die sind per Semikolon getrennt heißen preisliste1.csv - bis preisliste5.csv, den Link darf ich nicht posten, wegen Vereinbarung vom Händler.
Kann man auch einen http Pfad auf einem Server vom Händler benutzen damit man nicht downloaden muss?

Allerdings sollte man noch einen VK Preis aus Einkaufspreis A oder B netto kalkulieren können.
A oder B hängt vom Umsatz aus den ich hoffentlich machen werde. Kalkulation sollte mehrere anpassbare Stufen haben, z.B:
< 50 - EK+20€ + 40%
< 100 - EK+50€ + 30%
< 300 - EK+70€ + 20 %
< 500 - EK+100€ + 10%
größer 500 - EK+150€ + 5%

Das Originalscript vom Shop habe ich Dir per PM zugesendet. Kann man damit was anfangen?
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Netzwerk
Automatisches IP Setup für verschiedene (Wlan-)Netzwerke (4)

Frage von mraudi zum Thema Windows Netzwerk ...

Microsoft Office
Excel ein automatisches Inhaltsverzeichnis wie in Word? (3)

Frage von Server4Alle zum Thema Microsoft Office ...

Windows Server
gelöst RODC automatisches Update von cached passwords? (4)

Frage von Braintester zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...