PHP-skript för att importera CSV-data i MySQL
Detta är ett enkelt skript som gör att du kan importera CSV-data i din databas. Detta kommer praktiskt eftersom du kan enkelt redigera fälten ladda upp den tillsammans med CSV-fil och kalla det från nätet och det kommer att göra resten.
Det kan du ange avgränsare i detta CSV-filen, om det är en koma, tillåter en flik etc. Det har också att du valde den linjen separator tillåter dig att spara resultatet till en fil (en så kallad data sql dump).
Det tillåter dig också att inkludera ett tomt fält i början av varje rad, som vanligtvis är en automatisk ökning heltal primärnyckel.
Detta skript är huvudsakligen användbar om du inte har phpmyadmin, eller om du inte vill att besväret med att logga in och föredrar ett par klick lösning, eller om du bara är en kommandotolk kille.
Se bara till att tabellen redan är skapad innan du försöker dumpa data.
Vänligen skicka dina kommentarer om du fick någon felrapport.
Tack för info
Great script! TNX mycket
Jag har inga ord för att uppskatta detta inlägg ... .. verkligen att jag är imponerad av det här inlägget .... Den person som skapar det här inlägget var det ett stort mänskligt .. tack för delade detta med
oss.
Ja ... thats verkligen en informativ post. Jag är ny bloggare att det skulle vara säker på användbar information för mig. Tack för att dela!
Script fungerar bra för mig ganska mycket som det är. Många tack!
Hej ...
Jag står inför ett problem, när jag använder detta, dess visar ett felmeddelande som säger
"Föråldrad: Function split () är föråldrat i C: \ wamp \ www \ test1 \ simplecsvimport.php på rad 64
Filen är inte skrivbar, kontrollera behörigheter. Hittade totalt 41 poster i den här CSV-fil. "
Pls svara, vad är fel!
tack på förhand!
Jag är verkligen förvirrad med denna kod!
men jag brukar försöka upp!
BTW, hur koden eller fältet html att kalla denna kod
Tack, mycket bra csv importör.
Men jag hittade ett litet problem, det fungerar bara med CSV-filen med strukturen: "fält1", "field2", "field3", etc. men jag Hava en CSV-fil så här: fält1; field2, filed3, etc
Det enda jag kan förändra är $ fieldseparator men hur kan jag säga "skriptet att filen inte använder" (fältavgränsare)?
Min ideia var en combobox med $ fieldseparator (eller och ett annat med $ fielddelimiter ("eller ingenting)
Tack på förhand.
Någon aning om hur man får detta skript för att arbeta för fält som omges med citationstecken, så att områden med kommatecken i dem inte får läsa som en ny post?
Jag har data som omfattar kommatecken som dollarn belopp och ett kommentarerna där användare kan ha använt ett kommatecken. Jag behöver hela fältet importerade och skriptet behandlar dem som nya områden.
@ Mark Cloyd
"Adress = värden (adress)
Jag får ett felmeddelande här som Parse error: syntax error, oväntad "="
@ Joofoo
Jag har laddat din kod men jag har ingen uppdaterad information om MySQL-databas ...
CSV innehåller:
Header -> användarnamn, lösenord, meddelande, e-post, bild, datum
ROW2 -> Bill, dude,,,,
Row3 -> Jane, gal,,,,
Row4 -> David, barn,,,,
Och här är koden ...:
<? Php
/ / Uppsättning från iphonelogin.php fil i "remote"-mappen ...
/ * Ansluta till db * /
/ / $ Link = mysql_connect ("ronbo.db.6405862.hostedresource.com ',' ronbo", "Pepper0689") or die ('Kan inte ansluta till DB');
/ / Mysql_select_db ("ronbo ', $ link) or die (" Kan inte välja DB');
/ / https://www.ihappyapps.com/DataFolder/loader.php
/********************************/
/ * Kod vid https://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Redigera uppgifterna nedan för att avspegla lämpliga värden
/********************************/
$ DatabaseHost = "dbhost";
$ Databasename = "namn";
$ Databasetable = "bord";
$ Databaseusername = "användarnamn";
$ Databasepassword = "lösenord";
$ Fieldseparator = "";
$ Lineseparator = "\ n";
$ Csvfile = "spreadsheet.csv";
/********************************/
$ Addauto = 1;
/********************************/
$ Spara = 0;
$ Utdatafil = "output.sql";
/********************************/
if (! file_exists ($ csvfile)) {
echo "Server fick din begäran, men CSV-filen du vill ladda in i databasen inte är närvarande ... .. \ n";
exit;
}
$ CHUNKSIZE = 1 * (1024 * 1024);
$ File = fopen ($ csvfile, "rb");
if (! $ file) {
echo "Fel vid öppning av datafil. \ n";
exit;
}
$ Size = Filstorlek ($ csvfile);
if (! $ storlek) {
echo "Filen är tom. \ n";
exit;
}
$ Con = mysql_connect @ ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Lines = 0;
$ Förfrågningar = "";
medan (! feof ($ fil)) {
$ Csvline = fgets ($ file, $ CHUNKSIZE);
$ Rader + +;
if ($ rader <2) fortsätta;
$ Rad = trim ($ csvline, "\ t");
$ Rad = str_replace ("\ r ","",$ linje);
/************************************************* ************************************************** *********
Denna linje försvinner den speciella karaktär. ta bort det om poster redan flytt i CSV-filen
************************************************** ************************************************** ********/
$ Rad = str_replace ("'"," \ '", $ line);
/************************************************* ************************************************** ********/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','",$ linearray);
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql');";
if ($ spara) $ frågor .= $ query. "\ N";
@ Mysql_query ($ query);
echo $ rader "\ n".
}
fclose ($ fil);
$ Rader -= 3;
@ Mysql_close ($ con);
<>
Jag kunde verkligen behöva lite hjälp med att få detta att fungera ...
Ron
@ Roy
Jag ändrade ditt manus, så att den förbrukar betydligt mindre minne vid behandling av stora filer (det slog php minne gräns när jag försökte använda den på ett 100MB CSV-fil). Förändringarna är följande:
$chunksize = 1*(1024*1024);
$file = fopen($csvfile,"rb");
if(!$file) {
echo "Error opening data file.\n";
exit;
}
$ Size = Filstorlek ($ csvfile);
if (! $ storlek) {
echo "Filen är tom. \ n";
exit;
}
$ Con = mysql_connect @ ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Lines = 0;
$ Förfrågningar = "";
medan (! feof ($ fil)) {
$ Csvline = fgets ($ file, $ CHUNKSIZE);
$ Rader + +;
if ($ rader <2) fortsätta;
$ Rad = trim ($ csvline, "\ t");
$ Rad = str_replace ("\ r ","",$ linje);
/************************************************* ************************************************** *********
Denna linje försvinner den speciella karaktär. ta bort det om poster redan flytt i CSV-filen
************************************************** ************************************************** ********/
$ Rad = str_replace ("'"," \ '", $ line);
/************************************************* ************************************************** ********/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','",$ linearray);
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql');";
if ($ spara) $ frågor .= $ query. "\ N";
@ Mysql_query ($ query);
echo $ rader "\ n".
}
fclose ($ fil);
$ Rader -= 3;
@ Mysql_close ($ con);
Tack,
@ Khaled A
Hur kan jag exportera UTF8 Excel för att output.sql
tack
Jag försökte skriptet men output.sql är writting konstiga saker,
infoga i test_excel värden ("PK |!??????? Q K5 q q K5 q q q K5 ....
gillar dessa saker
Hur kan jag åtgärda detta problem. någon särskild mall för Excel-ark?
Hej killar, ville bara låta dig alla vet att jag har hittat någon att skriva mig själva programmet jag behöver.
@ Warren
/********************************/
Den här filen innehåller många försök till ändringar av Warren (inte en programmerare) den 28 dec 2010 och framåt bygger på synpunkter vid källan plats och annan info så att detta program i en han behöver. Detta är mycket ofullständig. Hjälp är mest uppskattade och mycket välbehövliga.
Linjer la att skapa rutorna för webbadress databas och lösenord etc.
/********************************/
Välkommen till servern bli Utility
Detta program löper från datorn för att befolka två tomma bord i en ny MySQL-databas på din webbplats genom: ladda upp varje filnamn mindre utbyggnad, med ett unikt nummer framför som en motvikt till bord keywords_categories, och sedan därefter tilldelar nummer 1 i den tomma kolumnen framför den första Colum av data från den filen, och ökar antalet med en för varje påföljande fil bearbetas från den katalogen, så att antalet assigend till kategorin namn i tabellen matchar sökorden som hör till det som är sedan laddas upp till bordet sökord.
Detta görs för alla csv-filer i en viss katalog på din EU.
Man ignorerar de första fem raderna i CSV-filen.
Webbplats URL:
Databas Namn:
Databas Användarnamn:
Databas Lösenord:
Path of katalog som innehåller filer att ladda upp:
/********************************/
Fråga
Hur får jag ovan data från indatarutor till program för att matcha den begärda nedan?
/********************************/
<? Php
/********************************/
Linje tillsätts för att förhindra timeout på större filer.
/********************************/
set_time_limit (0);
/********************************/
Hämta filen namn på filer som skall bearbetas, ta bort filnamnstillägget sedan använda dem för att ladda upp som kategori namn till bord keywords_categories.
/********************************/
/********************************/
Tar bort filnamnet filändelser
kopieras från www perlmonks org /? node_id = 151232
/********************************/
sub parse_out_extension {
die ("Inget filnamn att tolka. \ n") if (@ _!);
min ($ file) = @ _;
my @ bitar;
karta {push (@ bitar, $ _)} split (/ \ /, $ fil.)
min $ slut = pop (@ stycken);
$ File = ~ s / \ $ slut / /.
avkastning ($ file) om $ fil;
/********************************/
/ * Original kod på https://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Redigera uppgifterna nedan för att avspegla lämpliga värden
/********************************/
$ DatabaseHost = "localhost";
$ Databasename = "test";
$ Databasetable = "prov";
$ Databaseusername = "test";
$ Databasepassword = "";
$ Fieldseparator = "";
$ Lineseparator = "\ n";
$ Csvfile = "filename.csv";
/********************************/
/ * Vill du lägga till en ampty fält i början av dessa poster?
/ * Obs av Warren i fallet med de sökord som är de första kolumn med data i varje fil, en fil för fil grundval denna nya tomma coum plats dån Frot av sökorden måste förändras så att den fångar som tilldelats kategori namn som består av filnamnet mindre utbyggnad och placerar den i den nya tomma första kolumnen.
/ * Detta är användbart om du har en tabell med det första fältet är ett AUTO_INCREMENT heltal. Obs av Warren. Detta är vad som behöver när det gäller filnamnen mindre exteniosn som upoaded till bord keywords_categories.
/ * Och CSV-filen inte har såsom tomma fältet innan posterna.
/ * Ange 1 för ja och 0 för ingen. OBS: inte satt till 1 om du är osäker.
/ * Detta kan dumpa data i fel områden om detta extra fält finns inte i tabellen. Obs av Warren sannolikt behöver inte denna fil jag mitt fall, men bara en gissning från min sida men behöver se behov om något.
/********************************/
$ Addauto = 1;
/********************************/
/ * Vill du spara MySQL frågor i en fil? Om ja ange $ spara till 1.
/ * Tillstånd på filen bör sättas till 777. Antingen lägga upp en sample via FTP och
/ * Ändra behörigheterna eller köra vid prompten: touch output.sql & & chmod 777 output.sql
/********************************/
$ Spara = 0;
$ Utdatafil = "output.sql";
/********************************/
if (! file_exists ($ csvfile)) {
echo "Filen hittades inte. Se till att du angett rätt sökväg \ n ".
exit;
}
$ File = fopen ($ csvfile, "r");
if (! $ file) {
echo "Fel vid öppning av datafil. \ n";
exit;
}
$ Size = Filstorlek ($ csvfile);
if (! $ storlek) {
echo "Filen är tom. \ n";
exit;
}
$ Csvcontent = fread ($ file, $ storlek);
fclose ($ fil);
$ Con = mysql_connect @ ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
/********************************/
För att undvika att föra in fyra första raderna av adveristing rubriken i och en tom rad. Linjen är lika med noll kod ersattes med nedan kod.
/********************************/
$ Lines = 1, (Värdet för räknaren är 1)
$ Förfrågningar = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Rader + +; (Tilldelar den första raden # 2 (header)
if ($ linjer> = 5) {(Start på # 5 "något högre eller lika med 5?)
$ Förfrågningar = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Rader + +;
$ Rad = trim ($ line, "\ t");
$ Rad = str_replace ("\ r ","",$ linje);
/************************************
Denna linje försvinner den speciella karaktär. ta bort det om poster redan flytt i CSV-filen
************************************/
$ Rad = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO $ databasetable värden (",'$ linemysql');";
annat
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql');";
$ Frågor .= $ query. "\ N";
/************************************
Denna bit av koden nedan lades till nu visa felmeddelanden.
************************************/
$ Result = mysql_query ($ query);
/ / Kontrollera resultatet
/ / Detta visar den verkliga frågan skickas till MySQL, och felet. Användbart för felsökning.
if (! $ result) {
$ Message = 'Ogiltig fråga: ". mysql_error (). "\ N";
$ Message .= "Hela frågan:". $ Query;
die ($ meddelande)
}
@ Mysql_close ($ con);
if ($ spara) {
if (! is_writable ($ utdatafil)) {
echo "Filen är inte skrivbar, behörigheter kontrollera. \ n";
}
else {
$ Fil2 = fopen ($ utdatafil, "w");
if (! $ fil2) {
echo "Fel vid skrivning till utfil \ n."
}
else {
fwrite ($ fil2, $ frågor);
fclose ($ fil2);
}
}
}
echo "Hittade totalt $ linjer poster i den här CSV-fil. \ n";
?>
Bara en liten rättelse till min begäran, de två tabellerna i databasen MqSQL jag nämnde är faktiskt kallas:
keywords_categories
sökord
@ Warren
Likaledes skulle bara av nyfikenhet IT-processer också en txt-fil, (som har bara en lista med ord på det) på samma sätt?
(Jag är ny på detta, och jag vet kan vara mycket begärt, så om någon kunde ta den här lilla projektet för mig, om det är lämpligt, vi kanske kunde diskutera min betala en liten summa för sin tid till att göra förändringar i möter mina behov? Snälla låt mig veta.)
Min e-post: wr.spence @ hotmail.com
Jag är inte en programmerare. Jag ser ditt manus och det kan vara nära vad jag behöver, eller kan kanske ligga till grund för vad jag behöver, jag är inte säker.
Jag behöver för att utföra samma uppladdning och om igen men från en annan underkatalog varje gång från min hårddisk, för en lista på CSV-filer, och till en annan MySQL DB varje gång (på en differret webbplats varje gång). I de flesta fall db inte kommer att ha några uppgifter i den, men det skulle vara perfekt (men inte nödvändigt) om manuset fortfarande kunde arbeta med en db som hade uppgifter, utan att påverka befintliga data).
Jag behöver den för att logga in på db på servern (det borde fråga mig för adressen till webbplatsen och db användarnamn och lösenord, etc).
Jag behöver något som låter mig bläddra och välja en katalog namn på min hårddisk, eller skriva in det.
Då processen varje CSV-filen i den katalogen, en efter en annan, enligt följande:
På varje fil som jag behöver det först att ta filnamnet (minus förlängning) och ladda upp den till dB i tabellen kategori. Denna tabell innehåller en numrerad nyckel som man sedan tilldelas det namnet.
Jag behöver då skriptet att ladda upp bara ordet Colum (1: a Colum av data) av den filen till bord ord, och lägg till passande nubmer för den kategori namn från den första filen.
Det bör noteras att CSV-filen ofta innehåller tre rader med text och en tom rad, alla fyra som jag vill ignoreras och inte upp. Det finns ofta tomma rader på te eend av filen jag också vill att det ska ignorera dessa, samt ignorera alla andra kolumner som får eller inte får i CSV-filen. I vissa fall CSV-filen inte kan ha någon rubrik eller andra kolumner.
Sen nästa fil, tills det slut på filer i katalogen.
Då skulle jag vilja att tala om för mig "avslutad.", Och om några fel att säga mig.
Kan någon av er hjälpa mig med detta?
Tack för att du delar excel med mysql script, detta är mycket användbart för mig.
ya koden fungerar men nw är att få mitt data omges av citationstecken @ Suman
@ Pruthvi
Hej,
Använd nedan ges koden ... ...
Riv Kod Det är verkligen bra att alla PHP-utvecklare.
kan du förklara din kod som du vill ersätta @ mysql_query ($ query); med uttalanden u gav, men det visar ett felmeddelande $ message är odefinierad @ Andrew Fisk
Samma problem med mig @ Andrew Fisk
senaste utvecklingen koden kan känna av några rader i CSV-filen men inte visa det i tabellen
koden är tillbaka ett uttalande om att det couldnt hitta csv-fil ...
Wat kan vara problemet ....
Okej, har hittat problemet. Jag hade mispelt tabellnamnet. Men hittade bara frågan när jag hade lagt till följande kod som returnerar ett fel om sql misslyckas. För närvarande skriptet inte berätta om det varit något problem.
Så ändra raden
@ Mysql_query ($ query);
för alla följande: -
$ Result = mysql_query ($ query);
/ / Kontrollera resultatet
/ / Detta visar den verkliga frågan skickas till MySQL, och felet. Användbart för felsökning.
if (! $ result) {
$ Message = 'Ogiltig fråga: ". mysql_error (). "\ N";
$ Message .= "Hela frågan:". $ Query;
die ($ meddelande)
Hoppas det hjälper någon. Det gjorde jag.
AJ
@ Andrew Fisk
När jag kör detta skript med en csv som jag vet import korrekt med hjälp av PHP Admin, körs skriptet, rapporterar rätt antal rader med meddelandet "Hittade totalt 193 poster i den här CSV-fil." Men ingen av de data visas i tabellen. Jag har gjort ändringar i CSV så att jag kan se om data tas i bordet och det är inte. Några idéer?
AJ
Min CSV-importfilen har också citationstecken runt alla områden (främst för att undvika problem om jag vill importera till Excel så att den inte mangla data), så jag hade det här problemet där det var att sätta in poster med citationstecken kring uppgifterna. Jag klädde alla citationstecken genom att lägga till denna rad:
$ Rad = str_replace ("\ "","",$ linje);
efter denna rad:
$ Rad = str_replace ("\ r ","",$ linje);
och den nya linjen ersätter citationstecken med ingenting. Det är samma som linje innan det förutom att det är att ta bort \ "istället för \ r (citattecken i stället för vagnretur).
@ Neady
Ett stort litet program.
Finns det något sätt att ersätta data i en cell till exempel. "Stad" i CSV och ändra den till ett värde från en föregående sida som en $ _SESSION eller $ _POST värde?
Detta är bra ... mycket lätt att genomföra. Nu måste lista ut hur man använder detta eller liknande skript för att ladda upp. Xls-fil tillsammans med. Csv-fil
@ Mike
Kan du prova att lägga:
set_time_limit (0);
alldeles i början? (Direkt efter php öppningstaggen)
@ Exklusiv Tutorials
Finns det något sätt att ha det ingen timeout? Det fungerar utmärkt med 100k poster, men när jag går till något stort som en mil eller mer, går ca 20 sek sedan går till tom skärm och annonser inga poster.? Tack.
Efter att ha exakt samma fråga, kan någon hjälpa tack?
Hej vänner,
Jag behövde akut hjälp från er ... Så vänligen hjälpa mig här är koden ...
Beredda HTML-filen. Men jag behöver PHP-lösning ... Vänligen hjälp för mig ... ... ..
Skicka SMS
Mottagare Mobilnummer:
+91
Telefonbok
Ladda upp Excel-fil:
<!-->
<Input type = "file" name = "fil" class = "file_input_hidden" onChange = "javascript: document.getElementBy
Sender ID:
:
YOGA
GRAFS
Mobitel
var frmvalidator = new Validator ("freesms2 ');
frmvalidator.addValidation ("frno", "req", "Ange mobilnummer");
frmvalidator.addValidation ("frno", "num", "Mobilnummer fältet ska innehålla siffror");
frmvalidator.addValidation ("frno", "minlength = 10000", "Mobil siffra vara 10.000 siffror");
frmvalidator.addValidation ("message3", "req", "Ange SMS");
Med vänliga hälsningar,
Ravi Kumar
<? Php
$ Newbal = "0";
omfatta "conn.php";
if (isset ($ _POST ['submit']))
{
$ Filename = $ _POST ['filnamn'];
$ Handtag = fopen ("$ filnamn", "r");
medan (($ data = fgetcsv ($ handtag 1000,, ","))! == FALSE)
{
$ Sql5 = mysql_query ("SELECT * FROM post där item = '$ data [0 ]'");
$ Num = mysql_num_rows ($ sql5);
if ($ num == 0)
{
$ Import = "INSERT INTO objekt (objekt, gweight, dweight) VALUES ('$ data [0 ]','$ data [1 ]','$ uppgifter [2 ]')";
mysql_query ($ import) or die (mysql_error ());
}
else {
echo "$ data [0] exit";
}
}
fclose ($ handtag);
print "Importera gjort";
}
annat
{
?>
Skriv filnamnet att importera:
Datum
setIcon ("images / iconCalendar.gif");
$ MyCalendar-> setDate (datum ("d"), datum ("m"), datum ("Y"));
$ MyCalendar-> setPath ("./");
$ MyCalendar-> setYearInterval (2010, 2020);
$ MyCalendar-> dateAllow ('2008-05-13 ", 2020-12-31 ');
$ MyCalendar-> setDateFormat ("Y / m / d ');
$ MyCalendar-> writeScript ();
?>
det fungerar bra på när jag laddar upp CSV-filen på localhost men visa fil saknas fel när den körs på server.please hjälpa mig, tack på förhand
Jag tror att detta är bäst för kundvagn är csv i SQL.
kaundo le doy descarga mig aparecen muchos dragkedjor todos los Archivos los ubico en una sola carpeta? ¿
@ Zeshan
användning explodera istället för split
Föråldrad: Function split () är föråldrat i E: \ wamp \ www \ floodpk2 \ admin \ simplecsvimport.php på rad 63
Filen är inte skrivbar, kontrollera behörigheter. Hittade totalt 1498 poster i den här CSV-fil.
plz hjälpa mig snarast
8pills.com är din vård lösning. 8pills.com ger bäst i klassen Generic och märkesvaror läkemedel.
jag står inför meddelande under-
Meddelande: Undefined offset: 1 i C: \ wamp \ www \ Ny mapp (2) \ exl8.php på rad 20
Meddelande: Undefined offset: 2 i C: \ wamp \ www \ Ny mapp (2) \ exl8.php på rad 20
Meddelande: Undefined offset: 2 i C: \ wamp \ www \ Ny mapp (2) \ exl8.php på rad 20
Detta fungerar mycket bra. Tack!
Här är koden btw,
$ DatabaseHost = "localhost";
$ Databasename = "databas";
$ Databasetable = "bord";
$ Databaseusername = "admin";
$ Databasepassword = "admin";
$ Fieldseparator = "";
$ Lineseparator = "\ n";
$ Csvfile = "https://linktosite/";
$ Addauto = 0;
$ Spara = 0;
$ Utdatafil = "output.sql", / / om spara är på (1)
$ File = fopen ($ csvfile, "rb");
$ Csvcontent = stream_get_contents ($ fil);
fclose ($ fil);
$ Con = mysql_connect @ ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Lines = 0;
$ Förfrågningar = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Rader + +;
$ Rad = trim ($ line, "\ t");
$ Rad = str_replace ("\ r ","",$ linje);
/************************************
Denna linje försvinner den speciella karaktär. ta bort det om poster redan flytt i CSV-filen
************************************/
$ Rad = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO $ databasetable värden (",'$ linemysql');";
annat
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql');";
$ Frågor .= $ query. "\ N";
@ Mysql_query ($ query);
}
@ Mysql_close ($ con);
if ($ spara) {
if (! is_writable ($ utdatafil)) {
echo "Filen är inte skrivbar, behörigheter kontrollera. \ n";
}
else {
$ Fil2 = fopen ($ utdatafil, "w");
if (! $ fil2) {
echo "Fel vid skrivning till utfil \ n."
}
else {
fwrite ($ fil2, $ frågor);
fclose ($ fil2);
}
}
}
echo "Hittade totalt $ linjer poster i den här CSV-fil. la till DB \ n ".
Hej,
Jag använder detta skript för att importera en CSV datafeed till mysql.
Det enda problemet jag har är att citat "" också skall införas i mina tabeller
Avgränsare:, (Komma)
Bilaga: "(aanhalingsteken)
Ny rad: \ r \ n
Nice Work!
Jag bara har en fråga.
Är det möjligt att använda fler tecken på explodera kommandot i manus?
Jag behöver allso att det finns en separation med en. och;
Tack så mycket om någon kropp har någon aning om!
Jag använder denna kod ... ... ... Det är för enkelt att genomföra det i min sida ... ..
Tack så mycket ..
Jag vill ha lite mer kod för PHP ... ...
Att konvertera sidan i pdf ...
Hej,
Får detta fel. hur man ska lösa detta?
Fel:
Filen är inte skrivbar, kontrollera behörigheter. Hittade totalt 13 poster i den här CSV-fil.
Tack
Haan
Hmm .. Jag fick fel som dessa "Filen är inte skrivbar, kontrollera behörigheter. Hittade totalt 2 poster i den här CSV-fil. "Någon aning om vad som gick fel?
Hmm .. Jag fick fel som dessa "Filen är inte skrivbar, kontrollera behörigheter. Hittade totalt 2 poster i den här CSV-fil. "Någon aning om vad som gick fel?
Att hoppa över den första raden / raden som är en rubrik i CSV-fil så här:
... ..
if ($ rader> 1) {
if ($ addauto)
$ Query = "INSERT INTO $ databasetable värden (",'$ linemysql');";
annat
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql');";
$ Frågor .= $ query. "\ N";
@ Mysql_query ($ query);
}
Jag hade det här skriptet körs bra under en annan domän. Sen när jag flyttade den, tar bort cron jobb nedladdningar CSV-filen, lagrar den, och då men icke ladda upp den till MySQL. När jag tittar på import.php filen och försök att verkställa Jag får felmeddelandet säger kan inte hitta filen att du har rätt sökväg. Hjälp.
Om du vill undvika att föra in första raden, bara spela med disken, till exempel:
$ Lines = 1, (Värdet för räknaren är 1)
$ Förfrågningar = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Rader + +; (Tilldelar den första raden # 2 (header)
if ($ linjer> = 3) {(Start på # 3 "något högre eller lika med 3")
Underbart manus men jag har återkommande problem.
Efter att jag kör skriptet, det står "Hittade totalt 1 poster i detta CSV-fil.".
Jag tittade tillbaka i min tabell och det visar en tom.
Jag kollade att se till att det var rätt antal kolumner och det fanns.
Snälla hjälp!
Tack,
Coulton
Om jag begränsad tillgång till kundens hårddisk hur ska jag ladda upp CSV-filen till server.for exempel kan vi sätta standardvärdet till filöverföringskontrollen
Detta var väldigt nyttigt för mig ... men jag behövde för att göra en ändring för att läsa i stora filer. Jag var förvirrad i början, men sedan insåg skriptet läser in hela filen i minnet (rätt?). Så här är en anpassad version av koden, som läser rader i en i taget. det står i filer som ser ut som
börjar fil:
2,3, -1
1, -2,4
slutet filen (med många fler värden). Jag ville att varje rad som skall ett bord inträde och ett ID med radnummer, liksom den första id som representerar storleken på bordet (som inte kommer att ändras senare).
<? Php
/********************************/
/ * Kod vid https://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Redigera uppgifterna nedan för att avspegla lämpliga värden
/********************************/
$ DatabaseHost = "localhost";
$ Databasename = "Tomoku";
$ Databaseusername = "root";
$ Databasepassword = "root";
$ Fieldseparator = "\ n";
$ Lineseparator = "\ n";
/ / Den här koden läser tatami-filer i databasen
$ Con = mysql_connect @ ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
/ / Detta loopar över en massa filer
för ($ r = 2, $ R <14, $ r + +) {
för ($ c = $ r, $ c
Följande gjorde susen för mig:
LOAD DATA LOCAL LOW_PRIORITY INFILE
"C: \ \ Documents and Settings \ \ Administratör \ \ Desktop \ \ SigmaS1.csv"
In i tabellen "mydb`. "Mintabell"
FÄLT undkom genom \ \
Upphävts genom beslut ","
VALFRITT omges av '"'
LINES upphävts genom "\ r \ n '
("Användare", "pwd", "sno", "amt", "ActiveRec");
Skriptet läser en extra linje från csv-fil. t.ex. om csv-filer har 25 poster Det visar finns det 26 poster. Kan du säga mig var jag gjort för fel?
Jag har lagt till för att kontrollera om det är ett första linje och fortsätta slinga om dess första linje.
tack
Liksom Gary, jag vill kunna skriva över en befintlig post, men genom att uppdatera den, inte att ta bort alla data i db. Sp här någonstans:
if ($ addauto)
$ Query = "INSERT INTO $ databasetable värden (",'$ linemysql');";
annat
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql');";
Hur skulle jag se om posten finns och uppdatera sedan i stället in?
Hur hoppar jag på första raden / raden som är en rubrik i CSV-filen och infoga resten av data till db?
@ Gary
Du kan använda ett @ mysql_query ("trunkera $ databasetable"); höger efter @ mysql_select_db uttalande.
Men var försiktig eftersom denna åtgärd kommer att utplåna data och är inte reversibel.
@ Kish
den aktuella koden tillåter inte surfar för / uppladdning av filen.
Du kan helt enkelt sätta CSV-filen i samma katalog som PHP-skript, och helt enkelt ställa in $ csvfile variabeln vara lika med ett filnamn (utan sökväg)
Hej alla,
Hur innehålla jag dessa csv citat i "den dag, månad datum 2010" och staten "prov, ange" till en kolumn i min databas? Jag ser många exempel men jag kan inte få det att fungera. någon hjälp skulle bra.
AK, 10037591,1, "Tisdag 9 mars 2010 15:55:16", 59,7151, -151.4434,2.7,75.90,32, "Kenai Peninsula, Alaska"
thx
Tack, har denna kod hjälpte verkligen!
Hur skulle jag ändra det så att ett formulär ska visas där användaren bläddrar och väljer CSV-filen som ska importeras till bordet?
Och även hur kunde jag göra det så att varje gång en ny fil läggs fram den skulle åsidosätta vad som för närvarande lagras i tabellen?
Många tack
Detta är mycket användbart kod för mig ..
tack.
Hur kan jag få bläddra filen i stället för att skriva hela sökvägen ..
Snälla hjälp med detta.
tack
Jag klarade inte av det hur det fungerar från en fil kontroll. innebär bläddra först och välja en fil och sedan skicka där jag behöver ändras
Hej,
Gjort vissa ändringar. . Min txt-fil har 3 kolumner separerade med "|" (pipe) karaktär. Skriptet visar fildata räknar rader, men inte kommer in i data i databasen. Några kommentarer?
$ Csvcontent = fread ($ file, $ storlek);
fclose ($ fil);
$ Con = mysql_connect @ ($ dbhost, $ dbusername, $ dbuserpassword) or die (mysql_error ());
@ Mysql_select_db ($ datasource) or die (mysql_error ());
$ Lineseparator = "\ n";
$ Fieldseparator = "|";
$ Lines = 0;
$ Förfrågningar = "";
$ Linearray = array ();
$ Count = 0;
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Count = $ count + 1;
$ Rader + +;
$ Rad = trim ($ line, "\ t");
$ Rad = str_replace ("\ r ","",$ linje);
/************************************
Denna linje försvinner den speciella karaktär. ta bort det om poster redan flytt i CSV-filen
************************************/
$ Rad = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera (""",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO INDIKATORER värden (" $ count "," $ linemysql');";
annat
$ Query = "INSERT INTO INDIKATORER värden (" $ linemysql');";
$ Frågor .= $ query. "\ N";
@ Mysql_query ($ query) or die (mysql_error ());
echo "$ linemysql \ n";
}
Utmärkt manus! Jag behövde lite skjuts till ett projekt jag arbetar med och detta gjorde susen.
Jag märkte något konstigt men jag ändrade skriptet att arbeta med ett formulär och jag märkte att för att söka, var det sista området att få buggered upp eftersom den nya linjen röding (antingen \ r \ n eller båda) var fortfarande spelas in i MySQL-databas.
För detta ändamål om du ersätter:
$ Rad = str_replace ("\ r ","",$ linje);
med:
$ Rad = str_replace ("\ r',",$ linje);
det kommer att hålla tillbaka från att vara ett problem, som för den nya linjen har jag lagt till en liten sak som gör det möjligt för att infoga nya poster, men uppdateringar befintliga poster, så att du inte slutar upp med dubbla poster. På toppen av koden nedan ser du där jag gjorde samma fix för den faktiska nya linjen röding.
$ Linemysql = implodera ("','",$ linearray);
$ Newlinemysql = str_replace ('\ n',",$ linemysql);
if ($ addauto) {
switch ($ databasetable) {
fall ("Adress"):
$ Duplicatevals = "adress = värden (adress),
stad = värden (stad), stat = värden (staten),
zip = värden (zip) ";
break;
fall ("ägare"):
$ Duplicatevals = "ownername = värden (ownername),
Hustyp = värden (Hustyp),
addresskey = värden (addresskey) ";
break;
}
$ Query = "INSERT INTO $ databasetable värden (",'$ newlinemysql)
För dubblerat Key Update
$ Duplicatevals ";
} Else {
$ Query = "INSERT INTO $ databasetable värden (" $ linemysql)
För dubblerat Key Update
$ Duplicatevals ";
}
Även i min form jag lagt i tabellen namn och om jag ville den tabell som ska [boolean] "addauto" eller inte som en enda ingång från en drop-down (kommaseparerad), sedan dela upp resultatet på toppen av simplecsvimport skript.
Slutligen måste du komma ihåg att ställa index i databasen för "ON DUPLICATE ..." för att arbeta, kommer auto inkrement inte fungera i detta fall, så du måste ställa in en andra index på borden auto inkrement, de tabeller som don 't auto inkrement och har unika områden arbetar med den inre index om detta är den väg du vill gå.
Jag hoppas att detta hjälper någon!
Skål!
Jag måste ladda ner data automatiskt från en fjärrserver. Det är en CSV-fil, och jag måste packa upp den, och lagrar data i en MySQL-databas som jag skapat. Det finns flera databaser. Den första delen är under en av de databaser som någon hjälpte mig med och det fungerar underbart. Jag har ställt in ett cron-jobb och det hämtar det automatiskt som planerat. Men jag har flera databaser och skränande få den andra att arbeta.
DETTA avsnitt nedan fungerar bra!!
--------------------------
#! / Bin / bash
deleteparam = '-delete-after ";
# Deleteparam = "
# Directory = '-katalog-prefix = / $ HOME / myfolder / myfolder / "
katalog = "
# Userpwd = '-http-user = bla-http-password = blah'
toUpper () {
echo $ 1 | tr "[: lower:]" "[: upper:]"
}
# If [-z "$ 1"]; sedan
# Echo Användning: $ 0 tabell
#exit
# Fi
ZIP = namn på datafil i fjärrservern
ZIP = "toUpper $ ZIP"
# Filen i zip har ett mindre _
DATA = namnet på den tabell i min mysql databas
DATA = "toUpper $ data"
# Rm $ TABLE.csv.zip
# Rm $ DATA.csv
cd / $ HOME / myfolder / myfolder /
####### Få bostäder
wget " https://3pv.mlslirealtor.com/Data3pv/DownloadBRSaction.asp?user_code=XXXXXX&password=XXXXXXX&data_type=datazip "-O $ ZIP.csv.zip
sova 10
####### Packa upp den
pwd
ls-la
unzip-o $ ZIP.csv.zip
sova 10
####### Ladda det
wget-verbose $ deleteparam $ katalog $ userpwd https://mywebsite/myfolder/import.php?table = $ data
sömn 300
###### Radera filer
rm $ ZIP.csv.zip
rm $ DATA.csv
sova 10
_ ---------------------------
Allt detta ovan fungerar UNDERBAR
Detta är vad jag BEHÖVER HJÄLP MED
--------------------------
1. Jag behöver ett skript för att lägga till ovanstående fil som kommer att ladda ner bilder. Om du ser nedan jag behöver ett skript som automatiskt blir dagens datum och tid att skriptet är sprang. Det serverns pic från de senaste 7 dagarna och den uppdateras ständigt. När skriptet har körde det kommer att ladda ner data i den tabell som jag skapat.
2. Sedan måste jag ett skript som frågar mysql databas söker för inlägg som bilder och sedan hämta den faktiska foton direkt från sina fjärrservrar. Detta csv-fil inte ladda ner bilder, bara data som jag kan använda för att köra ett skript för att hämta bilder på en viss plats. Se nedan.
Nedan visas de instruktioner jag fått.
INSTRUKTIONER
Foto data hämtas av HTTP. Fotona data uppdateras en gång dagligen och finns tillgänglig för nedladdning som en CSV-fil. Du kan sedan skriva ett manus med hjälp av data från en CSV-fil att peka tillbaka till bilderna på vår image server. Du måste ange ett värde för frågesträngfilter last_updt> "ÅÅÅÅMMDD HH: MM: SS" för webbadressen för att returnera data. Fältet last_updt är datumet värde för sista gången som ett foto var den noteringen.
Du kommer att behöva ersätta user_code och lösenord platshållare (XXXX) med inloggningsuppgifter som du.
Steg 1: Du kan hämta primärnotering fotodata CSV-fil att gå till webbadressen nedan.
https://remotewebserver/Data3pv/DownloadBRSaction.asp?user_code=XXX&password=XXXX&query_str=last_updt% 20>% 20'YYYYMMDD% 20HH: MM: SS '& DATA_TYPE = BILDER
Steg 2: De bilder tabelldata bör hämta i en CSV-format.
Steg 3: Använda Y flaggor och ML nummer i de uppgifter du kan länka tillbaka till vår bild platser.
Vår primära bild sökvägen är följande:
https://remoteserver/folder/folder/folder/Last3DigistsofML # / notering #. jpg
Till exempel-Det primära foto för notering nummer 1899430 finns på
https://remoteserver/folder/folder/1/430/1899430.jpg
Vår extra bild sökvägen struktur är följande:
https://remoteserver/mlsphotos/full/PhotoPosition/Last3DigistsofML # / notering # _photoPosition.jpg
Till exempel-Det andra fotot för notering nummer 1899430 finns på
https://remoteserver/folder/folder/2/430/1899430_2.jpg
Hej, säger det mig skivan räkna men inte sätta in data i databasen
Hoppas du kan hjälpa
Nathan
kommandot är: trunkera TableName.
Du kan infoga följande på rad 58:
@ Mysql_query ("trunkera $ databasetable");
men detta är icke reversibel! så var försiktig
Hur kan jag tömma min redan fyllda bord innan du sätter den nya filen?
eller kan jag uppdatera en redan befintlig ingång?
Trunkera, UPDATE? Hur får jag detta i frågan?
@ Andy Brotherton : Detta innebär att frågan försöker infoga en post med ett antal kolumner som inte matchar databastabell.
1) Är du säker på att CSV-filen har exakt samma antal kolumner som tabellen i databasen?
2) Är fältseparator i detta CSV-filen verkligen ett kommatecken? eller är det en flik till exempel eller andra? Om det inte ett kommatecken, ändra värdet på $ fieldseparator på linje 12
3) Tabellen måste redan skapats i databasen innan du försöker läsa in data i den. Är du säker på att du har det?
Hej,
Jag skulle verkligen vilja använda detta script men jag är inte säker på vad jag gör fel. Jag får samma problem som nämns ovan med uppgifter som inte fylls på i den db. Den hittar rätt antal rader men visar inget i db.
Jag bytte linje 88 @ mysql_query ($ query) or die (mysql_error ());
och får detta meddelande "Kolumn räkna inte matchar värde räknat på rad 1"
@ Claus
Hej Claus.
Har CSV verkligen innehåller en enda post?
Eftersom skriptet nått det stadium där det skriver ut antalet poster, antar jag inte misslyckades när den är ansluten till databasen (linjer 56-57) så det är inte problemet.
Det är möjligt att frågan för att infoga data misslyckas.
Försöka ersätta linje 88 med:
mysql_query ($ query) or die (mysql_error ());
och kolla vad fel du får.
@ Okoth
Hej Okoth.
Troligtvis kan du bli av med linjerna 33-54 och ersätta dem med denna enda rad:
$ Csvcontent = @ file_get_contents ("... https://");
ersätta prickar med rätt webbadress (direkta webbadressen till den CSV-fil)
@ Adrian
Hej Adrian.
Drupal, som du noterade, har komplex tabell strukturer. Beroende på vilken typ av data som du importerar, är det mycket troligt att dessa uppgifter måste delas upp i flera tabeller, oftast med en gemensam utrikes-nyckel som Nod-ID.
Tyvärr skulle skriptet ovan hjälper inte det.
Tack för skriptet. Mycket förståeligt.
Hur kan jag ändra detta skript så att den hämtar och lagrar en CSV-fil från Internet i MySQL?
Hej Alla
Jag använder Drupal för att bygga en ny webbplats, är utmaningen jag har just nu som jag behöver för att importera data från en CSV-fil till en MySQL-databas som har delat bord, därför några av de fält där Jag vill importera CSV-data befinner sig i olika delar av samma databas kommer det här skriptet fungerar för mig? Om inte kan detta CSV-fil kan importeras med en annan metod?
Vänligen meddela, tack för all hjälp.
Hälsningar
Adrian
Hej alla!
Verkar ha skriptet fungerar ... exept att den inte skriva data till MySQL ...
Precis som med Chris: skriptet har körts, och även utgångar posten räkna, men inte röra databasen alls ... men säger mig: Hittade totalt 1 poster i den här CSV-fil.
Vad gör jag fel (im en noob på PHP och MySQL)
Tack
Claus
Hej Stanley, är problemet med enkla citationstecken. Bloggen programvara överskrivningar höra dem. Byt bara ut "och" med "
PS: ovanstående kommando är att direkt ladda en CSV-fil i databasen från MySQL-prompten. Detta är trevligt men inte i samband med skriptet ovan
det står att läsa denna in i databasen
läsa in data lokal infil 'PATH' i tabellen tabellfält avslutas av "," rader avslutas med '\ n';
Jag ändra sökvägen och tabellen dess gå in men det ger mig ett felmeddelande om att dess fel syntax kod 1064
kan någon ge mig några råd om vad man ska göra
tack
Stan
När det gäller citaten frågan, kan du använda just detta:
$ Linearray = preg_split ("/,(?=(?:[^ \ "] * \" [^ \ "] * \ ")*(?![^ \"] * \ "))/", $ line );
Skål,
Gaz.
Kära Chris,
vänligen byt:
@ Mysql_query ($ query);
med:
@ Mysql_query ($ query) or die (mysql_error ());
och låt mig veta vad felet det ger dig
Hej Alla,
Älskar det här manuset, och det fungerade bra, nu plötsligt skriptet brukar infoga poster. Skriptet har körts, och även utgångar posten räkna, men inte röra databasen alls ...
Några idéer?
Tack
C
Hej Mark,
Först är det med hänvisning till den fil du valt i $ utdatafil variabel.
andra, måste denna fil vara skrivbar. Jag antar att du använder Linux, inte Windows, eftersom detta i allmänhet inte ett problem i Windows.
På Linux, bara SSH till maskinen, byt till katalogen där utdatafilen är och skriv: chmod 777 filnamn
där "filnamn" är själva filnamnet.
Om du inte har SSH, många FTP-klienter ändra stöd tillstånd. För detta ändamål, FTP till mappen som innehåller utdatafilen, välj denna fil, och lokalisera från denna FTP-program möjlighet att ändra tillstånd. Ställ in den till 777, eller "läsa, skriva," för alla.
Hej alla,
Tack för skriptet. Jag är en noob på PHP och MySQL så jag uppskattar verkligen något sånt här. Jag kom så långt som genererar "Filen är inte skrivbar, kontrollera rättigheterna" visas i min webbläsare. Kan någon förklara kommentaren om fastställande av tillstånd till 777? Jag använder en Excel-genereras. Csv-fil? Tack på förhand.
Jag kan bara få den första raden i min CSV-fil som ska importeras till databasen.
Här är en kopia av loggfilen:
infoga i produktion värden (", '2008-10-21", 50 ", 50", 50 "," detta är den första tonerna linje "," det här är anteckningar linje 2 "," det här är anteckningar linje 3 "0000-00-00 ', '0000-00-00', '0000-00-00 ', '456 Morningside Ave', 'Ste. 512", "Brooklyn", "NY", '10023', "Joe", "Kund 1 ');
infoga i produktion värden (", '2008-10-09 ', '50', '50 ', '50', 'detta är den första tonerna raden',",",' 2008/10/09", '2008 . -10-14 ', '0000-00-00', '456 Morningside Ave "," ste 512 "," Brooklyn "," NY ", '10023 ',' Joe", "Kund 1 ');
infoga i produktion värden (", '2008-10-14", 25 ", 25", "25", "ANMÄRKNINGAR 1',",",' 2008/10/14", '2008-10 till 17 "," NULL ", 555 någonstans", "svit 123", "New York", "nya y", '10001 ',' Joe "," Namn 1 ");
infoga i produktion värden (", '2008-10-16 ', 45', 45 ', 45',",",",' 2008/10/16", '2008-10-24 "," NULL',",",",",",' Tom',");
infoga i produktion värden (", '2008-10-01", "34", "34", "34',",",",' 2008/10/02", '2008-10-04 ',' 2008/10/04',",",",",",' Steve',");
infoga i produktion värden (", '2008-10-17 ', '50', '50 ', '50', 'detta är den första tonerna raden',",",' 2008/10/03", 0000 . -00-00 ', '0000-00-00', '456 Morningside Ave "," ste 512 "," Brooklyn "," NY ", '10023 ',' Joe", "Kund 1 ');
infoga i produktion värden (", '2008-10-18", 25 ", 25", "25", "ANMÄRKNINGAR 1',",",' 2008/10/04", 0000-0-00 "0000-00-00 ', '555 någonstans", "svit 123", "New York", "nya y", '10001', 'Joe "," Namn 1 ");
infoga i produktion värden (", '2008-10-19", "45", "45", "45',",",",' 2008/10/05", 0000-00-00 ',' 0000-00-00',",",",",",' Tom',");
infoga i produktion värden (", '2008-10-20", "34", "34", "34", "nya sedlar',",",' 2008/10/06", 0000-0-00 "0000-00-00',",",",",",' Steve',");
infoga i produktion värden (", '2008-10-21", "12", "12", "12", "ännu nyare anteckningar',",",' 2008/10/07", 0000-00- 00 ', '0000-00 till 00',",",",",",' märke',");
infoga i produktion värden (", '2008-10-22 ', '1', '0 ', '0',",",",' 2008/10/08", 0000-00-00', ' 0000-00-00',",",",",",",");
infoga i produktion värden (", '2008-10-23 ', '2', '0 ', '0',",",",' 2008/10/09", 0000-00-00', ' 0000-00-00',",",",",",",");
infoga i produktion värden (", '2008-10-24", "3", "0", "0',",",",' 2008/10/10", 0000-00-00 ',' 0000-00-00',",",",",",",");
infoga i produktion värden (", '2008-10-15", "0", "0", "0", "senare',",",' 2008/10/11", 0000-00-00 ' , 0000-00-00',",",",",",",");
infoga i produktion värden (", '2008-10-16 ', '0', '0 ', '0', 'senare fortfarande',",",' 2008/10/12", 0000-0-00 "0000-00-00',",",",",",",");
infoga i produktion värden (", '2008-10-17 ', '0', '0 ', '0', 'senare fortfarande',",",' 2008/10/13", 0000-0-00 "0000-00-00',",",",",",");
infoga i produktion värden (", '2008-10-18", "0", "0", "0", "senare fortfarande',",",' 2008/10/14", 0000-0-00 "0000-00-00',",",",",",");
infoga i produktion värden (", '2008-10-19 ', '0', '0 ', '0', 'senaste',",",' 0000-00-00", 0000-00-00' , 0000-00-00',",",",",",");
infoga i produktion värden (", '2008-10-01", "34", "34", "34", "allra senaste',",",' 2008/10/02", '2008-10 till 04 ", '2008-10 till 04',",",",",",' Bruce ');
infoga i produktion (","); värden
Det säger att det är in 20 poster, men bara den första gör den i databasen. Alla tankar?
det gjorde inte in i databasen bordet där jag vill att det skall införas ..: (
Nice arbete chef
Hej alla,
Jag gjorde en liten ändring i koden, så det fungerar som en CSV-importör, som det ska.
CSV-s första raden bör hålla kolumnnamnen du vill importera, så ändrar foreach loop:
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Rader + +;
$ Rad = trim ($ line, "\ t");
$ Rad = str_replace ("\ r ","",$ linje);
/ * Få kolumnnamn från första raden i CSV * /
if ($ linjer == 1) {
$ Columns = explodera ($ fieldseparator, $ line);
$ Columnsql = implodera (",",$ kolumner);
echo $ columnsql;
fortsätta;
}
/************************************
Denna linje försvinner den speciella karaktär. ta bort det om poster redan flytt i CSV-filen
************************************/
$ Rad = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO $ databasetable ($ columnsql) VALUES ('$ linemysql');";
annat
$ Query = "INSERT INTO $ databasetable ($ columnsql) VALUES ('$ linemysql');";
$ Frågor .= $ query. "\ N";
@ Mysql_query ($ query);
}
Hur stor är filen du försöker importera?
i alla fall prova att lägga till följande rad efter den första öppningen taggar:
set_time_limit (300);
Detta kommer att ge manuset upp till 5 minuter (300 sekunder) av genomförandetid.
Byta 300 med 0 gör det möjligt att ta så mycket tid som behövs.
Hej där, trevligt manus tack. När du kör den jag får:
Fatal error: maximitid för genomförandet av 30 sekunder överskridits på rad 63
Finns det något jag kan göra för att komma runt detta?
Robbie, tack för att du dessutom är det ganska välkommet. Tyvärr fungerar det inte direkt när jag kopierar den. Jag tror att något saknas eftersom koden är utspridd på två tjänster.
Kan du kontrollera koden som visas här? Är det något som saknas?
Brad, om du hade laddat ner det tidigare än förra veckan, ersätta "<?" överst med "<? php (ta bort mellanslag)
Jag får först så mycket av det avskurna och resten bara koden i min webbläsare. Jag vet php fungerar eftersom resten av sidan fungerar.
Jag gjorde uppgradera till php5 spelar det för roll?
)
, / / Hoppa eftersom den omfattas av de dåliga arrayelementen
annat
$ Newarray [$ y] = str_replace ('"',",$ linearray [$ y]);
$ Linearray = array_values ($ newarray), / / reset nycklarna till den nya arrayen
$ X + +;
}
}
}
Tja, här är fixa till min tidigare kommentar:
detta förs in i mellan:
$ Linearray = explodera ($ fieldseparator, $ line);
... Infoga kodsträngen nedan ....
$ Linemysql = implodera ("','",$ linearray);
Hittar och håller alla "grejer, mer saker" tillsammans innan imploderar den.
$ A = "";
$ B = "";
$ Qoutecount = 0;
for ($ x = 0; $ x -1) {
$ Qoutecount + +;
if ($ qoutecount == 1)
$ A = $ x, / / lagra i första hand
elseif ($ qoutecount == 2) {
$ Quotecount = 0;
$ B = $ x, / / lagra andra instans
/ / FRÄCKHET ... sammanställa alla element från $ a till $ b till $ a och ignorera delar någonting efter $ a till $ b i nya kedjan;
$ Newa = ""; / / initiera nya strängen.
för ($ z = $ a, $ z $ a & & $ y
Tar inte hänsyn till områden som den här raden:
Fname, Lname, "Company, Inc", stad, stat, Zip
Företag och Inc få uppdelad i två olika kolumner.
Rengaraj,
CSV-filen ska vara på samma plats som den PHP-fil.
Dessutom behöver du inte verkligen måste använda samma namn csv-fil.
bbqrest.csv är ett exempel, ersätta detta filnamn med din egen.
Kan någon svara snabbt Jag har en bbqrest.csv CSV-fil på rätta vägen (root) ..
Jag får det här felet Filen kan inte hittas. Se till att du angett rätt sökväg.
det skulle vara en bra idé att lägga förhindra rubriker i CSV från att lämnas in i databasen. Eller för att skapa ett manus som drar ut den första raden och skapar en db använder dessa värden som kolumnnamn.
Steve,
Du skulle placera det här skriptet i en webb-tillgänglig mapp, efter att ha bytt variabler som behöver ändras. Läs kommentarerna i skriptet för att ta reda på vad du behöver ange. Sedan kallar manuset upp i en webbläsare, som:
https://www.example.com/path-to-script/simplescvimport.php
Total nybörjare - att slita mitt hår ut försöker importera Excel csv till phpMyAdmin (på Mac). Skulle gärna vilja veta exakt var och vad jag gör med denna php script ...?
Wow är cool ... hade idé efter läst din kodning ... tackar mycket
Hej där, en liten ändring för automatisk uppräkning värdena i kolumn 1 (ID-fältet)
se variabel $ räknas.
ola, Enrico.
/ / $ Con = mysql_connect @ ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
/ / @ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Lines = 0;
$ Förfrågningar = "";
$ Linearray = array ();
$ Count = 0;
foreach (split ($ lineseparator, $ csvcontent) som $ rad) {
$ Count = $ count + 1;
$ Rader + +;
$ Rad = trim ($ line, "\ t");
$ Rad = str_replace ("'"," \ '", $ line);
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','",$ linearray);
$ Query = "INSERT INTO` din db tabellen `VALUES ('$ count", "$ linemysql');";
$ Frågor .= $ query. "\ N";
@ Mysql_query ($ query);
}
/ / @ Mysql_close ($ con);
Tack så mycket detta sparat massor av tid! Nice skript.
Jag brukar använda phpmyadmin, men sant, ifall man inte har det installerat, och inte har tillgång skal (som de flesta av de webbhostarna), kan detta komma väl till pass.
Mycket användbart, tack.