php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 10-09-2010, 21:14
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Question CSV Daten auslesen (PHP) und dann in MySQL speichern

Hallo,

ich versuche schon die ganze Zeit eine CSV Datei in meine MySQL DB einzubetten. Dies möchte ich mit php verwirklichen. Mit " LOAD DATA (LOCAL) INFILE" kann ich immer nur die gesamte CSV Datei importieren, dabei möchte ich bis zu einem bestimmten Codewort den Import ausführen.

Jetzt versuche ich es mit fgetcsv, habe aber Probleme die Daten mit den INSERT INTO Befehlen genau zuzuordnen. Denn immerhin ändert sich ja immer das Datum und der VALUE:

PHP-Code:
/* Inhalt der statistik.csv
01.08.2001#62.159.232.250#www.selfphp3.de
02.08.2001#212.82.34.222#www.selfphp4.de
02.08.2001#http://suchen.abacho.de#62.159.232.250
03.08.2001#http://www.fireball.de#212.185.44.15
*/

$row 1;                                      // Anzahl der Arrays
$handle fopen ("statistik.csv","r");              // Datei zum Lesen öffnen
while ( ($data fgetcsv ($handle1000"#")) !== FALSE ) { // Daten werden aus der Datei
                                               // in ein Array $data gelesen
    
$num count ($data);                      // Felder im Array $data
                                               // werden gezählt
    
    
$row++;                                    // Anzahl der Arrays wird 
        
for ($c=0$c $num$c++) {              // FOR-Schleife, um Felder 
        
print $data[$c] . "<br>\n";            // des Arrays auszugeben
        
$sql="INSERT INTO tbl_basis (datum) VALUES ('$data[$c]')";
    }
        
  
}
fclose ($handle); 
Ich denke, ich mache einen groben Fehler bei der Aufsplittung der csv daten.

P.S. ich habe den Code aus dem Netz und versuche damit zu verstehen, wie csv2SQL funktioniert. Bei dem Beispiel ist nur die Ausgabe in php angedacht und kein Import nach SQL
Mit Zitat antworten
  #2 (permalink)  
Alt 10-09-2010, 21:18
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Die for-Schleife ist vermutlich unsinnig, denn damit würdest du ja für jede Spalte aus der CSV-Datei ein neues INSERT-Statement machen - aber eigentlich willst du doch wohl die Daten aus einer Zeile auch als einen Datensatz einfügen, oder?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 10-09-2010, 21:35
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja, sorry..hab dabei die hälfte vergessen, bzw. weggelassen.

PHP-Code:
$sql="INSERT INTO tbl_basis (datum,ip,url) VALUES ('$data[$c]'...)"
Denn da fängt das Problem auch schon wieder an..wie kann ich einzeln auf die Arrays zugreifen
Mit Zitat antworten
  #4 (permalink)  
Alt 10-09-2010, 21:50
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Das sind Grundlagen - schau ins Handbuch, oder lies ein Tutorial.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 10-09-2010, 22:46
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Das sind Grundlagen - schau ins Handbuch, oder lies ein Tutorial.
eiskalt abgeschmettert. Da traut sich wohl keiner mehr nen Tipp zu lassen. schade.
Ich bin auch eher davon ausgegangen, dass ich mit Explode die Werte aus der csv "zerstückeln" müsste und so einfacher an die Arrays komme.

Geändert von argonsputter (10-09-2010 um 22:49 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 10-09-2010, 23:19
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von argonsputter Beitrag anzeigen
eiskalt abgeschmettert.
Nein - ganz normal darauf hingewiesen, dass du dich ein wenig mit den Grundlagen beschäftigen musst, wenn du sowas umsetzen willst.

Zitat:
Ich bin auch eher davon ausgegangen, dass ich mit Explode die Werte aus der csv "zerstückeln" müsste und so einfacher an die Arrays komme.
Unfug, fgetcsv liefert dir doch bereits ein Array, das für jede Spalte eines Datensatzes ein Element enthält.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 11-09-2010, 11:00
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Die for-Schleife ist vermutlich unsinnig, denn damit würdest du ja für jede Spalte aus der CSV-Datei ein neues INSERT-Statement machen - aber eigentlich willst du doch wohl die Daten aus einer Zeile auch als einen Datensatz einfügen, oder?
Richtig, aber ich muss die Arrays in der For-Schleife hochzählen, um diese im Sql String zu verarbeiten...oder muss ich dies ganz manuell hochzählen?

PHP-Code:
      $sql="INSERT INTO tbl_basis (datum,ip) VALUES ('$data[0]', '$data[1]')";
    
$sqlinsert=mysql_query($sql); 
ich meine so funktioniert es, aber was, wenn die arrays unterschiedlich lang sind? zB. eine Zeile geht bis $data[33] und die andere bis $data[99] ?

Geändert von argonsputter (11-09-2010 um 11:13 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 11-09-2010, 11:18
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Dann ist die CSV-Datei kaputt. Eine Zeile sollte immer gleich viel Werte haben.
Mit Zitat antworten
  #9 (permalink)  
Alt 11-09-2010, 15:08
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Dann ist die CSV-Datei kaputt. Eine Zeile sollte immer gleich viel Werte haben.
ah, ok. Ich bin vom Worst Case ausgegangen.

Ferner habe ich noch eine Frage zu dem Auslesen der CSV. Ich möchte die Daten bis zu einem bestimmten Wert eintragen lassen. Klappt auch soweit mit:

PHP-Code:
/* Inhalt der statistik.csv
01.08.2001#62.159.232.250#www.selfphp3.de
02.08.2001#212.82.34.222#www.selfphp4.de
Stop#Stop#Stop
02.08.2001#http://suchen.abacho.de#62.159.232.250
03.08.2001#http://www.fireball.de#212.185.44.15
*/ 



if ($data[0]!= 'stop')
    {
    
$sql="INSERT INTO tbl_basis (datum,ip) VALUES ('$data[0]', '$data[1]')";
    
$sqlinsert=mysql_query($sql);
    }
    else {
        echo 
"stop gefunden!!"//zum Debuggen
        
echo $data[0];
        break;
    } 
Der Sinn dabei ist, alle Daten nach diesem "Stop" Eintrag in eine andere Tabelle einzutragen. Müsste ich nicht nochmal eine while schleife starten, die eine geändert if abfrage hat..

PHP-Code:
if ($data[0]== 'stop')
{
$sql="INSERT INTO tbl_basis_2 (datum,ip) VALUES ('$data[0]', '$data[1]')";

Was meint ihr dazu? Schmutzige Lösung?
Mit Zitat antworten
  #10 (permalink)  
Alt 12-09-2010, 14:04
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das wars natürlich nicht hier meine Verbesserung...

Ich fange also die $row in der "Stop" Zeile ab, speichere diese und starte eine neue While Schleife mit der csv Datei, um direkt auf diese $row zu kommen. Dann erfolgen die Einträge in eine andere Tabelle.

Hab extra nicht die Edit Funktion benutzt, damit die Änderung deutlich wird.

Bitte um Meinungen zu dem Code, ob es so "logisch" ist. Danke

PHP-Code:
$row 1;                                     
$handle fopen ("statistik.csv","r");              
while ( (
$data fgetcsv ($handle1000"#")) !== FALSE ) { // Daten werden aus der Datei
                                              
    
$num count ($data);                     
                                               
    
    
$row++;                                    
   
    
    echo 
"<br>";
    
      if (
$data[0]!= 'stop')
    {
    
$sql="INSERT INTO tbl_basis (datum,ip) VALUES ('$data[0]', '$data[1]')";
    
$sqlinsert=mysql_query($sql);
    
    }
    else {
        
        echo 
"Stop gefunden in Zeile:"$row "<BR>";
        
$row=$stopgefundenrow;
        
$stop_gefunden=1;
        break;
        }


 
//while 

if ($stop_gefunden==1)
{
    while ( (
$data fgetcsv ($handle1000"#")) !== FALSE ) { 
                                               
    
$num count ($data);                      
    
$row++;        
    If (
$row<$stopgefundenrow)
        {continue;
        }
        
$sql_stop="INSERT INTO tbl_basis_2 (datum,ip) VALUES ('$data[0]', '$data[1]')";
        
$sqlinsert=mysql_query($sql_stop);
        echo 
"<BR>";
    }
    



fclose ($handle); 
Mit Zitat antworten
  #11 (permalink)  
Alt 12-09-2010, 14:22
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ich kann mir beim besten Willen nicht vorstellen, wozu das "Stopp Gedöns" gut sein soll!
Auf mich macht es den Eindruck eines gruseligen Normalisierungsfehlers.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 12-09-2010, 15:04
argonsputter
 Registrierter Benutzer
Links : Onlinestatus : argonsputter ist offline
Registriert seit: Jul 2007
Beiträge: 9
argonsputter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Ich kann mir beim besten Willen nicht vorstellen, wozu das "Stopp Gedöns" gut sein soll!
Auf mich macht es den Eindruck eines gruseligen Normalisierungsfehlers.
Nunja, in meiner CSV Datei kommt nach ca. 200 Zeilen ein bestimmter Eintrag (Codewort:Stop) und ab diesen Eintrag sollen alle folgenden Zeilen in eine andere Tabelle geschrieben werden.
Mit Zitat antworten
  #13 (permalink)  
Alt 12-09-2010, 15:15
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

1. ist es dann keine CSV Datei mehr
2. habe ich dich sehr wohl verstanden
3. Wozu soll das gut sein?
4. halte ich es für einen gruseligen Normalisierungsfehler
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Lastpage in mysql speichern und später dann mit php öffnen Champ Wasili Projekthilfe 30 17-05-2008 13:37
[PHP5] PHP Mysql Datensatz in Tabelle mit Key als Überschrift und dann Daten (Value) benny06 PHP Developer Forum 5 11-10-2006 19:00
Daten erst dann in DB speichern, wenn Felder OK sind m-werk PHP Developer Forum 12 11-04-2006 13:04
XML Daten mit php auslesen und dann in mysql eintragen JinRoh XML 1 27-03-2005 22:47
Formular-Daten in Datei speichern und auslesen Haue PHP Developer Forum 3 17-04-2004 20:26

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:06 Uhr.