PHP csv auslesen und mysql werte zuordnen

suggus

Cadet 1st Year
Registriert
Nov. 2013
Beiträge
11
Hallo miteinander,

ich habe ein csv upload script, dass eine csv datei in einen bestimmten ordner läd und ausliesst.
Folgndes bekomme ich aber nicht hin:
ich möchte die erste Zeile der CSV datei auslesen die die Werte der Spalten ausgibt und diese dann den Mysql Tabellenspalten zuordnen
Die Namen in der ersten Zeile der CSV Datei stimmen nicht mit den Spaletennamen der Sql Tabelle überein:
z.B.erste Zeile der CSV Datei: Bild,Kategorie,Benutzer,Preis,Laufzeit
Die Tabellennamen: kid,bild1,sofortpreis,user,time

Nun möchte ich die geuploadete csv Datei auslesen und die Namen in der ersten Zeile, den Tabellennamen der mysql Datenbank zuordnen.
Das sollte dann ungefähr so aussehen:
werte.jpg
Kann mir jemand helfen und mir sagen, wie das geht?
Ich komme einfach nicht weiter :-(

Danke
 
Ich kann aus deinem Post nicht rauslesen, wo genau das Problem liegt. Wie weit bist du denn und was "funktioniert nicht"?
 
Naja, spaltennummer(csv) => spaltennamen(mysql)
dein kleines Mapping und voila, du kannst die csv-file zeile für zeile einlesen und und feld 1 auf spalte x, feld 2 auf spalte y usw.
 
Hallo,

momentan habe ich ein Script, welches eine bestimmte Spaltenanzahl in der csv Datei voraussetzt und diese dann ausliesst.
ich müsste es jedoch so umschreiben, dass man eine beliebige CSV Datei mit beliebigen Spaltennamen hochladen kann (Das geht), diese CSV Datei dann ausliesst (erste Spalte) und ich via Formular die Spalten in der CSV Datei den Spalten in der Mysql Tabelle zuordnen kann.
Das bekomme ich nicht hin :-(Das Script müsste wie im Bildbeispiel die Spalten untereinander in einem Formular ausgeben und man müsste dann dann auswählen können welche mysql tabellenspalte für die jeweilige CSV Spalte zuständig ist.
werte.jpg
Ich habe schon tagelang gegoogelt, konnte aber nichts finden, was mir weiter hilft :-(
Ergänzung ()

Tion1392 schrieb:
Naja, spaltennummer(csv) => spaltennamen(mysql)
dein kleines Mapping und voila, du kannst die csv-file zeile für zeile einlesen und und feld 1 auf spalte x, feld 2 auf spalte y usw.
Da ist genau das Problem:
Ich weiss nicht wie ich das machen kann, da ich vorher nicht weiss, wie die CSV Datei aufgebaut ist.
a.) hat jede CSV Datei eine andere Spaltenanzahl
b.) Hat jede CSV Datei ein anderes Trennzeichen
c.) Hat jede CSV Datei andere Spaltennamen

Ich müsste also das Trennzeichen angeben können und dann den Spaltennamen der mysql Tabellenspalte zuordnen.
Wäre wirklich froh wenn mir hier jemand helfen könnte
 
Zuletzt bearbeitet:
Du brauchst nicht die erste Spalte von der CSV-Datei sondern die erste Zeile. Kann mir nicht vorstellen, dass du zum php csv parsen nichts gefunden hast. Das mit dem Trennzeichen ist schon eher ein Problem, das musst du entweder den Benutzer angeben lassen, oder du probierst die gängigsten durch.

Dann brauchst du eine assoziative Liste, in die du einmal die Spalten von der Tabelle reinschreibst und diese dann mit den Benutzereingaben verknüpfst, also das von Tion angesprochene mapping. Zu solche Listen gibt's auch haufenweise Tutorials.
 
Auf der Startseite gehts los mit Datei hochladen. Dann wird die erste Zeile mit den Spaltennamen eingelesen und diese kann man auf der zweiten Seite den mysql-Spaltennamen zuordnen. Anschließend auf Weiter klicken und der Rest der Datei wird eingelesen und Entsprechend der Zuordnung in die Datenbank gespeichert.

So würde ich es mir jetzt grob vorstellen.
 
Hmm, also wenn die Reihenfolge stimmt, kannst du auch einfach die erste Zeile ignorieren und mit insert into blub values(?,?,?,?,?...) einfügen.

Sonst: Du musst halt zwei Formulare machen, das Erste lädt hoch und das Zweite fragt dann, wie du das zuordnen willst. Sollte machbar sein.
Code:
move_uploaded_file(...,"/tmp/this_session/...");
$f=fopen("/tmp/this_session/...","rb");
$csv_fields=fgetcsv($f,...);

$sql_fields=$db->query("select Name from Schema...");

foreach($sql_fields as $val){
echo "<select Name=...>"
foreach($csv_fields as $v2){
echo "<option>...";
}
}
echo "<Input type="hidden" Name="file" value="path">";// /!\ XSS
Und dann beim zweiten Schritt
Code:
$f=fopen("/tmp/this_session/...","rb");
$csv_fields=fgetcsv($f,...);//Header

$prep=$b->prepare("insert...");
while($data=fgetcsv()){
Shuffle($_POST,$data);
$prep->execute($data);
}
unlink("/tmp/this_session");
 
nkler schrieb:
Auf der Startseite gehts los mit Datei hochladen. Dann wird die erste Zeile mit den Spaltennamen eingelesen und diese kann man auf der zweiten Seite den mysql-Spaltennamen zuordnen. Anschließend auf Weiter klicken und der Rest der Datei wird eingelesen und Entsprechend der Zuordnung in die Datenbank gespeichert.

So würde ich es mir jetzt grob vorstellen.
Ja, so sollte es ein, jedoch muss ich das Trennzeichen im Formular noch angeben können.
Ich weiss nicht mehr weiter.
Mein Hirn qualmt und ich bekomme es nicht hin.
Ergänzung ()

Hancock schrieb:
Hmm, also wenn die Reihenfolge stimmt, kannst du auch einfach die erste Zeile ignorieren und mit insert into blub values(?,?,?,?,?...) einfügen.

Sonst: Du musst halt zwei Formulare machen, das Erste lädt hoch und das Zweite fragt dann, wie du das zuordnen willst. Sollte machbar sein.
Code:
move_uploaded_file(...,"/tmp/this_session/...");
$f=fopen("/tmp/this_session/...","rb");
$csv_fields=fgetcsv($f,...);

$sql_fields=$db->query("select Name from Schema...");

foreach($sql_fields as $val){
echo "<select Name=...>"
foreach($csv_fields as $v2){
echo "<option>...";
}
}
echo "<Input type="hidden" Name="file" value="path">";// /!\ XSS
Und dann beim zweiten Schritt
Code:
$f=fopen("/tmp/this_session/...","rb");
$csv_fields=fgetcsv($f,...);//Header

$prep=$b->prepare("insert...");
while($data=fgetcsv()){
Shuffle($_POST,$data);
$prep->execute($data);
}
unlink("/tmp/this_session");

ein Forular, welches die CSV Datei hochläd hab ich schon, nur weiss ich nicht wie ich die erste Zeile auslesen und den mysql Spalten zuordnen kann
 
Zuletzt bearbeitet:
Für das Trennzeichen nimmst du ein einfaches Textfeld.
Den Rest hat die Hancock schon mal vorgekaut. Es hängt jetzt von deinen Fähigkeiten in PHP und MySql (PDO) ab.
 
Darlis schrieb:
Für das Trennzeichen nimmst du ein einfaches Textfeld.
Den Rest hat die Hancock schon mal vorgekaut. Es hängt jetzt von deinen Fähigkeiten in PHP und MySql (PDO) ab.

Naja, genau da ist ja das Problem, meine Fähigkeiten in PHP und MySql sind nicht so prickelnd :-(
Ich weiss, es ist für Profis sicherlich mühsam sich hier hinein zu versetzen, aber es wäre wirklich wichtig für mich, ich kann es nur nicht ;-(
 
Zuletzt bearbeitet:
Also, ich werd's dir nicht ausprogrammieren. Dateiverarbeitung must du googlen, falls das nicht sitzt.
http://php.net/manual/de/function.fgetcsv.php Damit lässt sich ein CSV gut einlesen (und schnell^^).
Für MySQL empfehl ich PDO.
Datenbankverbindung aufbauen:
$db=new PDO("mysql:host=localhost;dbname=blub","user","Password");

Prepared Statement (Pflicht!):
$prep=$db->prepare("insert into tabl(a,b,c)values(?,?,?)");

Prepared Statement Platzhalter an Werte binden:
$prep->bindValue($index,$wert);

Prepared Statement ausführen:
$prep->execute();

Und jetzt alles zusammensetzten:
Code:
$db=new PDO("mysql:host=localhost;dbname=blub","user","Password");
$prep=$db->prepare("insert into table(a,b,c)values(?,?,?)");
$f=fopen("pfad","rb");
fgetcsv($f);//erste Zeile egal, da bekannt
while($data=fgetcsv($f,0,",","'","\\")){
foreach($data as $i=>$val){
$prep->bindValue($_POST["field"][$i],$val);
}
$prep->execute();
}
fclose($f);
Dieses Script setzt voraus, dass du $_POST["field"] richtig befüllst. Das heißt, dass du ein Formular mit
HTML:
<form method="post">
Feld 1: <select Name="field[]">
<Option id="1">a</Option>
<Option id="2">b</Option>
<Option id="3">c</Option>
...
</select>
...
</form>
hast, sodass bei bindValue die richtigen Werte an der Richtigen Position landen.
 
Hallo Hancock,

danke für Deine Mühe, aber ich verstehe nicht wie ich jetzt die Daten der CSV datei in die Linke Spalte und die der mysql Datenbanktabelle in die Rechte Spalte bekomme um diese dort zuzuordnen.
Könntest Du mir das bitte etwas genauer erklären?
Steh absolut auf dem Schlauch.
 
Das hat nix mit PHP oder MySQL zu tun, sondern nur etwas mit HTML.

Das kannst du organisieren, wie du willst, aber ich empfehle dir dort eine Tabelle, linkes Feld: CSV-Name, rechtes Feld: <select Name="Feld[]"> mit allen SQL-Spalten (value="" entsprechend durchnummeriert).

In PHP passiert die Zuordnung dann (aufgrund der Auswahl des Nutzers) bei dem bindValue. Da wird das i-te Feld an die vom Nutzer gewählte Stelle gebunden. (Das kann dann z.B. ein Fehler geben, wenn jemand nicht alle MySQL-Felder auswählt.)

Falls es noch nicht ganz klar ist: Ablaufprotokoll

<form> mit <Input type="file">, um die Datei hochzuladen
upload.php speichert die Datei (move_uploaded_file) und holt die CSV und MySQL-Spaltennamen und generiert die Zuordnungstabelle
<form> mit der Zuordnungstabelle wird vom Nutzer bearbeitet
Import.php nutzt die Zuordnungstabelle (bei bindValue), um die Daten einzufügen und die Datei zu löschen.
 
Hancock schrieb:
Das hat nix mit PHP oder MySQL zu tun, sondern nur etwas mit HTML.

Das kannst du organisieren, wie du willst, aber ich empfehle dir dort eine Tabelle, linkes Feld: CSV-Name, rechtes Feld: <select Name="Feld[]"> mit allen SQL-Spalten (value="" entsprechend durchnummeriert).

In PHP passiert die Zuordnung dann (aufgrund der Auswahl des Nutzers) bei dem bindValue. Da wird das i-te Feld an die vom Nutzer gewählte Stelle gebunden. (Das kann dann z.B. ein Fehler geben, wenn jemand nicht alle MySQL-Felder auswählt.)

Falls es noch nicht ganz klar ist: Ablaufprotokoll

<form> mit <Input type="file">, um die Datei hochzuladen
upload.php speichert die Datei (move_uploaded_file) und holt die CSV und MySQL-Spaltennamen und generiert die Zuordnungstabelle
<form> mit der Zuordnungstabelle wird vom Nutzer bearbeitet
Import.php nutzt die Zuordnungstabelle (bei bindValue), um die Daten einzufügen und die Datei zu löschen.

Hallo Hancock,

vielen, lieben Dank für Deine Erklärung, aber ganz ehrlich: ich kapiers nicht *heul
Vielleicht sollte ich noch weiter googeln, in der Hoffnung das ich etwas finde.
Ich danke Dir für Deine Geduld :-)
Ergänzung ()

Hallo :(
Ist denn niemand da, der mir das erklären kann?
Ich habe wenig bis gar keine Ahnung davon
ein Upload Script habe ich ja schon, die csv Datei wird in einem Odner auf dem Webspace abgelegt.
Das Trennzeichen weiss ich vor dem Upload auch, ich müsste also ein Auswahlfeld haben, damit ich nach dem Upload das Trennzeichen bestimmen kann.
Dann brauche ich ein Formular, welches mir in der linken wo ich in der linken Spalte die mysql Tabellennamen angebe und in der rechten Spalte müsste jeweils ein dropdown Menu sein, mit dem ich dann die Tabellenspalte der CSV dtei zuweisen kann.
Bitte helft mir. Ich habe nicht die geringste Ahnung was ich da machen soll oder kann.
Danke
 
Machs dir doch nicht unnötig schwer.
Lass den User die Spalten-Zuordnung machen BEVOR er das erste Mal hochlädt. Gib ihm eine Liste der Felder, die du erwartest und er schreibt zu jedem Feld, in welcher Spalte sich der jeweilige Wert befindet.

Der User weiß doch im Zweifel recht genau, in welcher Spalte z.B. das Bild steht, oder der Benutzername. Im schlimmsten Fall zwingst du ihn, mal kurz die CSV in Excel & Co zu öffnen und die Spalten durchzuzählen. Wie unhandlich... Dafür sparst du dir ein paar Hundert Zeilen Programmlogik.
 
Hancock hat dir ja schon geholfen. Woran es hier fehlt, ist Eigeninitiative.
Wie man ein Textfeld anzeigt, befüllt, per POST abschickt und mit PHP verarbeitet, wird in jedem x-beliebigen Tutorial für HTML/PHP erklärt. Wenn du sogar schon Dateien hochladen kannst, verstehe ich nicht, woran es bei einem billigen Textfeld hapert. Von dir kommt immer "ich kapier das nicht, ich brauche das, macht ihr mal".

Für was ist das denn gedacht? Wenn es für die Schule ist, wirst du nicht drum rumkommen, die Sprachen zu lernen. Wenn es für den Job ist, bezahl' jemanden dafür, dass er das programmiert und wartet, besonders wegen etwaigen Sicherheitslücken.
 
Daaron schrieb:
Machs dir doch nicht unnötig schwer.
Lass den User die Spalten-Zuordnung machen BEVOR er das erste Mal hochlädt. Gib ihm eine Liste der Felder, die du erwartest und er schreibt zu jedem Feld, in welcher Spalte sich der jeweilige Wert befindet.

Der User weiß doch im Zweifel recht genau, in welcher Spalte z.B. das Bild steht, oder der Benutzername. Im schlimmsten Fall zwingst du ihn, mal kurz die CSV in Excel & Co zu öffnen und die Spalten durchzuzählen. Wie unhandlich... Dafür sparst du dir ein paar Hundert Zeilen Programmlogik.

Hallo Daaron,

so wie Du das beschreibst, habe ich es schon.
Das funktioniert auch.
Aber die User beschweren sich.
Sie möchten x-beliebige csv Dateien hochladen und dann zuordnen können.
 
Gut, dann machs mit dem 2-Stufen Import.
1. Schritt HTML
Zuerst einmal die CSV-Datei auf den Server laden.
2. Schritt PHP
Der schaut sich an, was für Felder denn drin sind (steht in der ersten Zeile der CSV-Datei).
2.1 Aus diesen Informationen kannst du deine Zuordnungstabelle generieren.
2.2 Tabelle dem Nutzer zeigen.
3 Schritt HTML
Nutzer wählt an der Tabelle seine Zuordnung aus.
4. Schritt
Mit der Datei aus Schritt 1 und der Info aus Schritt 3 importierst du dir deine Daten und löschst die Datei.

Etwaige Probleme:
1. Du brauchst irgendetwas wie eine Session.
2. Du musst ein Platz auf dem Server haben, wo die Dateien hinkommen, ohne dass es zur Kollision kommt (bspw. mit Sessions).
3. Du musst es irgendwie hinbekommen, dass die Datei auch aufgeräumt wird, wenn der Nutzer einfach zwischendrin die Lust verliert (z.B. mit eine Cronjob).

Wenn ich mir dein erstes Bild anschaue, dann musst du natürlich die gesamte Zuordnungslogik invertieren (also nicht jede CSV-Spalte hat eine Tabellenspalte sondern jede Tabellenspalte hat eine CSV-Spalte).

Ein Dropdown-Menü ist ein <select> Feld in HTML.
Das Trennzeichen kannst du dir mit einem <Input type="text"> übergeben lassen.
(Btw: Kannst du HTML?)

Ach, wenn du uns zeigst, was du hast (Code!), dann helfen wir dir lieber. Je konkreter, desto besser.
 
Hier der Code, der aber leider nach den Feldtypen die vorgegeben sind ausliest, was ich ja gerade NICHT will :heul::
PHP:
if (!isset ($_POST['edit']))
          {
            $dir = "./member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."";
            if ($handle = opendir($dir))
            {

        /* Verzeichnis nach csv Datei dursuchen. */
              while (false !== ($file = readdir($handle)))
              {
                if ($file != "." && $file != "..")
                {
                  if (substr($file, - 3) == "csv")
                  {
                    $datei = $file;
                  }
                }
              }
              closedir($handle);
            }
        //Wenn CSV datei vorhanden
            if (isset ($datei))
            {
              $Zeilen = 1;
              $Dateizeiger = fopen("member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."/".$datei."", "r");
              $bild_error = "";
              while (($Daten = fgetcsv($Dateizeiger, 100000, ";")) !== FALSE)
              {
                $Zeilen++;
                $reihe = $Zeilen - 1;
        //Anzeigenart ermitteln
                if ($reihe == 1)
                {
                  $anzeigenart = ucwords(substr($Daten[0], 4));
                  $_SESSION['anzeigenart'] = $anzeigenart;
        //anzeigenart für Datenbankeintrag
                  $anzeigenart_db = strtolower($anzeigenart);
                }
        //Kategorien ermitteln
                if ($reihe == 2)
                {
                  $kategorien = explode("(", $Daten[0]);
                  $kategoriename = str_replace("Kategorie:", "", $kategorien['0']);
                  $_SESSION['katname'] = $kategoriename;
                  $kategorie_db = str_replace(")", "", $kategorien[1]);
                  $kategorienids = explode("~", str_replace(")", "", $kategorien[1]));
                  if ($kategorienids[0] == "")
                  {
                    $kategorienids = str_replace(")", "", $kategorien[1]);
                    $kat1 = $kategorienids;$_SESSION['kat1']=$kat1;;
                  }
                  else
                  {
                    $kat1 = $kategorienids[0];$_SESSION['kat1']=$kat1;
                    $kat2 = $kategorienids[1];
                    $kat3 = $kategorienids[2];
                  }
                }
                if ($reihe == 4)
                {
                  $anzeige_normal = array();
                  $anzeige_details = array();
                  $AnzahlDerFelder = count($Daten);
                  for ($i = 0; $i < $AnzahlDerFelder; $i++)
                  {
                    if (substr($Daten[$i], - 1) == ".")
                    {
                      $anzdetails = explode(" [", trim($Daten[$i]));
                      $anzeige_details[$i] = $anzdetails[0];

                    }
                    if (substr($Daten[$i], - 1) != ".")
                    {
                      $anz = explode(" [", trim($Daten[$i]));
                      $anzeige_normal[$i] = $anz[0];
                    }
                  }
                }
                if ($reihe > 4)
                {
                  if ($Daten[3] != "" && substr($Daten[3], 0, 4) != "http")
                  {
        //Sonderzeichen,Leerzeichen und Umlaute ersetzen
                    $bild = preg_replace("/[^a-zA-Z0-9._-]/", "_", $Daten[3]);
   
                    if (!file_exists("member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."/".$bild.""))
                    {
                      $bild_error .= "Bild ".$Daten[3]." konnte nicht gefunden werden.<br> ";
                    }
                  }
                  else
                  {
                    $bild = "";
                  }

                  $query = "INSERT into nd_csvanzeigen_".$_SESSION['userid']." (id) values ('$reihe')";
                  mysql_query($query, $db);
                  $query = "INSERT into nd_csvbilder_".$_SESSION['userid']." (anzid) values ('$reihe')";
                  mysql_query($query, $db);
        //Daten werden in csvanzeigen_[$_SESSION['userid']] geladen
                  $AnzahlDerFelder = count($anzeige_normal);
                  for ($i = 0; $i < $AnzahlDerFelder; $i++)
                  {
                    $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET ".$anzeige_normal[$i]."='".$Daten[$i]."' WHERE id='".$reihe."'";
                    mysql_query($sql, $db);
                    if ($anzeige_normal[$i] == "laufzeit")
                    {
                      $gueltig = $Daten[$i] * 86400;
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET gueltig='".($cfg['time'] + $gueltig)."' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                    if ($anzeige_normal[$i] == "start_preis")
                    {
                      $start_preis = str_replace(",", ".", $Daten[$i]);
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET start_preis='".$start_preis."' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                    if ($anzeige_normal[$i] == "mindestpreis")
                    {
                      $mindestpreis = str_replace(",", ".", $Daten[$i]);
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET mindestpreis='".$mindestpreis."' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                    if ($anzeige_normal[$i] == "sofort_preis")
                    {
                      $sofort_preis = str_replace(",", ".", $Daten[$i]);
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET sofort_preis='".$sofort_preis."' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                    if ($anzeige_normal[$i] == "versand_preis")
                    {
                      $versand_preis = str_replace(",", ".", $Daten[$i]);
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET versand_preis='".$versand_preis."' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                    if ($anzeige_normal[$i] == "beschreibung" && $config['html_editor'] == "ja")
                    {
                      $Daten[$i] = nl2br($Daten[$i]);
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET beschreibung='".$Daten[$i]."' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                    if ($anzeige_normal[$i] == "bild" && $Daten[$i] != '' && file_exists("member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."/".$Daten[$i].""))
                    {
                      $sql = "UPDATE nd_csvbilder_".$_SESSION['userid']." SET bild1='".$Daten[$i]."' WHERE anzid='".$reihe."'";
                      mysql_query($sql, $db);
                      $sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET bild_anzahl='1' WHERE id='".$reihe."'";
                      mysql_query($sql, $db);
                    }
                  }
 
Also zuerst:
Code:
while(read){
if(1)do1();
elseif(2)do2();
elseif(3)do3();
}
ist ein sogenanntes Antipattern. Schreib es doch so, wie es ist.
Code:
read()
do1();
read();
do2();
...

Ach ja: Du weißt, was eine SQL-Injection ist?

Wenn ich mir dein Code so anschau: Kann es sein, dass du gar keine klassische CSV-Datei hast?
Zeile 1-4 enthält ja scheinbar irgendwelche Daten, die gar nicht nach Schema F laufen. (Zeile 3 ist leer?)

Könntest du uns mal eine Beispiel-CSV-Datei zeigen?

Hier mal eine Umsortierte Version deines Scripts
PHP:
<?php if (!isset ($_POST['edit']))
{
	$dir = "./member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."";
	if ($handle = opendir($dir))
	{

		/* Verzeichnis nach csv Datei dursuchen. */
		while (false !== ($file = readdir($handle)))
		{
			if ($file != "." && $file != "..")
			{
				if (substr($file, - 3) == "csv")
				{
					$datei = $file;
					break;//Speeds up computation
				}
			}
		}
		closedir($handle);
	}
	//Wenn CSV datei vorhanden
	if (isset ($datei))
	{
		$Dateizeiger = fopen("member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."/".$datei."", "r");
		$bild_error = "";
		//Zeile 1
		$Daten = fgetcsv($Dateizeiger, 100000, ";");
		$anzeigenart = ucwords(substr($Daten[0], 4));
		$_SESSION['anzeigenart'] = $anzeigenart;
		//anzeigenart für Datenbankeintrag
		$anzeigenart_db = strtolower($anzeigenart);
		//Zeile 2
		$Daten = fgetcsv($Dateizeiger, 100000, ";");
		$kategorien = explode("(", $Daten[0]);
		$kategoriename = str_replace("Kategorie:", "", $kategorien['0']);
		$_SESSION['katname'] = $kategoriename;
		$kategorie_db = str_replace(")", "", $kategorien[1]);
		$kategorienids = explode("~", str_replace(")", "", $kategorien[1]));
		if ($kategorienids[0] == "")
		{
			$kategorienids = str_replace(")", "", $kategorien[1]);
			$kat1 = $kategorienids;$_SESSION['kat1']=$kat1;;
		}
		else
		{
			$kat1 = $kategorienids[0];$_SESSION['kat1']=$kat1;
			$kat2 = $kategorienids[1];
			$kat3 = $kategorienids[2];
		}
		//Zeile 3
		$Daten = fgetcsv($Dateizeiger, 100000, ";");
		//Zeile 4
		$Daten = fgetcsv($Dateizeiger, 100000, ";");
		$anzeige_normal = array();
		$anzeige_details = array();
		for ($i = 0; $i < count($Daten); $i++)
		{
			if (substr($Daten[$i], - 1) == ".")
			{
				$anzdetails = explode(" [", trim($Daten[$i]));
				$anzeige_details[$i] = $anzdetails[0];

			}
			//if (substr($Daten[$i], - 1) != ".")
			else
			{
				$anz = explode(" [", trim($Daten[$i]));
				$anzeige_normal[$i] = $anz[0];
			}
		}
		for($Zeilen=5;($Daten = fgetcsv($Dateizeiger, 100000, ";"))!==false;$Zeilen++)
		{
			/* Was machst du mit den Informationen, die du hier bekommst?
			if ($Daten[3] != "" && substr($Daten[3], 0, 4) != "http")
			{
				//Sonderzeichen,Leerzeichen und Umlaute ersetzen
				$bild = preg_replace("/[^a-zA-Z0-9._-]/", "_", $Daten[3]);
				
				if (!file_exists("member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."/".$bild.""))
				{
					$bild_error .= "Bild ".$Daten[3]." konnte nicht gefunden werden.<br> ";
				}
			}
			else
			{
				$bild = "";
			}*/
			$query = "INSERT into nd_csvanzeigen_".$_SESSION['userid']." (id) values ('$Zeilen')";
			mysql_query($query, $db);
			$query = "INSERT into nd_csvbilder_".$_SESSION['userid']." (anzid) values ('$Zeilen')";
			mysql_query($query, $db);
			//Daten werden in csvanzeigen_[$_SESSION['userid']] geladen
			for ($i = 0; $i < count($anzeige_normal); $i++)//Ignoriere alle Spalten, die nicht angegeben sind
			{
				$sql = "UPDATE nd_csvanzeigen_".$_SESSION['userid']." SET ".$anzeige_normal[$i]."='".$Daten[$i]."'";
				$sqlend=" WHERE id='".$Zeilen."'";
				mysql_query($sql, $db);
				if ($anzeige_normal[$i] == "laufzeit")
				{
					$gueltig = $Daten[$i] * 86400;
					$sql .= ",gueltig='".($cfg['time'] + $gueltig)."'";
				}
				if ($anzeige_normal[$i] == "start_preis")
				{
					$start_preis = str_replace(",", ".", $Daten[$i]);
					$sql .= ",start_preis='".$start_preis."'";
				}
				if ($anzeige_normal[$i] == "mindestpreis")
				{
					$mindestpreis = str_replace(",", ".", $Daten[$i]);
					$sql .= ",mindestpreis='".$mindestpreis."'";
				}
				if ($anzeige_normal[$i] == "sofort_preis")
				{
					$sofort_preis = str_replace(",", ".", $Daten[$i]);
					$sql .= ",sofort_preis='".$sofort_preis."'";
				}
				if ($anzeige_normal[$i] == "versand_preis")
				{
					$versand_preis = str_replace(",", ".", $Daten[$i]);
					$sql .= ",versand_preis='".$versand_preis."'";
				}
				if ($anzeige_normal[$i] == "beschreibung" && $config['html_editor'] == "ja")
				{
					$Daten[$i] = nl2br($Daten[$i]);
					$sql .= ",beschreibung='".$Daten[$i]."'";
				}
				if ($anzeige_normal[$i] == "bild" && $Daten[$i] != '' && file_exists("member/csvupload/".$_SESSION['userid']."_".$_SESSION['username']."/".$Daten[$i].""))
				{
					$sql = "UPDATE nd_csvbilder_".$_SESSION['userid']." SET bild1='".$Daten[$i]."' WHERE anzid='".$Zeilen."'";
					mysql_query($sql, $db);
					$sql .= ",bild_anzahl='1'";
				}
				mysql_query($sql.$sqlend, $db);
			}
		}
	}
}
 

Ähnliche Themen

Zurück
Oben