MySQL adatbázisba csv import
2014-06-25T11:56:42+02:00
2014-07-04T10:07:43+02:00
2022-08-08T23:20:29+02:00
bzsoli
Sziasztok! Biztos futott már más is bele ebbe a problémába. Kapott Excel-ből készítek egy csv fájlt, aminek egy sora így néz ki:

IHG1020315;"Hibajavító roller HENKEL ""Micro rolly""";432;1;" - egyszerű, tiszta, száraz hibajavítás - a papír nem hullámosodik, azonnal átírható - zsebben elfér, kisdiákok számára ideális - 3 féle színben szállítjuk - a legkisebb Pritt Roller 6 m hosszú szalaggal";HENKEL;ihg1020315.jpg
vagyis van egy mező, amiben sortörések vannak. Ha ezt az import.php-vel probálom beimportálni, nyilván nem sikerül. Mi erre a megoldás, hogy ezeket a sortöréseket ne vegye figyelembe importáláskor?

import.php:

do { if ($data[0]) { mysql_query("INSERT INTO arucikk (cikkszam, nev, netto_ar_huf, aktiv, hosszu_leiras, gyarto, kicsi_foto1) VALUES ( '".addslashes($data[0])."', ... '".addslashes($data[14])."' ) "); } } while ($data = fgetcsv($handle,1000,";","'"));
Mutasd a teljes hozzászólást!
nl2br függvény kell neked. lecseréli a sorvégjeleket <br/>-re.
Mutasd a teljes hozzászólást!

  • Csinálj egy csv fájlt.

    Itt értelemszerűen az $att0 - nál tudod ellenőrizni pl,  hogy létezik e az adatbázisban. De a sortörést is tudod ellenőrizni majd valami php replace-el megfegyelmezed....

    if ($select_ki['email'] == $att0) {

    }

    Az adatbázishoz a csv.sql-t csatoltam. Az adatbázis neve legyen db_upload

    $att1 a first_name az $att2 pedig a last_name stb. stb. stb.

    Szóval csináltam egy ilyet annak idején de inkább xlsx-el és json - el dolgozok, lehet, hogy rosszul olvasod be a fájlt. Próbáld ki. :)

    $db = mysqli_connect("192.168.0.10", "root", "password", "db_upload"); $filename = 'csv.csv'; $dir = 'csv'; $filename_van = ''.$dir.'/'.$filename.''; if (file_exists($filename_van)) { $handle = fopen(''.$dir.'/'.$filename.'', 'r'); $i=1; while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) { $att0 = mysqli_real_escape_string($db, $data[0]); $att1 = mysqli_real_escape_string($db, $data[1]); $att2 = mysqli_real_escape_string($db, $data[2]); $select = mysqli_query($db, "SELECT * FROM csv WHERE email='$att0'"); $select_ki = mysqli_fetch_assoc($select); if ($select_ki['email'] == $att0) { echo 'CSV Number: <strong style="color: green">'.$i++.'</strong>'; echo '&nbsp;'; echo '<strong>Van a Mysql-ben</strong>'; echo '&nbsp;'; echo 'MYSQL ID: <strong style="color: green"> '.$select_ki['id'].'</strong>'; echo '&nbsp;'; echo "EMAIL: " .$select_ki['email']; echo '&nbsp;'; echo "F NAME: " .$select_ki['first_name']; echo '<br>'; echo "L NAME: " .$select_ki['last_name']; echo '<br>'; } else { $import = mysqli_query($db,"INSERT INTO csv (email, first_name, last_name) VALUES ('$att0','$att1','$att2')"); } } fclose($handle); }
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Nem biztos, hogy pontosan fogalmaztam az előbb. Az import lefut, csak egy-egy sor nem jól kerül be a MySQL táblába, mert a "hosszu_leiras" szövegében lévő sorvégeknél egy-egy új sort kezd a táblában.
    Közben módosítottam az import.php-ben felcseréltem az idézőjeleket és az aposztrófokat.

    while ($data = fgetcsv($handle,1000,';','"'));
    Úgy látom, így már jó. Bár nem igazán értem, hogy amikor az excel-t csv-be mentem, mitől függ, hogy valamely szöveget idézőjelbe teszi, másokat meg nem. Ebben tud valaki segíteni?
    Mutasd a teljes hozzászólást!
  • Hali, itt valszeg mivel egy szabadszöveges mező így kerültek bele az értékek, egyik így másik úgy.
    Ha nem túl nagy a fájl akkor szerintem notepad++  -szal egyszerűen replace-elni tudod a \n-eket mondjuk space-re és kész. :)
    Mutasd a teljes hozzászólást!
  • drdarkman válaszán felül a notepad++ jó lehet más speciális karatker kiszűrésére is.

    Az excel csv generálása során lehet csak azt a mezőt rakja időzejelbe, ami tartalmaz szóközt, sortörést, tabulátort, vagy ehhez hasonló tagolásra használható karaktert.

    Továbbá érdemes megjegyezni, hogy az excel sima 'mentés másként' funkciója nem fog utf-8 karakterkódolással menteni - habár ez úgy tűnik nem is probléma jelenleg, de a későbbiekben érdemes észben tartani.
    Mutasd a teljes hozzászólást!
  • Még van egy kis problémám a sortörésekkel..

    Amikor az excelből elkészített csv-t beimportálom, az adatbázisban van egy leírás mező, ami sortöréseket is tartalmaz. Ezek a sortörések, ha phpMyAdmin-ban megnézem, látszólag meg is vannak, de kiíratásnál ezek nem látszódnak, egymás után írja a sorokat, kivéve, ha <br/> tag-eket teszek sorok végére, de ezt nem szeretném több 10ezer sornál végigcsinálni, nyilván van egyszerűbb megoldás.
    Hogy lehet ezeket a sortöréseket megjeleníteni?

    Így néz ki phpMyAdminban:
    - azonnal felülírható
    - fénymásolaton látszik
    - könnyebb használat

    ..és így kiírásnál:
    - azonnal felülírható - fénymásolaton látszik - könnyebb használat
    Mutasd a teljes hozzászólást!
  • nl2br függvény kell neked. lecseréli a sorvégjeleket <br/>-re.
    Mutasd a teljes hozzászólást!
abcd