import af csv til mysql

Tags:    php csv mysql

<< < 12 > >>
Jeg skal indlæse en csv fil i Mysql via PHP.

Tablen "test" indeholder 3 felter: id,navn,email
idfeltet er = telefonnr.

Selve cvs filen bliver oploadet i en mappe via ftp.

ideen er at kalde "index.php" som ligger i samme mappe som csv'en.

Men jeg kan ikke få det til at virke.

Min kode ser sådan ud:
<?php

// Set Mysql Variables
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$db = 'mindb';
$table = 'test';


$row = 1;
if (($handle = fopen("Nye_navne.csv", "r")) !== FALSE) {
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);
}


?>

Jeg får dette output på skærmen:
1 fields in line 1:

1;Tom;mail1;,
1 fields in line 2:

2; ole;mail2;,
men intet i db'en

Hvor går det galt.



12 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
fgetcsv:
http://php.net/manual/en/function.fgetcsv.php

Dine felter er adskilt med ; men du fortæller fgetcsv at du ønsker dem adskilt af ,

Derefter skal du indsætte dem i databasen:
...
$link = mysqli_connect($host, $user, $pass, $bd) or die("Error " . mysqli_error($link));
...
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
mysqli_query($link,'insert into <table>(felt1,felt2,felt3) values('.$data[0].','.$data[1].','.$data[3].');';
}

Husk at valider data.



prøv denne istedet
Fold kodeboks ind/udKode 

hvis det ikke virker vil jeg gerne vide hvad den udskriver på skærmen




Du har jo ikke nogen insert til din database.

Derfor sætter den jo ikke noget ind, så koden gør nøjagtig som du beder den om.




Daniel har pointeret fejlen - du kan evt. tjekke dette ud for at løse fejlen: http://www.w3schools.com/php/php_mysql_insert.asp



fgetcsv:
http://php.net/manual/en/function.fgetcsv.php

Dine felter er adskilt med ; men du fortæller fgetcsv at du ønsker dem adskilt af ,

Derefter skal du indsætte dem i databasen:
...
$link = mysqli_connect($host, $user, $pass, $bd) or die("Error " . mysqli_error($link));
...
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
mysqli_query($link,'insert into <table>(felt1,felt2,felt3) values('.$data[0].','.$data[1].','.$data[3].');';
}

Husk at valider data.


Hej Stefan.

Nu har jeg ændret koden, så den se sådan ud.
$row = 1;
if (($handle = fopen("Nye_navne.csv", "r")) !== FALSE) {
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);
}

$link = mysqli_connect($host, $user, $pass, $bd) or die("Error " . mysqli_error($link));

for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
mysqli_query($link,'insert into test(id,navn,mail) values('.$data[0].','.$data[1].','.$data[3].');');
}

Jeg får samme out put, men intet i tabellen .




Har du indtastet din forbindelse til din database?



Ja der er ikke ændret noget
// Set Mysql Variables
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$db = 'mindb';
$table = 'test';



prøv dette

test data Nye_navne.csv
Fold kodeboks ind/udKode 


php code
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 31.10.2014 15:06 af Bruger #16075
Hej Ronny.
Nu kommer der data i tablen. Men desværre ikke det hele.
der bliver oprettet 2 indput. i begge er det kun i "id" at der kommer noget. og det er 2 og 1.

Jeg kan simpelhen ikke gennemskue hvor det går galt henne.

vh. René



hvordan ser din Nye_navne.csv ud;

hvordan ser din tabel ud? (sql dump), så vi kan se datatyper, og collonne navne




<< < 12 > >>
t