Avatar billede nopper Praktikant
01. januar 2009 - 09:47 Der er 11 kommentarer og
1 løsning

Import af csv

Jeg prøver at importere en csv fil med følgende script:
<?php

/**
* @author
* @copyright 2008
*/

include "connect.php";
if(isset($_POST['submit']))
  {
    $filename=$_POST['filename'];
    $handle = fopen("$filename", "r");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {

      $import="INSERT into dec_15(medlem_nr,medlemsnavn,by,1_runde,2_runde,total) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')";
      mysql_query($import) or die(mysql_error());
    }
    fclose($handle);
    print "Import done";

  }
  else
  {

      print "<form action='import.php' method='post'>";
      print "Type file name to import:<br>";
      print "<input type='text' name='filename' size='20'><br>";
      print "<input type='submit' name='submit' value='submit'></form>";
  }

?>

Jeg får føgende fejl:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by,1_runde,2_runde,total) values('Medl.nr.;Medlemsnavn;By;1. runde;2. runde;tota' at line 1

Der er ca 50 linier i csv filen.
Er der nogen der kan hjælpe mig videre???
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 09:56 #1
"by" er et reserveret ord i SQL. Du enten omdøbe det, eller:

      $import="INSERT into dec_15(medlem_nr,medlemsnavn,[by],1_runde,2_runde,total) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')";
      mysql_query($import) or die(mysql_error());
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 09:56 #2
Det gælder nok også for de følgende 2 felter:

  $import="INSERT into dec_15(medlem_nr,medlemsnavn,[by],[1_runde],[2_runde],total)
Avatar billede nopper Praktikant
01. januar 2009 - 10:13 #3
Jeg har foretgaet de rettelser, som du skriver nu er fejlen den her:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[medlem_nr],[medlemsnavn],[by],[1_runde],[2_runde],[total]) values('3;Nicolai Ja' at line 1
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 10:24 #4
Du ahar nu lavet flere ændringer, end jeg har foreslået. Må vi se hvad du skriver?

Så kan jeg se på fejlbeskeden, at dine værdier ikke er fisket korrekt ud af csv-filen.
Avatar billede nopper Praktikant
01. januar 2009 - 10:25 #5
Jeg er kommet lidt videre:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[by],[1_runde],[2_runde],total) values('3;xxxxx ;xxxx;138;277;41' at line 1
Der mangler 2 ciffer til 41
Avatar billede nopper Praktikant
01. januar 2009 - 10:36 #6
Jeg har skrevet følgende:
$import="INSERT into dec_15(medlem_nr,medlemsnavn,[by],[1_runde],[2_runde],total) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')";
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 10:38 #7
Nå ja, MySql... hehe ... du skal

$import="INSERT into dec_15(medlem_nr,medlemsnavn,`by`,`1_runde`,`2_runde`,total) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')";

Og så har du stadig semikoloner som adskillelse i din csv-fil
Avatar billede nopper Praktikant
01. januar 2009 - 10:48 #8
Ja, det virkede, men den indlæser kun medlem_nr og resten af felterne er enten tomme eller 0.
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 10:50 #9
Læg mærke til mine kommentarer omkring "Og så har du stadig semikoloner som adskillelse i din csv-fil", "Så kan jeg se på fejlbeskeden, at dine værdier ikke er fisket korrekt ud af csv-filen.". Ik'?

Der står ";" som adskillelse i din fil, men i din kode siger du der står ",".
Avatar billede nopper Praktikant
01. januar 2009 - 10:55 #10
Ja, du har ret. Nu virker det. Smid et svar. Du har virkelig fortjent det.
Tusind tak for hjælpen.
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 11:00 #11
Jeg samler slet ikke på point, tak. Svar selv, og accepter dit eget svar. Og når jeg sådan kan bytte om på syntaks til MySql og MSSql, skyldes det måske at jeg fik lidt for meget chokoladebudding i går ;)

Pas lidt på med værdierne i din SQL-sætning. Hvis de indholder "giftige" tegn, som fx "O'Brian", så får du en SQL-fejl. Og hvis andre end dig selv skal bruge din csv-import har du åbnet muligheden for SQL-injection.
Avatar billede nopper Praktikant
01. januar 2009 - 11:03 #12
Helt fint, men endnu engang tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester