SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 03.11.2013, 19:36:48
suggus suggus ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 55
Beiträge: 5
csv upload mit Zuweisung

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 wie im angehängten Bild aussehen.

Kann mir jemand helfen und mir sagen, wie das geht?


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.
Da ist 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
Miniaturansicht angehängter Grafiken
werte.jpg  
Mit Zitat antworten
  #2  
Alt 04.11.2013, 13:42:26
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: csv upload mit Zuweisung

Hallo

Dein Problem ist etwas komplexer und kein "mal eben so " Problem. Also hier nur ein paar Ansätze:

Du hast Tabellen mit unterschiedlicher Spaltenanzahl, musst also erst mal die Tabelle bestimmen, in die Importiert werden soll und dort die Spaltenbezeichnung herausfinden.
Vorschlag, Beleg ein Array $spaltenname mit den entsprechenden Werten. z:B.

1 Array mit Spaltennamen belegen
$tabelle = 'DEIN_TABELLEN_NAME';
$db_name = 'DEINE_DATENBANK';

$spaltenname[0] = "kid";
$spaltenname[1] = "bild1";
$spaltenname[2] = "sofortpreis";
u.s.w

PHP-Code:
function get_field_names($sql)
{
   
$ergebnis = array();
   if(!
stristr($sql,"LIMIT"))
   {
        
$sql .= ' LIMIT 1';
   }

   
$result mysql_query($sql);

   for(
$r 0$r mysql_num_fields($result); $r++)
   {
         
$ergebnis[$r] = mysql_field_name($result,$r);
   }
   return 
$ergebnis;
}

$sql 'SELECT * FROM `'.$tabelle.'`';
$spaltenname get_field_names($sql); // Tebellen Spaltenbezeichnungen 
Die Funktion erledigt das für dich.

Ich habe mir für meinen Import etwas einfallen lassen um ihn flexibel zu machen. Ich belege eine Varaible $_SESSION['reihenfolge'] mit der Reihenfolge der Spalten, wie die CSV-Elemente eingefügt werden sollen. Das erspart dir die Namenszuordnung und du brauchst nur die Reihenfolge der Werte zu verändern.
z.B.
PHP-Code:
$_SESSION['reihenfolge'] = '1,3,2,7,4,5,6'
Liest die Spalten der CSV-Datei in der Reihenfolge Spalte1, Spalte3, Spalte2, Spalte7 u.s.w.
Ein kleines Tool erlaubt es mir mit Drag und Drop diese Reihenfolge beliebig zu verändern.

3. Nun die CSV-Datei einlesen und den sql-Befehl erstellen.
Ich persönlich bevorzuge den file() Befehl um die CSV-Datei zu lesen, da ich die Länge der längsten Zeile nicht wissen muss. fgetcsv ist aber natürlich für solche Aktionen vorgesehen. Trennzeichen kann man in Varaiablen Ablegen.

PHP-Code:
$trennzeichen ';';
// Dieser Teil ist wohl immer gleich, nur die Werte werden sich ändern
// also alles Gleiche in eine Variable packen
$sql_prefix 'INSERT INTO `'.$db_name.'`.`'.$tabelle.'` (';
        
for(
$s 0$s count($spaltenname]); $s++)
{
   
$sql_prefix.= '`'.$spaltenname[$s].'`';

    if(
$s count($spaltenname) -1)
    {
        
$sql_prefix.= ', ';
    }
}
$sql_prefix.= ') VALUES (';

//
// CSV-Datei lesen und Spalten zuordnen
//
$file_zeile file('DEINE_CSV_DATEI'); // ARRAY der CSV-Datei Zeilen
$felder explode(',',$_SESSION['reihenfolge']); // Reihenfolge der Spalten

for($z=0$z count($file_zeile); $z++)
{
   
$sql $sql_prefix;
   
$pieces explode($trennzeichen,$file_zeile[$z]); // CSV-Zeile zerlegen

   // diesen Teil könnte man natürlich auch anders gestalten
   
for($a 0$a count($felder); $a++)
   {
      
$sql .= '\''.mysql_real_escape_string($pieces[$felder[$a]]).'\'';
      if(
$a count($felder) -1)
      {
          
$sql.= ', ';
      }
    }
    
$sql .= ');'// SQL-Statement ist nun fertig zum Abarbeiten
    // Ein echo $sql sollte zuerst mal die korrekte Syntax anzeigen
    
echo $sql."<br>";
    
// ist alles richtig, dann query......
    // mysql_query($sql);

Ein grober Überblick sollte damit gegeben sein, natürlich kann man das alles noch verfeinern und vereinfachen.
Ich mache z.B. bei sehr grossen Dateien eine Kontrolle der max_execution_time, befülle fehlende Tabellenfelder mit NULL, wenn Spalten in der CSV-Datei fehlen,, habe utf8-decode() und utf8_encode() Schaltbar gemacht, wähle Trennzeichen aus einem Dropdown aus etc.....


Viel Erfolg.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
  #3  
Alt 04.11.2013, 15:19:10
suggus suggus ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 55
Beiträge: 5
AW: csv upload mit Zuweisung

Hallo Sys :-)

Vielen, vielen Dank für Deine Hilfe.
Problem:
Ich komme damit nicht zurecht.
Ich habe sehr wenig Ahnung von php und csv
Deshalb meine konkrete Frage:

Könntest Du mir genau zeigen wie ich es schreiben muss?
Verbindung zur Datenbank besteht
Datenbanktabelle: op_ins
CSV Datei: usercsv.csv

Die csv Datei muss ausgelesen werden (Beliebig viele Zeilen vorhanden)
und ich muss die spalten der csv Datei den Spalten der mysql Tabelle zuordnen können
Das sollte, wie im Bild gezeigt per dropdown gehen.

Ich habe schon so viel ausprobiert, aber ich bekomme es nicht hin.

Du musst dir das so vorstellen:
Der User läd eine csv datei auf den server, diese wird im Ordner gespeichert.
Die CSV Dateien der User haben unterschiedliche Spaltenanzahlen, unterschiedliche Trennzeilen und unterschiedliche Spaltennamen (Zum Teil auch keine Spaltennamen)
Nun muss ich es irgendwie hinbekommen, dass der User seine Spalteneinträge aus der CSV Datei bestimmten Tabellennamen in der SQL Datenbanktabelle zuordnen kann.
Vorher sollte er noch sein Trennzeichen angeben können.

Wenn das Script dann weiss, welche Spalte aus den Zeilen für welchen mysql Eintrag verwendet werden soll, kann ich weiter arbeiten.

Kannst Du mir da helfen?
Würde auch dafür bezahlen, denn ich weiss nicht weiter ;-(
Gerne können wir auch einmal telefonieren....
Mit Zitat antworten
  #4  
Alt 04.11.2013, 16:04:44
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: csv upload mit Zuweisung

Hi,

je nachdem wie groß die Datei ist, ist
PHP-Code:
file('DEINE_CSV_DATEI'); 
nicht die beste Lösung.

Ich gehe wie folgt vor:
1. Spaltennamen aus MySQL auslesen
2. Erste Zeile aus der CSV einlesen und Benutzer zeigen
3. Nach normalen Feldtrenner, Feld eingeschlossen von und Zeilentrenner prüfen
4. Sollte die Anzahl der aus 1. und 3. identisch sein Tabelle erstellen mit Dropdowns
5. Benutzer kann Parameter aus 3. anpassen sofern Ergebnis nicht richtig
6. Benutzer kann aus der daraus erstellten Tabelle per Dropdown(Inhalte aus 1.) neu organisieren
7. Speichern als Importfilter
8. Cron macht Import per LOAD DATA anhand von Importfilter

MfG

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #5  
Alt 04.11.2013, 16:15:34
suggus suggus ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 55
Beiträge: 5
AW: csv upload mit Zuweisung

;-)
Danke, könntest du mir zeigen wie das geht?
Mit Zitat antworten
  #6  
Alt 05.11.2013, 09:52:15
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: csv upload mit Zuweisung

Hi,

Zitat:
Danke, könntest du mir zeigen wie das geht?
Ich kann dir tips geben und dir dabei helfen das daraus entstehende
zum laufen zu bringen, aber nen fertiges Script wirst du nicht bekommen ;)

Wir wissen nicht:
wo du das einbaust (Framework, CMS etc)
was du kannst (PHP, MySQL etc)
ob du das lernen willst oder ob es nur um das eine Script geht

Hier erstmal Tips:

Tip zu 1.
Code:
SHOW COLUMNS FROM DeinTabellenName
Tip zu 2.
link fgets oder link fgetcsv

Weiter gehts wenn wir dazu was sehen ;)

Zitat:
Würde auch dafür bezahlen, denn ich weiss nicht weiter ;-(
Es gibt wohl einige anlaufstellen wo du daraus einen Auftrag machen kannst, aber
glaub mir der Preis für sowas wird dir nicht gefallen ;)

MfG

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #7  
Alt 05.11.2013, 10:47:43
suggus suggus ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 55
Beiträge: 5
AW: csv upload mit Zuweisung

Hallo Ckaos,

1. Spaltennamen aus MySQL auslesen (das möchte ich nicht, ich möchte die Spalten vorgeben im Script
2. Erste Zeile aus der CSV einlesen und Benutzer zeigen (müsste sein)
3. Nach normalen Feldtrenner, Feld eingeschlossen von und Zeilentrenner prüfen
4. Sollte die Anzahl der aus 1. und 3. identisch sein Tabelle erstellen mit Dropdowns (das funktioniert nicht, weil manche Nutzer mehr und andere weniger Felder in der csv Datei haben)
5. Benutzer kann Parameter aus 3. anpassen sofern Ergebnis nicht richtig
6. Benutzer kann aus der daraus erstellten Tabelle per Dropdown(Inhalte aus 1.) neu organisieren
7. Speichern als Importfilter

Cron möchte ich auch nicht, da der Nutzer seine Datei hochläd und die eingetragenen Dateien sofort sichtbar sind
Mit Zitat antworten
  #8  
Alt 05.11.2013, 10:50:10
suggus suggus ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 55
Beiträge: 5
AW: csv upload mit Zuweisung

Zitat:
Zitat von suggus Beitrag anzeigen
Hallo Ckaos,

1. Spaltennamen aus MySQL auslesen (das möchte ich nicht, ich möchte die Spalten vorgeben im Script
2. Erste Zeile aus der CSV einlesen und Benutzer zeigen (müsste sein)
3. Nach normalen Feldtrenner, Feld eingeschlossen von und Zeilentrenner prüfen
4. Sollte die Anzahl der aus 1. und 3. identisch sein Tabelle erstellen mit Dropdowns (das funktioniert nicht, weil manche Nutzer mehr und andere weniger Felder in der csv Datei haben)
5. Benutzer kann Parameter aus 3. anpassen sofern Ergebnis nicht richtig
6. Benutzer kann aus der daraus erstellten Tabelle per Dropdown(Inhalte aus 1.) neu organisieren
7. Speichern als Importfilter

Cron möchte ich auch nicht, da der Nutzer seine Datei hochläd und die eingetragenen Dateien sofort sichtbar sind
Wieviel glaubst Du, würde mich das kosten?
Ein Upload Script habe ich. Ich bräuchte nun nur noch eine Zuweisung
Also ich gebe beispielsweise in der linken Spalte vor:
Kategorie
Preis
Bild
und rechts soll dann jeweils ein dropdownfeld zum auswählen, der Spalte in der CSV sein
Mit Zitat antworten
  #9  
Alt 05.11.2013, 19:40:00
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: csv upload mit Zuweisung

Zitat:
Zitat von suggus Beitrag anzeigen
Wieviel glaubst Du, würde mich das kosten?
Rechne doch einfach nach: der Stundensatz eines einfachen Programmierers fängt bei 50€/h an.
Zitat:
Ein Upload Script habe ich. Ich bräuchte nun nur noch eine Zuweisung
Nein, weil das ein Witz ist. Es muß grundsätzlich unterteilt werden, welches Script welche Tabelle füttern darf.
Zitat:
Also ich gebe beispielsweise in der linken Spalte vor:
1. suggus muß erst mal lernen, wie Pflichten- und Lastenheft für ein Projekt auszusehen haben.
Mit Zitat antworten
Antwort

Stichworte
csv mysql zuordnung


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem bei Upload script resident PHP Grundlagen 3 27.06.2011 20:18:29
File Upload Problem wegen upload_tmp_dir Hillkorn PHP für Fortgeschrittene und Experten 14 14.02.2007 16:51:34
Upload CrAnE PHP für Fortgeschrittene und Experten 0 12.05.2004 15:09:45
Bild per upload aktualisieren jojomo PHP Grundlagen 0 21.11.2003 17:44:13
ebenfalls Probleme mit Upload - woran kann's liegen? daknuet PHP für Fortgeschrittene und Experten 1 18.09.2002 16:01:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:32:27 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt