Editor CSV súboru na webe v PHP – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Editor CSV súboru na webe v PHP – PHP – Fórum – Programujte.comEditor CSV súboru na webe v PHP – PHP – Fórum – Programujte.com

 

Majo
~ Anonymní uživatel
85 příspěvků
8. 1. 2021   #1
-
0
-

Ahojte,

hľadal som nejaký jednoduchý editor súboru CSV, uloženého na webe - prekvapilo ma, ako málo ich je. Našiel som taký ozaj "simply", z roku 2003 na stránke https://www.interval.cz/…kovymi-daty/

Presne takýto jednoduchý skript by mi vyhovoval. Výpis obsahu csv súboru  prebehne perfektne, docela rýchlo aj s 3500 riadkami. Ale zápis po zmene obsahu niektorej bunky sa nevykoná - skúšal som všeličo, aj som vyskúšal viacero browserov (Firefox, Chrome, Edge, Explorer), jednoducho sa súbor ani neprepíše, ani prípadne nevytvorí s novým menom. CSV súbor má pritom nastavené atribúty na maximum (777).

Kde robím chybu? Poradíte mi, prosím?

<?php
// Skript z článku https://www.interval.cz/…kovymi-daty/

if($odeslano == 'ano') {
  for($i=0;$i<Count($data);$i++) {
    $data[$i] = implode('|', $data[$i]);
  }
  $soubor = fopen('./data.csv', 'w');
  for($i=0;$i<Count($data);$i++) {
    fwrite($soubor, $data[$i] . '');
  }
  fclose($soubor);
}

echo '<form method="post">';
$radky = file('./data.csv');
for($i=0;$i<Count($radky);$i++) {
  $radek = explode('|', $radky[$i]);

  for($j=0;$j<Count($radek);$j++) {
    echo '<input type="text" name="data[' . $i . '][' . $j . ']" value="' . $radek[$j] . '" />';
  }

  echo '<br>';
}
echo '<br><input type="hidden" name="odeslano" value="ano" /><input type="submit" />';
echo '</form>';

?>

 

Nahlásit jako SPAM
IP: 89.173.23.–
Majo
~ Anonymní uživatel
85 příspěvků
8. 1. 2021   #2
-
0
-

#1 Majo
Ešte pre upresnenie: bunky v CSV súbore sú oddelené znakom ALT+124 "|" a pripájm aj obsah testovacieho csv súboru data.csv:

Janko|Hraško|9403
Alfred|Nobel|9993
Michael|Jackson|636

Nahlásit jako SPAM
IP: 89.173.23.–
gna
~ Anonymní uživatel
1424 příspěvků
8. 1. 2021   #3
-
0
-

Tenkrát se používalo register_globals, které automaticky vytvářelo proměnné pro přijatá data. Stačí tam doplnit $_POST[] a ten for je tam takovej ošklivej :-)

<?php
if (@$_POST['odeslano'] === 'ano') {
  $soubor = fopen('./data.csv', 'w');
  foreach ($_POST['data'] as $radek) {
    fwrite($soubor, implode('|', $radek) . "\n");
  }
  fclose($soubor);
}

echo '<form method="post">';
$radky = file('./data.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($radky as $i => $radek) {
  $radek = explode('|', $radek);
  foreach ($radek as $j => $hodnota) {
    $escaped = htmlspecialchars($hodnota);
    echo '<input type="text" name="data[' . $i . '][' . $j . ']" value="' . $escaped . '" />';
  }
  echo '<br>';
}
echo '<br><input type="hidden" name="odeslano" value="ano" /><input type="submit" />';
echo '</form>';

?>
Nahlásit jako SPAM
IP: 213.211.51.–
Majo
~ Anonymní uživatel
85 příspěvků
8. 1. 2021   #4
-
0
-

#3 gna
Vďaka za skript, mám pocit, že je výpis aj rýchlejší, ale čo sa týka zápisu zmien v csv súbore, nič sa nezmenilo. Vyeditujem nejaký záznam, kliknem na "Odeslat", znova načíta obsah csv, ale so starými hodnotami. Pozrel som aj cez FTP obsah súboru, či sa predsa len tá zmena nezapísala, ale všetko je pôvodné. Dátum a čas zmeny súboru tiež bez zmeny....

Ja si už začínam myslieť, že to bude nejakým nastavením php.ini, alebo niečoho iného. Mám tam Apache 2.4 a PHP 5.6, chmod pre csv súbor je 777. Adresár so súbormi nemá žiadne obmedzenia, nie je tam .htaccess ani nič, čo by potenciálne mohlo brániť zápisu do súboru.

Ak by ste mali nejaký nápad, ako to poriešiť, bol by som zaň veľmi vďačný.

Nahlásit jako SPAM
IP: 89.173.23.–
Kit+14
Guru
8. 1. 2021   #5
-
0
-

#4 Majo
Jeden nápad bych měl: Zbavit se CSV a začít používat nějakou databázi dřív, než přijdeš o data.

Nahlásit jako SPAM
IP: 37.188.163.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Majo
~ Anonymní uživatel
85 příspěvků
9. 1. 2021   #6
-
0
-

#5 Kit
Njn... paradox je, že doteraz som mal všetko na MySQL databáze, kde to všetko bez problémov fičalo. Lenže:  užívateľ nemá možnosť MySQL (bežalo to u mňa), zdroj údajov je v excelovskej tabuľke, ktorú si užívateľ (nenávidiaci PC :-) spravuje a dosť často tam dochádza k síce malým, ale predsa len k zmenám. Zakaždým som ručne vyexportoval jeho xls súbor do csv, odtiaľ do MySQL.  Tak som MySQL zrušil a "databázu" vytvoril v CSV, kde sa žiadaný údaj (1 riadok) zobrazí na pohľad  rovnako rýchlo a hlavne užívateľ nepotrebuje mať databázu MySQL. Je to cca 100 kB CSV súbor. K úplnej spokojnosti chýba iba tá možnosť jeho editácie  - malých zmien v CSV, čo by mňa odbremenilo od exportu xls do csv a prekódovania csv z win-1250 na utf-8.

Ten skript na editáciu csv je napísaný na pohľad tak, že by sa csv súbor mal v pohode uložiť. Takže chyba asi nebude v ňom, to bude nejaká "kuleha", nejaká drobná ale podstatná hlúposť, ktorá zápisu zabráni. Venoval som tomu hodne času, ale neviem s tým pohnúť...

Nahlásit jako SPAM
IP: 89.173.23.–
gna
~ Anonymní uživatel
1424 příspěvků
9. 1. 2021   #7
-
0
-

#6 Majo
Přidej na začátek toto, třeba to něco odhalí.

error_reporting(E_ALL);
var_dump($_POST);
Nahlásit jako SPAM
IP: 213.211.51.–
Majo
~ Anonymní uživatel
85 příspěvků
9. 1. 2021   #8
-
0
-

   

Připojen obrázek.

Připojen obrázek.

#7 gna
Ahoj, dal som tie dva riadky úplne na začiatok, hneď pod <?php. Na prvom priloženom obrázku je screenshot po otvorení stránky. Potom som vyeditoval číslo v prvom riadku z 9403 na 9999, stlačil tlačidlo a stav po autoobnovení stránky je na druhom obrázku. Nestačím sa čudovať, hodnota 9999 ostala zapísaná, zmenil sa aj dátum a čas modifikácie csv súboru! Skúsil som zmeniť aj iné hodnoty, zakaždým ich správne zapíše! Napovie to niečo?

Nahlásit jako SPAM
IP: 89.173.23.–
Majo
~ Anonymní uživatel
85 příspěvků
9. 1. 2021   #9
-
0
-

#8 Majo
No ale tešil som sa predčasne...

Vyskúšal som ten môj csv súbor, ktorý má aktuálne 3185 riadkov. Dump vypíše riadky po riadok 250, potom je už tabuľka a zmenenú hodnotu nezapíše.... Inak nevypisuje žiaden error. Bude chyba v počte riadkov? Je to nejako limitované, resp je možné ten limit niekde nejako zmeniť? Neviem.... K tomu prirátam ten fakt, že najprv mi to nechodilo ani s troma riadkami, až po pridaní toho dumpu sa to, ktovie prečo rozbehlo.

Nahlásit jako SPAM
IP: 89.173.23.–
Majo
~ Anonymní uživatel
85 příspěvků
9. 1. 2021   #10
-
0
-

#9 Majo

VYRIEŠENÉ!!!!

Nastavil som v php.ini hodnotu pre max_input_vars 1.000 na 20.000 a vypol som output_buffering.

Ten output_buffering skúsim ešte zapnúť, uvidím, ale tá hodnota max_input_vars bola zrejme kľúčová chyba. Naviedol ma k tomu práve ten dump výpis, keď zobrazí "iba" 250 polí. Aj keď mi stále vŕta v hlave, prečo mi to predtým nechodilo ani s tromi riadkami.

Ale aj tak ďakujem užívateľovi gna, ktorý ma nakopol správnym smerom.

Nahlásit jako SPAM
IP: 89.173.23.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý