Avatar billede gojelink Nybegynder
16. januar 2001 - 08:24 Der er 14 kommentarer og
1 løsning

Indlæsning fra kommasepareret fil.

Jeg har en database hvor jeg skal kunne indsætte data fra en kommasepareret fil. Hvordan gør jeg det og er det samtidig muligt at checke de data der allerede er i databasen, så der kommer en liste over de data der er nye, opdaterede og slettede i forhold til de data i filen?
Avatar billede gojelink Nybegynder
16. januar 2001 - 09:42 #1
Jeg smed lige lidt flere points.. det var vidst lidt fedtet med 30 :o)
Avatar billede sorenmh Nybegynder
16. januar 2001 - 10:37 #2
$query = mysql_query(\"SELECT * FROM tabel WHERE id = \'?\'\");
$row = mysql_fetch_array($query);
$data = explode(\",\",$row[felt]);
Avatar billede gojelink Nybegynder
16. januar 2001 - 10:39 #3
Hmmm... jeg skal læse fra filen og smide det ind i databasen :o)
Avatar billede sorenmh Nybegynder
16. januar 2001 - 10:42 #4
det var den måde man får dataene ud af databasen, jeg gik ud fra at det felt hvor dataene ligger i hedder \"felt\" i tabellen \"tabel\".
Alle data bliver puttet i en array der hedder $data[]

Du putter dataene ind i databasen sådan her:
$data = implode(\",\",$data);
$query = mysql_query(\"SELECT * FROM tabel WHERE id = \'?\'\");
$row = mysql_fetch_array($query);
$data = $row[felt] . $data;
mysql_query(\"UPDATE tabel SET felt = \'$data\' WHERE id = \'?\'\");
Avatar billede sorenmh Nybegynder
16. januar 2001 - 10:46 #5
ok den kommer her:
$filnavn = \"\"; //dit filnavn
$file = file(\'$filnavn\');
$file = implode(\",\",$file);
mysql_query(\"INSERT INTO tabel(id,felt)\" . \"VALUES(\'\',\'$file\')\");
Avatar billede sorenmh Nybegynder
16. januar 2001 - 10:47 #6
der kommer , mellem hvert linieskift fra din fil og det bliver indsat i en ny række i din database, fil linien bliver indsat i \"felt\".
Avatar billede mkelle1 Nybegynder
16. januar 2001 - 10:49 #7
Hej Gojelink

Her er en måde at indlæse filer i mysql. Filen skal ligge i samme bibliotek som din mysql-database.

mysql> LOAD DATA INFILE \'dintextfil.txt\' INTO TABLE din_tabel (col1,col2,...) FIELDS TERMINATED BY \',\' LINES TERMINATED BY \'\\n\';

Du skal så skrive navnet på din komma-separerede fil, navnet på din tabel, navnene på de kolonner værdierne skal sættes ind i (i den rækkefølge de optræder i filen). Endelig kan du angive præcis hvordan felter er afgrænset (hvis det ikke er komma) og hvordan linierne (posterne) afsluttes. Du kan læse mere i mysql manualen under LOAD DATA INFILE.

Mads
Avatar billede gojelink Nybegynder
16. januar 2001 - 10:51 #8
Okarj (Du får points :O)) Jeg skal lige have det uddybet lidt..

Data\'ene i tekstfilen står på denne form:

\"Varenr\",\"Varetekst\",\"Forfatter\",\"Bontekst\",\"Varegruppe\",\"Salgspris\"
\"0002259060\",\"ALL QUIET ON THE ORIENT EXPRESS\",\"MILLS\",\"ALL QUIET ON THE\",\"4\",\"15500\"
\"0002557932\",\"I SEE A VOICE\",\"REE\",\"I SEE A VOICE\",\"4\",\"31500\"
\"0002570777\",\"PIP PIP\",\"GRIFFITHS\",\"PIP PIP\",\"4\",\"21000\"
\"0003709418\",\"COLLINS COBUILD ENGLISH DICTIONARY\",\"\",\"COLLINS COBUILD\",\"4\",\"24000\"
\"0003750450\",\"KEY WORDS IN BUSINESS\",\"MASCULL\",\"KEY WORDS IN BUS\",\"4\",\"15000\"
\"0004331273\",\"SCHOOL DICTIONARY\",\"\",\"SCHOOL DICTIONAR\",\"4\",\"13000\"
\"0004700724\",\"POCKET ENGLISH THE SAURUS\",\"COLLINS\",\"POCKET ENGLISH T\",\"4\",\"13000\"
\"0004709802\",\"JANES AIRCRAFT RECOGNITION GUIDE\",\"\",\"JANES AIRCRAFT R\",\"4\",\"24000\"
\"0006377408\",\"CULTURES AND ORGANIZATIONS\",\"HOFSTEDE\",\"CULTURES AND ORG\",\"4\",\"12000\"

hvordan skal det så læses?
Avatar billede gojelink Nybegynder
16. januar 2001 - 10:57 #9
Altså sorenmh.. :o)

Mkelle1: Jeg skal kunne læse det fra phpkoden, da det skal kunne gøres online :o)
Avatar billede sorenmh Nybegynder
16. januar 2001 - 12:50 #10
$filnavn = \"\"; // Dit filnavn
$fs = fopen($filnavn, \"r\");
while(!feof($fd)){
  $linie = fgets($fs, 4096);
  $indhold = str_replace(\"\\\"\", \"\", $linie);
  $indhold = explode(\",\",$indhold);
  mysql_query(\"INSERT INTO tabel(varenr,varetekst,forfatter,bontekst,varegruppe,salgspris)\" . \"VALUES($indhold[0],$indhold[1],$indhold[2],$indhold[3],$indhold[4],$indhold[5])\");
}
fclose($fs);

Jeg er ikke helt sikker på at det her kommer til at virke, men prøv det alligevel.
Avatar billede sorenmh Nybegynder
16. januar 2001 - 12:50 #11
det skulle have været et svar :-0
Avatar billede sorenmh Nybegynder
16. januar 2001 - 12:51 #12
$filnavn = \"\"; // Dit filnavn
$fs = fopen($filnavn, \"r\");
while(!feof($fs)){
  $linie = fgets($fs, 4096);
  $indhold = str_replace(\"\\\"\", \"\", $linie);
  $indhold = explode(\",\",$indhold);
  mysql_query(\"INSERT INTO tabel(varenr,varetekst,forfatter,bontekst,varegruppe,salgspris)\" . \"VALUES($indhold[0],$indhold[1],$indhold[2],$indhold[3],$indhold[4],$indhold[5])\");
}
fclose($fs);

Der var lige en lille fejl, er rettet.

Avatar billede gojelink Nybegynder
16. januar 2001 - 13:10 #13
Kewl.. takker :o)

Hvorfor står der 4069 i fgets?
Avatar billede sorenmh Nybegynder
16. januar 2001 - 13:16 #14
det er buffersize, du kan bare sætte det op hvis du vil.
Avatar billede gojelink Nybegynder
16. januar 2001 - 13:24 #15
Takker :o)
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