php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.12.2005, 10:24  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard Array - csv

hallo,

ich habe mittels php ein csv file geöffnet und möchte dieses dann an eine mssql datenbank weitergeben. meine ersten schritte waren, das csv in eine optisch bessere form zu bringen, auch die spaltenbezeichnung habe ich aus der 1. zeile ausgelesen.

mein problem ist nun, dass ich nicht weiss wie ich das array schreiben muss, um z.b. ein insert mit sql zu starten. ich weiss eben nicht, wie ich zusätzlich zur zeile auch die spalte in ein array bekomme bzw. aus dem array auslese. anbei der aktuelle code...

PHP-Code:
<?
$seperator 
";";
$file "test.csv";
$lines file($file);
$numlines count($lines);

//1. Zeile als Spaltenbezeichnung auslesen[0]
$header explode($seperator$lines[0]);

//Anzahl der Spalten
$numh count($header);
$i 0;

//Output formatieren
echo "<table border = 1 cellpadding = 2><tr>";

while(
$i<$numh){
       
$header str_replace("\""""$header);
       echo 
"<td>".$header[$i]."</td>";
       
$i++;
       }

echo 
"</tr>";
$y 1;

while(
$y<$numlines){
       
$x=0;
       echo 
"<TR>";
               while(
$x<$numh){
               
$fields explode($seperator$lines[$y]);
               
$fields str_replace("\""""$fields);
               echo 
"<TD>".$fields[$x]." </TD>";
               
$x++;
                       }
       
$y++;
       echo 
"</TR>";
       }

echo 
"</table>";
?>
vielen dank schon im voraus,

lg schnurzli
schnurzli ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.12.2005, 13:34  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

villeicht muss ich meine frage anders stellen....

wie kann ich die 1. zeile des cvs-files hernehmen als spaltenbezeichnung und damit die darunterleigenden spalten in einem array abbilden?
bsp:

test.csv:

name;telefonnummer;geburtsdatum
name1;telefon1;geb1;
name2;tel2;geb2

und jetzt möchte ich dies mit einem insert in eine sql datenbank spielen.
zb.: tabelle "personen"

das heisst ich möchte in der vorhandenen tabelle personen mit den feldern name, telefonnummer und geburtsdatum aus der csv datei auslesen und in sql speichern.

das heisst ich muss php irgendwie sagen, dass immer der 1. string in jeder zeile in die sql-zeile name kommt. usw....

gibt es da eine lösung?
schnurzli ist offline  
Alt 15.12.2005, 12:29  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Dafür gibts ja die schöne Funktion fgetcsv() (http://de3.php.net/manual/de/function.fgetcsv.php).
Damit kannst du dir die ganze manuelle Aufsplitterei sparen. Der folgende Ausschnitt gibt dir die Daten aus und
schreibt sie gleich auch noch in die DB:
PHP-Code:
// DB-Connect
$seperator ";";
$file "test.csv";

$fh fopen($file'r');
$header fgetcsv($fp1024$seperator'"');
echo 
"<table>\n";                                                             // nur für Ausgabe
echo "<tr><th>" implode('</th><th>' $header) . "</th></tr>\n";   // Ausgage Kopfzeile
$fields implode(', '$header);
while(list(
$name$tel$geb) = fgetcsv($fp1024$seperator'"')){                          // Zeile 10
    
echo "<tr><td>$name</td><td>$tel</td>$geb<td></td></tr>\n";               // Ausgabe Zeilen
    
$sql "INSERT INTO personen ($fields)
              VALUES('$name', '$tel', '" 
implode('-'array_reverse(explode('.'$geb))) . "')";       // Zeile 13
    
mysql_query($sql) or die("Fehler: " mysql_error() . "
$sql
"
;
}
echo 
"</table>\n";                                                            // nur für Ausgabe
fclose($fp); 
Falls nicht immer gleich viele Felder in der CSV-Datei sind, kannst du die Zeilen 10 und 13 durch folgende ersetzen:
PHP-Code:
...
while(
$zeile fgetcsv($fp1024$seperator'"')){   // Zeile 10
...
            
VALUES('" . implode("'', $zeile) . "')";        // Zeile 13 
Allerdings musst du dann allfällige Datumsfelder vorher ins Datenbankformat umwandeln
__________________
Gruss
L
lazydog ist offline  
Alt 15.12.2005, 14:02  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

vielen dank für deine hilfe. ich hbae jetzt ein verständnisproblem...
bei fgetcsv ist ja amende '"' dran - das ist der string enclosure- nur steht im phptu keine genaue beschreibung. was macht dieser enclosure?


der leicht abgeänderte code unten gibt nur den die 1. zeile aus. wie kann ich denn den gesamten datensatz ausgeben? wie erkennt php was header und was die felder sind . der code unterscheidet sich ja nicht
muss ich mir bei den zeilen mit count() in while() weiterhelfen?

PHP-Code:
<?
include ("config.php");
$fp fopen($file'r'); 
$header fgetcsv($fp1024$seperator'"'); 
echo 
implode(' | ' $header);
$fields implode(', '$header); 
while(
$zeile fgetcsv($fp1024$seperator'"')){
echo 
$zeile;

//$sql = ("INSERT INTO hperson ($fields) VALUES();   // Zeile 13 
//mssql_query($sql) or die("database insert failed:" . mssql_error() . "
$sql
"; 

fclose($fp);
?>
schnurzli ist offline  
Alt 15.12.2005, 14:30  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Da $zeile ein Array ist, musst du ihn entsprechend ausgeben, z. B. wie $header. Da muss bei meinem Code natürlich auch noch Zeile 11 angepasst werden:
PHP-Code:
echo "<tr><td>" .  implode('</td><td>'$zeile) . "</td></tr>\n";               // Ausgabe Zeilen 
Und das enclosure ist das Zeichen, in dem Strings eingeschlossen sind (bzw. sein können).
PHP erkennt nicht, was Header ist, und was nicht. Das musst du schon selber steuern. Allerdings steht der Header ja normalerweise in der ersten Zeile.
__________________
Gruss
L
lazydog ist offline  
Alt 16.12.2005, 10:12  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

hi again,

ichkonnte dank deiner ausführlichen hilfe alle probleme die ich gestern hatte lösen.

nun habe ich ein weiteres...

ich möchte in 3 verschiedene tabellen ein insert starten.

also das csv ist wie gehabt - hat 10 spalten.

die ersten 5 spalten möchte ich in die tabelle "person"
die spalte 5-7 möchte ich dann in die tabelle "hobbies"
die restlichen in eine tabelle "optional"

wie kann ich jetzt $fields so aufteilen, dass ich 3 inserts sarten kann.

bisher hatte ich das problem, dass mit

PHP-Code:
INSERT INTO person ($fieldsVALUES('$regtime''$birthdate''$LastName''$FirstName' 
immer ein fehler kam, das die natürlich insert mit value nicht übereinstimmt....
schnurzli ist offline  
Alt 16.12.2005, 10:13  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von schnurzli
wie kann ich jetzt $fields so aufteilen, dass ich 3 inserts sarten kann.
Was steht in $fields? Wenn du drei Einträge in unterschiedlichen Tabellen vornehmen möchtest, musst du auch drei entsprechende INSERT-Abfragen abschicken.
xabbuh ist offline  
Alt 16.12.2005, 10:33  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

in $fields steht die 1. zeile des csv-files. alsodie spaltenbezeichnungen.
das sind in summe 10 stück.

jetzt möchte ichaber 3 INSERT-Abfragen starten. die1. mit den ersten 5 spalten aus der csv,der 2 mit der 6.spalte und die 3. mit demrest....
schnurzli ist offline  
Alt 16.12.2005, 12:28  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von schnurzli
in $fields steht die 1. zeile des csv-files. alsodie spaltenbezeichnungen.
das sind in summe 10 stück.
jetzt möchte ichaber 3 INSERT-Abfragen starten. die1. mit den ersten 5 spalten aus der csv,der 2 mit der 6.spalte und die 3. mit demrest....
Dann greif dir dafür doch einfach über den entsprechenden Schlüssel den Wert des gewünschten Feldes oder benutze array_slice(), um bestimmte Teile aus dem Array zu ziehen.
xabbuh ist offline  
Alt 16.12.2005, 13:50  
Benutzer
 
Registriert seit: 13.07.2005
Beiträge: 47
schnurzli
Standard

also ich habs jetzt mit array_slice probiert. die ausgaba passt aber ich glaube icgrendetwas passt mit der while-schleife nicht überein.

PHP-Code:
include ("config.php");
$fp fopen($file'r'); 
$header fgetcsv($fp1024$seperator'"'); 
echo 
"<table>\n";
echo 
"<tr><th>" implode('</th><th>' $header) . "</th></tr>\n";
//$fields = implode(', ', $header);
$person1 array_slice ($header05);
$hobbies array_slice ($header61);
$optional array_slice ($header73);
while(
$zeile fgetcsv($fp1024$seperator'"')){
echo 
implode(', '$person);
//echo "<tr><td>" .  implode('</td><td>', $zeile) . "</td></tr>\n";
$personen "INSERT INTO person ($person1) VALUES('" implode("','"$zeile) . "')";
mssql_query($personen) or die("database insert failed:" mssql_error() ."");

liegt es an:
PHP-Code:
fgetcsv($fp1024$seperator'"'
in der while schleife? was könnte ich da anders machen?
schnurzli ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
Kategoriedaten rekursiv in Array bringen Schiedsrichter PHP Tipps 2008 2 10.12.2007 15:43
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
erste zeile aus csv in array schreiben, csv 4 spalten in array php, csv spalten array addieren, csv spalten in array, csv spaltenbezeichnungen php, echo \<tr><th>\ . implode(\'</th><th>\' , $header) . \</th></tr>\\n\; // ausgage kopfzeile, php array csv fgetcsv, fgetcsv php in array, while schleife csv, csv erste zeile anders php

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:28 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.