Wer mehr als eine Handvoll Produkte im Internet anbietet, hat viel Aufwand für das Einstellen und Pflegen seiner Produkte in einer Shop-Software wie zum Beispiel OS-Commerce. Stellen Sie sich vor, Sie müssen einige Tausend Produkte über ein Eingabeformular eintragen – das kann schon mal einen Monat dauern…
Wenn man die Produktdaten zum Beispiel von seinem Lieferanten auch als Excel-Tabelle bekommen kann, ist es recht einfach, alle Produkte auf einen Rutsch in die Shop-Datenbank zu importieren. Deshalb soll hier ein einfaches Beispiel gezeigt werden: Die Produkttabelle des Shops heißt „produkte“ und hat die Felder „produkt_name“, „produkt _nummer“, „produkt_preis“ und „produkt _bild“.
In der Excel-Tabelle gibt es die vier Spalten „Bezeichnung“, „Artikelnummer“, „Preis“ und „Bild“. Aus dieser Excel-Tabelle wird eine .csv-Datei mit dem Semikolon als Trennzeichen erzeugt.
Das nachstehende Import-Programm enthält deutliche Kommentare, die die Funktion erläutern. Es zeigt zunächst ein Eingabeformular, in dem man eine CSV-Produktdatei zum Import öffnen und mit einer Checkbox festlegen kann, ob die darin enthaltenen Produkte zu den schon im Shop vorhandenen hinzu importiert werden sollen, oder ob die schon im Shop vorhandenen Produkte vorher gelöscht werden sollen.
Das Programm ist nur ein Muster, aber es zeigt gut, wie so ein Produktimport aufgebaut werden muss. Für den Gebrauch in Ihrem System müssen die Datenbank und die Tabellen- und Feldnamen angepasst oder erweitert werden. In größeren Shopsystemen werden die Produktdaten meist auch in mehreren Tabellen, und nicht nur in einer wie in diesem Beispiel verwaltet. Zum Einstieg in die Problematik des Produktimports in einen Shop ist das Programm aber gut geeignet.
// Datenbankverbindung öffnen
if($db = mysql_connect(“localhost”, ‘benutzer’, ‘passwort’)) { echo “Mit Datenbank meinshop verbunden!”;}
mysql_select_db(‘zaehler’,$db);
// Es wurde eine Produktdatei hochgeladen
if (isset($_FILES['datei']['name'])) {
echo “<br/>Die hochgeladenen Produkte:<br/><br/>”;
move_uploaded_file($_FILES['datei']['tmp_name'], “produkte.csv”);
$fp = @ fopen(“produkte.csv”, “r”);
// Daten-Tabelle zur Übersicht
echo “<table border=’0′>”;
$anz=0;
$anzneu=0;
$anzupdate=0;
// Produkt-Tabelle vorher leeren
if (isset($_POST["leer"])) {
$sqlleer=”delete from produkte”;
if (mysql_query($sqlleer)) {
echo “Alle Produkte gelöscht<br /><br />”;
}
}
// Durch alle Zeilen der Importdatei
while(!feof($fp)) {
If ($anz==0) {
// Erste Zeile enthält Spaltenbezeichnungen
$anz=$anz+1;
$zeile = fgets($fp,1000);
$felder = explode(“;”, $zeile);
echo “<tr><td>”.$felder[0].”</td<td>”.$felder[1].”</td<td>“;
echo $felder[2].”</td<td>”.$felder[3].“</td></tr>”;
} Else {
// Folgezeilen enthalten Produkte
$anz=$anz+1;
$zeile = fgets($fp,1000);
$felder = explode(“;”, $zeile);
echo “<tr><td>”.$felder[0].”</td<td>”.$felder[1].”</td<td>“;
echo $felder[2].”</td<td>”.$felder[3].“</td></tr>”;
// NEUEINTRAG
$mbezeichnung=$felder[0];
$martikel=$felder[1];
$mpreis=$felder[2];
$mbild=$felder[3];
// Produkt in Datenbank eintragen
$sqlneu=”insert into dmi_bilder (bezeichnung,artikelnummer,preis,bild) values (‘”.$mbezeichnung.”‘,’”.$martikel.”‘,”.$mpreis.“,‘“.$mbild.”‘)”;
mysql_query($sqlneu))
}
}
echo “</table>”;
fclose($fp);
$anz=$anz-1;
$anzalle=$anzupdate + $anzneu;
echo “<br/><br/>”.$anzneu.” Produkte neu eingetragen!<br/>”;
} else {
//Startformular
?>
<br/><b>Import von Produkten</b><br/><br/>
<form enctype=”multipart/form-data” action=”" method=”post”>
<br/><br/>Laden Sie die aktuelle Produkt-Datei hoch:<br/><br/>
<input name=”datei” type=”file” />
<br /><br /><inputtype=”checkbox” name=”leer”>
Produkttabelle vorher leeren<br/><br/>
<input value=”Produkt-Datei hochladen” />
</form>
}


Hi,
wenn man nicht unbedingt codieren will oder ein bischen flexibler
sein möchte, dann könnte eventuell dbTube.org helfen.
Gruß
Martin
Hallo Martin,
hier geht es ja mehr darum zu lernen, wie man so etwas grundsätzlich machen kann. Wer nicht zum Lernen daran geht, sondern um eine einzelne Aufgabe dieser Art zu lösen, könnte in der Tat mit einer fertigen Lösung schneller zum Ziel kommen. Es passiert aber auch häufig, das die “schnelle Lösung” vom Downloadserver für den gewünschten Zweck nicht vollständig geeignet ist. Wenn man dann den fremden (und meist schlecht oder gar nicht dokumentierten) Code analysieren und die notwendigen Anpassungen machen muss, kann das auch deutlich aufwändiger werden als wenn man es von vornherein selbst nach den eigenen Bedürfnissen programmiert hätte. Das Beispiel zeigt ja, dass es nicht sooo schwierig ist.
cu Klaus