Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis danych jednocześnie do kilku pików txt
Forum PHP.pl > Forum > PHP > Object-oriented programming
kubax33
witam,
mam problem ponieważ chciałbym zapisać dane przesłane z formularza do kilku plików na raz. Mam taki skrypt

  1. <?php
  2.  
  3. $nazwa_pliku = 'plikk.txt';
  4.  
  5. if (is_writeable($nazwa_pliku))
  6. {
  7. if ($plik = fopen($nazwa_pliku, "w+"))
  8. {
  9. if (fwrite($plik, "dane do zapisania") !== FALSE)
  10.  
  11. echo 'Zapis do pliku zakończył się powodzeniem...';
  12. else echo "Zapis do pliku się nie powiódł...";
  13.  
  14. fclose($plik);
  15.  
  16. } else echo "Nie mogę nawiązać połączenia z plikiem...";
  17.  
  18. } else echo "Do pliku nie można dopisać informacji lub on nie istnieje..."
  19.  
  20. ?>
  21.  


no i ten skrypt zapisuje dane tylko do pliku "plik.txt" a jak zrobić aby określone przesłane dane zapisywano do ustalonego pliku np.
dane 1 z formularza zapisuje do plik.txt
dane 2 z formularza zapisuje do plik2.txt

wszystko w jednym skrypcie...

teraz mam to zrobione z kilku takich skryptów ale idzie to myślę zrobić lepiej funkcjonalne w taki sposób.

czy jest to w ogóle wykonalne? Jak to zrobić? proszę po pomoc
dziękuje
Marcstee
Jeżeli dobrze rozumiem, to chcesz aby w zależności od formularza dane były zapisywane do różnych plików. Jeżeli tak to robisz w ten sposób, że dodajesz do formularzy jakiegoś hiddena o nazwie dajmy na to id_form i potem robisz tak:
  1. <?php
  2. switch ($id_form){
  3. case 1:
  4. $nazwa_pliku = 'plikk1.txt';
  5. break;
  6. case 2:
  7. $nazwa_pliku = 'plikk2.txt';
  8. break;
  9. default:
  10. $nazwa_pliku = 'plikk1.txt';
  11. break;
  12. }
  13. if (is_writeable($nazwa_pliku))
  14. {
  15. if ($plik = fopen($nazwa_pliku, "w+"))
  16. {
  17. if (fwrite($plik, "dane do zapisania") !== FALSE)
  18.  
  19. echo 'Zapis do pliku zakończył się powodzeniem...';
  20. else echo "Zapis do pliku się nie powiódł...";
  21.  
  22. fclose($plik);
  23.  
  24. } else echo "Nie mogę nawiązać połączenia z plikiem...";
  25.  
  26. } else echo "Do pliku nie można dopisać informacji lub on nie istnieje..."
  27.  
  28. ?>


Po zmienną $id_form podstawiasz oczywiście wartość odpowiedniego pola z formularza i gra. Dodatkowo można by to w jakieś klasie zamknąć a sam proces zapisu do funkcji dla przejrzystości kodu gdzyż na razie to mało obiektowo (patrząc na dział) jest napisane.
kubax33
sorry może źle troszkę się wypowiedziałem... więc dane są wysyłane z jednego formularza i ma wyglądać to mniej więcej tak:
formularz zawiera cztery pola input tj. numer, cena, data, kolor.
Następnie wysyłany jest do pliku zapisującego, który będzie zapisywał np. dane z pola numer do pliku numer.txt , dane z pola cena do pliku cena.txt
O to mi chodzi żeby ten skrypt rozszerzyć tak jak ty to zrobiłeś aby w jednym skrypcie razem były zapisywane po kolei dane z formularza bezpośrednio do odpowiadających plików.
zegarek84
PRZYKŁAD KODU GDZIE KIEDYŚ ROZDZIELAŁEM/SORTOWAŁEM a wcześniej obrabiałem dane po czym zapisywałem do różnych CSV

musisz mieć osobne uchwyty do każdego z plików... można to by zrobić w pętli ale skoro daleś w dziale obiektowym więc masz przykłady które mam pod ręką:
  1. class saveFileAsCSV {
  2. private $kotwica;
  3. private $separator;
  4. public function __construct($name, $separator="\t") {
  5. $this->separator=$separator;
  6. $this->kotwica = fopen($name.'.csv', 'w');
  7. }
  8. public function writeRow($row) {
  9. fputcsv($this->kotwica, $row, $this->separator);
  10. }
  11. public function writeArray($array) {
  12. foreach ($array as $row) {
  13. fputcsv($this->kotwica, $row, $this->separator);
  14. }
  15. }
  16. public function __destruct() {
  17. fclose($this->kotwica);
  18.  
  19. $vars=get_object_vars($this);
  20. while(list($key)=each($vars)) {
  21. unset ($this->$key);
  22. };
  23. unset($vars,$key);
  24.  
  25. }
  26. }

i kolejny który w danej chwili służył za "sterownik" [możesz to całkiem inaczej napisać - to tylko przykład] [zwróć tutaj uwagę na metodę addRowToFile]:
  1. class sterownik_filtr {
  2. private $saveToFile;
  3. private $naglowki;
  4. private $katalog;
  5. public function __construct($katalog='./',$naglowki=null) {
  6. if(isset ($naglowki))$this->naglowki=$naglowki;
  7. $this->katalog=$katalog;
  8. }
  9.  
  10. public function adRowToFile($file,$row){
  11. if(!isset($this->saveToFile[$this->katalog.$file])){
  12. $this->saveToFile[$this->katalog.$file]=new saveFileAsCSV($this->katalog.$file);
  13. if(isset($this->naglowki))$this->saveToFile[$this->katalog.$file]->writeRow($this->naglowki);
  14. }
  15. $this->saveToFile[$this->katalog.$file]->writeRow($row);
  16. }
  17.  
  18. public function __destruct() {
  19. unset($this->naglowki,$this->saveToFile);
  20. }
  21. }

w destruktorze zwalniałem uchwyty... i z tego co widzę musisz zamienić 'w' na 'w+' gdyż chyba taki sposób zapisu jest Ci potrzebny...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.