[PHP] CSV importeren, stopt na eerste rij

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Goedemorgen,

Bij een script voor het importeren van csv bestanden om die vervolgens in een database op te slaan, stopt het script telkens na de eerste rij, heb al geprobeerd de enclosure en escape tekens aan te passen, de loop aan te passen maar niks blijkt te werken. Iemand een idee?

Alvast bedankt!

De code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$filename = '../upload/'.stripslashes($_POST['csvFile']);
                    $row = 1;
                    
                    $sql = "TRUNCATE TABLE ". NEWSLETTER_MEMBERS_TABLE;
                    $res = mysql_query($sql) or die("Database error<HR>" . mysql_error());
                    
                    $fp = fopen ($filename,"r");

                    while ($data = fgetcsv ($fp, 1000, ";"))
                    
                    {
                        //echo '4';
                        
                        $num = count ($data);
                        print "<p> $num velden in regel $row: <br>\n";
                        $row++;
                        for ($c=0; $c < $num; $c++) {
                        print $data[$c] . "<br>\n";
                        }
                        
                        
                        $sql2 = "INSERT INTO ". NEWSLETTER_MEMBERS_TABLE ."
                            (`memName`, `memEmail`, `memTitle`)
                            VALUES
                            ('".quote_smart($data[2])."','".quote_smart($data[1])."','".quote_smart($data[0])."')
                        ";
                        $res2 = mysql_query($sql2) or die("Database error<HR>" . mysql_error());
                        
                        $row++;
                    }
                    fclose ($fp);

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
PHP:
1
while (($data = fgetcsv ($fp, 1000, ";")) !== false)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 18-09 23:26

Tjark

DON'T PANIC

probeer 't eerst ook eens met de voorbeeld code van php

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo "<p> $num fields in line $row: <br /></p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n";
    }
}
fclose($handle);
?> 


En kijk ook eens naar de CSV file welke line-ending die gebruikt (DOS/UNIX/MAC)

*insert signature here


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Dat had ik inderdaad ook geprobeer maar werkt niet

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Ik sla op als comma delimited vanuit een mac, maar neem niet aan dat er verschil is tussen vanuit excel mac of excel windows op deze manier op te slaan?

Acties:
  • 0 Henk 'm!

  • dvdheiden
  • Registratie: Maart 2006
  • Laatst online: 19-09 11:25
Volgens mij wel, zoals ik geleerd heb:
Linux: \n
Windows: \r\n
Mac: \r

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
dat heb ik ook aangepast, krijg ik ook niet werkend. Is er niets dat voor elke OS werkt dan?

Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Grijze Vos schreef op donderdag 16 juli 2009 @ 11:53:
PHP:
1
while (($data = fgetcsv ($fp, 1000, ";")) !== false)
Dat doet dus helemaal niets meer dan het script van twisted2000. Een data assignment is een valide expressie in PHP en heeft een return value, in dit geval het resultaat van fgetcsv.

fgetcsv houdt zelf rekening met de line endings, post eens een sample (met neppe e-mail adressen natuurlijk) van je CSV bestand?

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Dit is de csv. Heb even simpel een documentje gemaakt. 3 regels, 3 kolommen. Opgeslagen vanuit Excel (mac) als CSV comma delimited.

code:
1
2
3
Naam 1  naam@domein2.nl Dhr
Naam 2  naam@domein2.nl Dhr
Naam 3  naam@domein2.nl Dhr

Acties:
  • 0 Henk 'm!

  • lammert
  • Registratie: Maart 2004
  • Laatst online: 03-09 11:50
Open anders het csv bestand in een nette texteditor, dan kan je tenminste zien wat voor scheidingsteken, line-end etc. er gebruikt wordt door excel, of beter nog: maak gewoon via een texteditor zelf een csv-tje, dan heb je er tenminste volle controle over. Kan je daarna gaan debuggen om het vanuit excel op een mac werkend te krijgen.

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
dit is mn csv in n teksteditor

code:
1
2
3
Naam 1;mail@domein1.nl;Dhr
Naam 1;mail@domein1.nl;Dhr
Naam 1;mail@domein1.nl;Dhr

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
code:
1
2
3
Naam 1;mail@domein1.nl;Dhr/r
Naam 1;mail@domein1.nl;Dhr/r
Naam 1;mail@domein1.nl;Dhr/r


zo doet hij wel alle regels meenemen, alleen plaatst hij ook Dhr/r in de database.

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
code:
1
2
3
Naam 1;mail@domein1.nl;Dhr;/r
Naam 1;mail@domein1.nl;Dhr;/r
Naam 1;mail@domein1.nl;Dhr;/r


Dit werkt goed, nu de vraag. Hoe krijg ik het zo dat ik wel vanuit elke willekeurige excel (mac of windows) een flv kan worden geupload?

Acties:
  • 0 Henk 'm!

  • Kaasplank
  • Registratie: Februari 2001
  • Niet online
Note: If PHP is not properly recognizing the line endings when reading files either on or created by a Macintosh computer, enabling the auto_detect_line_endings run-time configuration option may help resolve the problem.
misschien heb je daar wat aan?

Acties:
  • 0 Henk 'm!

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 18-09 23:26

Tjark

DON'T PANIC

als je nou gewoon in de php manual gekeken had bij fgetcsv dan zag je staan:
Note: If PHP is not properly recognizing the line endings when reading files either on or created by a Macintosh computer, enabling the auto_detect_line_endings run-time configuration option may help resolve the problem.
--edit--

PHP:
1
2
3
4
5
6
ini_set('auto_detect_line_endings',TRUE);
$handle = fopen('/path/to/file','r');
while ( ($data = fgetcsv($handle) ) !== FALSE ) {
//process
}
ini_set('auto_detect_line_endings',FALSE);

[ Voor 22% gewijzigd door Tjark op 16-07-2009 14:31 ]

*insert signature here


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
yes! top! dank jullie wel

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1