[ Príspevkov: 11 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.03.13
Prihlásený: 16.08.16
Príspevky: 28
Témy: 8 | 8
NapísalOffline : 17.02.2015 16:02 | Práca so súborom

Zdravím, potreboval by som pomoc pri úlohe. Moja téma je sklad a podmienka je robiť to len cez textové súbory, nie cez databázu, Bohužiaľ také sú pravidlá. Popravde už neviem čo mám robiť :D Dokážem dostať údaje do súboru aj ich vypísať to je to najmenej. Lenže môže nastať situácia, že budem mať 2 rovnaké veci a rozdielny počet kusov. Teraz je to tak, že sa to vypíše pod seba a to nechcem. Potrebujem nejako urobiť aby to nebolo dvakrát ale len raz a kusy sa spočítali. Ďakujem za pomoc :)

Tu sú zdrojové kódy, veci ako hlavičku a pätu som tam nedával je to len detail.

Editácia - vkladanie údajov
Kód:
<?php require_once('header.php'); ?>

   <div id="content">

      <form action="spracuj.php" method="POST">
         <table>
            <tr>
               <td> Názov tovaru </td>
               <td> <input type="text" name="nazov_tovaru"> </td>
            </tr>
            <tr>
               <td> Počet kusov </td>
               <td> <input type="text" name="pocet_kusov"> </td>
            </tr>
            <tr>
               <td></td>
               <td> <input type="submit" name="odoslat" value="Odoslať"> </td>
            </tr>
         </table>
      </form>

   </div>

<?php require_once('footer.php'); ?>


Spracovanie údajov
Kód:
<?php require_once('header.php'); ?>

   <div id="content">
      
   <?php
      if (isset($_POST['odoslat'])) {      

         $file = fopen('sklad.txt', 'a') OR exit('Problém so súborom!');

         $nazov_tovaru = $_POST['nazov_tovaru'];
         $pocet_kusov = $_POST['pocet_kusov'];

         fwrite($file, $nazov_tovaru . " " . "|" . " " . $pocet_kusov . "\r\n");
         fclose($file);
      }
   ?>

   </div>

<?php require_once('footer.php'); ?>


Vypísanie údajov
Kód:
<?php require_once('header.php'); ?>

   <div id="content">
      <?php

      $data = file('sklad.txt');

      for ($i=0; $i < count($data); $i++) {
      echo $data[$i] . "<br>";
         }

      ?>
   </div>

<?php require_once('footer.php'); ?>


_________________
HP ProBook 450 G1, CPU Intel Core i5 2,5 GHz Turbo Boost 3,1 GHz, Ram 4GB, GPU AMD Radeon HD 8750M 2GB, HDD 1TB Win 8.1, Ubuntu 14.04
LG G2 Black 16GB Cloudy G3 2.2
Offline

Správca fóra
Správca fóra
Práca so súborom

Registrovaný: 08.08.09
Príspevky: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 17.02.2015 16:14 | Práca so súborom

No pri vkladaní musíš overiť, či sa riadok s takým [c]názvom tovaru[/c] už v súbore nachádza.
Ako? Cyklus, podobne ako pri výpise. Ak sa taký riadok nenájde, pridáš nový záznam na koniec súboru, ako to máš teraz.
Ak sa nájde, nahradíš [c]počet kusov[/c] v danom riadku (kopec možností podľa nárokov a zručností) za súčet starého a nového počtu.
Inak to, ako to máš teraz napísané je to celkom deravé - možno by nebolo od veci aspoň trochu tie vstupy validovať.


_________________
always is always wrong
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.03.13
Prihlásený: 16.08.16
Príspevky: 28
Témy: 8 | 8
Napísal autor témyOffline : 17.02.2015 16:22 | Práca so súborom

Jasne validované to bude ja to vždy robím až na koniec najprv celkovú štruktúru a potom vychytávam tie detaily. No uvidím či sa mi to podarí inak ďakujem zatiaľ za navedenie na správnu cestu :)


_________________
HP ProBook 450 G1, CPU Intel Core i5 2,5 GHz Turbo Boost 3,1 GHz, Ram 4GB, GPU AMD Radeon HD 8750M 2GB, HDD 1TB Win 8.1, Ubuntu 14.04
LG G2 Black 16GB Cloudy G3 2.2
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.03.13
Prihlásený: 16.08.16
Príspevky: 28
Témy: 8 | 8
Napísal autor témyOffline : 19.02.2015 19:17 | Práca so súborom

Ako som skúšal tak som skúšal no nejde to :/ nedokážem napísať kód, ktorý porovná výstup z formulára s obsahom v textovom súbore. Nechápem bežne zvládam zložitejšie veci ale toto ma úplne stoplo.


_________________
HP ProBook 450 G1, CPU Intel Core i5 2,5 GHz Turbo Boost 3,1 GHz, Ram 4GB, GPU AMD Radeon HD 8750M 2GB, HDD 1TB Win 8.1, Ubuntu 14.04
LG G2 Black 16GB Cloudy G3 2.2
Offline

Správca fóra
Správca fóra
Práca so súborom

Registrovaný: 08.08.09
Príspevky: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 19.02.2015 19:22 | Práca so súborom

Skús problém rozmeniť na drobné - pretože takto vôbec netuším, v čom je problém.
  • Vieš napísať kód, ktorý ti obsah súboru rozdelí po riadkoch napríklad do poľa?
  • Kód ktorý z odoslaného formulára získa obsah jednotlivých vstupov hádam zvládneš.
  • Vieš napísať kód, ktorý nahradí v riadku súboru jednu časť reťazca, napríklad s použitím regulárneho výrazu?
  • Kód na pridanie nového riadku do súboru už máš.


_________________
always is always wrong
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.03.13
Prihlásený: 16.08.16
Príspevky: 28
Témy: 8 | 8
Napísal autor témyOffline : 19.02.2015 19:27 | Práca so súborom

Problém je ten, že nedokážem porovnať vstup z formulára s obsahom v textovom súbore. Neviem ako to mám urobiť.
1. Bohužial neviem
2.Ano to viem
3.Nie neviem
4.Ano viem :)


_________________
HP ProBook 450 G1, CPU Intel Core i5 2,5 GHz Turbo Boost 3,1 GHz, Ram 4GB, GPU AMD Radeon HD 8750M 2GB, HDD 1TB Win 8.1, Ubuntu 14.04
LG G2 Black 16GB Cloudy G3 2.2
Offline

Správca fóra
Správca fóra
Práca so súborom

Registrovaný: 08.08.09
Príspevky: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 19.02.2015 19:43 | Práca so súborom

1. http://php.net/manual/en/function.file.php
2. sláva
3. riešil by som to nejako takto: http://stackoverflow.com/a/18992125 môžeš sa skúsiť inšpirovať. Určite niekde existujú krajšie a elegantnejšie riešenia, ale osobne považujem pri php ukladanie 'tabuľkových' dát niekam do súboru za celkom zbytočné, keď v normálnej situácií máš databázu, ktorá ti toto všetko zastrešuje a ešte aj kopec vecí uľahčí.
Treba si len všimnúť, že najprv celý súbor načítaš pomocou (v prvom bode spomenutej) funkcie [c]file()[/c] do poľa (môžeš použiť ešte FILE_SKIP_EMPTY_LINES flag pre prípadné preskočenie prázdnych riadkov, viz. dokumentácia) a potom "riadok po riadku" prechádzaš pole foreach cyklom. Dôležité je správne upraviť funkciu [c]substr()[/c] a namiesto '2_' v porovnaní bude vstup z formulára (ošetrený!!!). Nakoniec už len snáď že [c]file_put_contents()[/c] prepisuje celý obsah súboru, preto ak sa nenájde v riadku (prvku poľa) zhoda s reťazcom zadaným z formuláru, aj nedotknuté riadky sa musia prepísať. To pri veľkých súboroch môže trvať celkom dlho a zabrať hromadu pamäte.
Ešte snáď poznámka na záver: Zápis do súboru v tomto prípade nie je atomický. To znamená, že ak jeden proces php bude súbor čítať a zároveň iný ho prepíše, nastane katastrofa.
4. sláva^2


_________________
always is always wrong
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.03.13
Prihlásený: 16.08.16
Príspevky: 28
Témy: 8 | 8
Napísal autor témyOffline : 19.02.2015 20:19 | Práca so súborom

Chápem to a pravdepodobne to nebudem komplikovať ešte viac :D nechám tam to uloženie a výpis zo súboru. Viem že cez databázu je to stokrát jednoduchšie, lepšie a bezpečnejšie a keby som mohol tak to cez to už dávno robím ale zadanie je používať súbory, nie databázu. Učíme sa to v škole ja už databázy ovládať viem, lenže zbytok triedy nie a bolo by to nefér :) Tak ďakujem veľmi pekne za pomoc :)


_________________
HP ProBook 450 G1, CPU Intel Core i5 2,5 GHz Turbo Boost 3,1 GHz, Ram 4GB, GPU AMD Radeon HD 8750M 2GB, HDD 1TB Win 8.1, Ubuntu 14.04
LG G2 Black 16GB Cloudy G3 2.2
Online

Užívateľ
Užívateľ
Práca so súborom

Registrovaný: 28.02.11
Prihlásený: 18.12.17
Príspevky: 178
Témy: 6 | 6
Bydlisko: Levice
Vek: 31
NapísalOnline : 19.02.2015 20:57 | Práca so súborom

Ono ešte je možnosť použiť iný formát toho súboru. Ja by som asi zvolil INI file a v PHP je priamo funkcia parse_ini_file() a tá ti z toho súboru urobí prehľadné asociatívne pole, v ktorom sa dá vyhľadávať.


_________________
Neznalosť zložitých operácií necháva myseľ otvorenú pre geniálne riešenia založené na jednoduchosti.
Offline

Užívateľ
Užívateľ
Práca so súborom

Registrovaný: 27.12.08
Prihlásený: 24.11.16
Príspevky: 1881
Témy: 96 | 96
Bydlisko: Bratislava,...
Vek: 23
NapísalOffline : 19.02.2015 22:35 | Práca so súborom

regexp-y su mega overkill na takuto ulohu.. cela pointa je zapisat asociativne pole do suboru, netreba robit search & replace,
also, ked uz chceme pouzivat nejaky standardizovany format, tak preco ini, ku ktoremu sice existuje v php funkcia ktora ho cita do assoc array-u ale nie funkcia, ktora zapise asociativne pole ako ini subor? narozdiel od napr. json-u?

ale takato jednoducha funkcia sa da naprogramovat aj bez toho, aby clovek tusil co je to json, csv, ini alebo podobne formaty..., staci poznat funkcie file, explode a in_array..


_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Online

Užívateľ
Užívateľ
Práca so súborom

Registrovaný: 28.02.11
Prihlásený: 18.12.17
Príspevky: 178
Témy: 6 | 6
Bydlisko: Levice
Vek: 31
NapísalOnline : 20.02.2015 11:33 | Práca so súborom

V niektorých prípadoch nestačí mať iba vhodne zvolenú funkcionalitu čítanie/zápis ale aj samotnú prehľadnosť dát v úložisku. Json je oveľa horšie čitateľný ako ini štruktúra, avšak samotný json ma vo chvíli, kedy som písal ten príspevok nenapadol, takže si myslím, že máš pravdu a z pohľadu výkon a jednoduchosť spracovania je to najlepšia voľba.


_________________
Neznalosť zložitých operácií necháva myseľ otvorenú pre geniálne riešenia založené na jednoduchosti.
 [ Príspevkov: 11 ] 


Práca so súborom



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

android praca so suborom

v Android, iOS, Windows Phone (Mobile)

0

189

15.04.2012 14:10

zipper

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal - práca so súborom

v Assembler, C, C++, Pascal, Java

2

264

17.12.2011 18:36

fubu

V tomto fóre nie sú ďalšie neprečítané témy.

php praca s txt suborom

v PHP, ASP

2

459

14.01.2010 10:38

mylan

V tomto fóre nie sú ďalšie neprečítané témy.

vyvojovy diagram - praca so suborom

v Ostatné

0

383

13.12.2011 16:57

t-pack25

V tomto fóre nie sú ďalšie neprečítané témy.

Praca s swf suborom v javascripte

v JavaScript, VBScript, Ajax

1

102

16.09.2013 0:29

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

PC zostava 2000€ práca s videom, programovanie, práca v photoshope atď...

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PC zostavy

37

741

25.01.2017 9:44

Xaltotun

V tomto fóre nie sú ďalšie neprečítané témy.

cesta k suborom

v PHP, ASP

3

296

13.11.2009 8:41

p360t

V tomto fóre nie sú ďalšie neprečítané témy.

Cesta k suborom

v HTML, XHTML, XML, CSS

2

395

31.08.2009 21:23

SilverSurfer

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s BIN súborom

v Ostatné programy

3

880

20.08.2006 19:21

wolf14

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s MKV suborom.

v Video programy

2

372

09.02.2008 10:00

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Pomoc s .htaccess suborom

v Ostatné

6

361

01.02.2009 23:58

Ivan11114

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s css suborom

v HTML, XHTML, XML, CSS

21

747

15.12.2008 17:38

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

problém so súborom wbemess.log

v Operačné systémy Microsoft

0

244

24.12.2007 13:57

3michal

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s prístupom k súborom

v Operačné systémy Microsoft

1

146

27.02.2012 20:30

majky358

V tomto fóre nie sú ďalšie neprečítané témy.

problem s pristupom k suborom

v Operačné systémy Microsoft

2

80

12.01.2013 23:13

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

pristup k suborom na serveri

v Ostatné

10

1152

02.12.2006 19:25

neopagan



© 2005 - 2017 PCforum, edited by JanoF