Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Edycja danych z pliku *.txt.
moto0095
post 11.04.2010, 18:48:34
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Witam. Szukałem w google, sam kombinowałem, i nic sad.gif.
A więc tak jak w temacie chodzi mi o skrypt który pozwalał by na edycję danych z pliku *.txt.
Dokładnie taki jak [TUTAJ].
Zna ktoś coś takiego questionmark.gifquestionmark.gifquestionmark.gif

P.S. - strasznie mi jest to potrzebne.

Kombinując dalej udało mi się uzyskać coś takiego:
  1. <?php
  2. $plik = "db.txt";
  3.  
  4. if ((isset($_POST['usun'])) AND (is_numeric($_POST['usun']))) {
  5. /* sprawdzam czy zmienna $_POST['usun'] zostala zainicjonowana i czy jest cyfrą */
  6.  
  7. $dane = file($plik); /* pobieram dane z pliku */
  8. unset($dane[$_POST['usun']]); /* usuwam wybrany rekord tablicy */
  9. $f = fopen($plik, "w"); /* nawiązuje połączenie z plikiem i kasuje jego zawartosc */
  10. foreach($dane as $linia){
  11. $linia = $_POST['text'];
  12. fputs($f, $linia); /* wprowadzam linie po linii do pliku */
  13. }
  14. fclose($f); /* zamykam polączneie z plikiem */
  15.  
  16. }
  17.  
  18. ?>
  19.  
  20. <form action="" method="post">
  21. <?php
  22. $dane = file($plik);
  23.  
  24. for($i=0;$i<count($dane);$i++) {
  25. list($imie[$i], $nazwisko[$i], $miejscowosc[$i]) = explode(" || ", $dane[$i]);
  26. }
  27.  
  28. for($i=0;$i<count($imie);$i++)
  29. echo '<input type="radio" name="usun" value="'.$i.'">'.$imie[$i]." ".$nazwisko[$i].", ".$miejscowosc[$i]."<br>";
  30.  
  31. ?>
  32. <input type="text" name="text">
  33. <input type="submit" value="zmien" />
  34. </form>


lecz to usuwa całą zawartość pliku i zastępuje ją tą wpisaną.
A jak zrobić aby tylko dana linia się zmieniała questionmark.gifquestionmark.gif

Ten post edytował moto0095 11.04.2010, 18:59:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
mortus
post 11.04.2010, 19:02:25
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Wszystko zależy od zawartości pliku *.txt. Normalnie można pobrać jego zawartość funkcją file_get_contents() i załadować do jako treść elementu <textarea> w formularzu. Jeśli natomiast plik *.txt ma określone formatowanie (np. linii) to trzeba kombinować z innymi elementami formularza HTML.

Ten post edytował mortus 11.04.2010, 19:20:56
Go to the top of the page
+Quote Post
moto0095
post 11.04.2010, 19:50:24
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Dane w pliku zapisują się tak:
jeden||dwa||trzy
jeden||dwa||trzy
jeden||dwa||trzy
jeden||dwa||trzy
jeden||dwa||trzy
(...)



I nie mam kompletnie pomysłu jak to zrobić. Bo mam dwa skryty, jeden dodaje, a drugi usuwa i nie wiem jak to połączyć:
Dodawanie:
  1. <?php
  2. if ($_POST['button'] == "wyslij") {
  3. /* sprawdzam czy dane zostały wysłane z formularza */
  4. $plik = "db.txt";
  5. if (is_writeable($plik)) {
  6. /* sprawdzam czy plik jest do zapisu */
  7. if (!$handle = fopen($plik, "a")) echo "Nie mogę otworzyć pliku...";
  8. if (fwrite($handle, $_POST['imie']." || ".$_POST['nazwisko']." || ".$_POST['miejscowosc']."
  9. ") === FALSE) echo "Nie mogę zapisać danych do pliku...";
  10. else echo "Dane zostały dodane...";
  11. fclose($handle);
  12.  
  13.  
  14. } else echo "Plik nie istnieje lub jest nie do zapisu...";
  15. }
  16. ?>
  17.  
  18. <form action="dodaj.php" method="post">
  19. Imię: <input type="text" name="imie" /><br />
  20. Nazwisko: <input type="text" name="nazwisko" /><br />
  21. Miejscowość: <input type="text" name="miejscowosc" /><br />
  22. <input type="submit" name="button" value="wyslij" />
  23. </form>



i Usuwanie:
  1. <?php
  2. $plik = "db.txt";
  3.  
  4. if ((isset($_POST['usun'])) AND (is_numeric($_POST['usun']))) {
  5. /* sprawdzam czy zmienna $_POST['usun'] zostala zainicjonowana i czy jest cyfrą */
  6.  
  7. $dane = file($plik); /* pobieram dane z pliku */
  8. unset($dane[$_POST['usun']]); /* usuwam wybrany rekord tablicy */
  9.  
  10. $f = fopen($plik, "w"); /* nawiązuje połączenie z plikiem i kasuje jego zawartosc */
  11. foreach($dane as $linia){
  12. fputs($f, $linia); /* wprowadzam linie po linii do pliku */
  13. }
  14. fclose($f); /* zamykam polączneie z plikiem */
  15.  
  16. }
  17.  
  18. ?>
  19.  
  20. <form action="usun.php" method="post">
  21. <select name="usun">
  22. <?php
  23. $dane = file($plik);
  24.  
  25. for($i=0;$i<count($dane);$i++) {
  26. list($imie[$i], $nazwisko[$i], $miejscowosc[$i]) = explode(" || ", $dane[$i]);
  27. }
  28.  
  29. for($i=0;$i<count($imie);$i++)
  30. echo '<option value="'.$i.'">'.$imie[$i]." ".$nazwisko[$i].", ".$miejscowosc[$i]."</option>";
  31.  
  32. ?>
  33. </select>
  34. <input type="submit" value="usun" />
  35. </form>


Ma ktoś jakiś pomysłquestionmark.gifquestionmark.gifquestionmark.gif
Go to the top of the page
+Quote Post
mortus
post 11.04.2010, 21:35:31
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Przykładowy plik edycja.php
  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. // pobieramy aktualne dane z pliku i zapisujemy je w tablicy data
  5. $file = file('dane.txt', FILE_IGNORE_NEW_LINES);
  6. foreach($file as $line) {
  7. $data[] = explode('||', $line);
  8. }
  9.  
  10. if(!empty($_POST) && $_POST['action'] == 'saveChanges') {
  11. $row = $_POST['row'];
  12. $firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
  13. $lastname = isset($_POST['lastname']) ? $_POST['lastname'] : '';
  14. $city = isset($_POST['city']) ? $_POST['city'] : '';
  15. $data[$row][0] = $firstname;
  16. $data[$row][1] = $lastname;
  17. $data[$row][2] = $city;
  18. $file = fopen("dane.txt", "w");
  19. foreach($data as $line){
  20. $newline = implode('||', $line);
  21. fputs($file, $newline . "\n");
  22. }
  23. fclose($file);
  24. }
  25.  
  26. if(isset($_GET['action'])) {
  27. if($_GET['action'] == 'edit' && isset($_GET['row']) && $_GET['row'] != '') {
  28. $row = $_GET['row'];
  29. ?>
  30. <form action="edycja.php" method="post">
  31. <input type="hidden" name="action" value="saveChanges" />
  32. <input type="hidden" name="row" value="<?php echo $row; ?>" />
  33. <dl>
  34. <dt>Imię:</dt>
  35. <dd><input type="text" name="firstname" value="<?php echo $data[$row][0]; ?>" /></dd>
  36. </dl>
  37. <dl>
  38. <dt>Nazwisko:</dt>
  39. <dd><input type="text" name="lastname" value="<?php echo $data[$row][1]; ?>" /></dd>
  40. </dl>
  41. <dl>
  42. <dt>Miejscowość:</dt>
  43. <dd><input type="text" name="city" value="<?php echo $data[$row][2]; ?>" /></dd>
  44. </dl>
  45. <input type="submit" value="Zapisz zmiany" />
  46. </form>
  47. <?php
  48. }
  49. }
  50.  
  51. // wyświetlamy dane w odpowiedni sposób
  52. ?>
  53. <style type="text/css">
  54. td {
  55. width: 150px;
  56. }
  57. </style>
  58. <table cellspacing="0" cellpadding="0" border="0">
  59. <tr><td>Imię</td><td>Nazwisko</td><td>Miejscowość</td><td>Akcja</td></tr>
  60. <?php
  61. foreach($data as $rowNumber => $row) {
  62. ?>
  63. <tr>
  64. <td><?php echo $row[0]; ?></td>
  65. <td><?php echo $row[1]; ?></td>
  66. <td><?php echo $row[2]; ?></td>
  67. <td><a href="edycja.php?action=edit&row=<?php echo $rowNumber; ?>">Edytuj</a></td>
  68. </tr>
  69. <?php
  70. }
  71. ?>
  72. </table>


To po linii 6 wstaw
  1. echo '<pre>';
  2. print_r($file);
  3. echo '</pre>';
i wklej tutaj całą tablicę, jaką wypluje skrypt.

EDIT:
To oznaczało, że w pliku nie masz wcale trzech wartości w jednej linii oddzielonych przez '||'. Ale widzę, że usunąłeś posta.

Ten post edytował mortus 11.04.2010, 21:37:39
Go to the top of the page
+Quote Post
moto0095
post 11.04.2010, 21:43:38
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Usunąłem bo nie zmieniłem nazwy pliku z dane.txt na db.txt i dane zapisałem jeden||dwa|trzy .
Wszystko jest ok tylko jeżeli plik dane.txt jest pusty to wyświetla się
  1. Notice: Undefined variable: data in /home/a8963311/public_html/WAZNE/plikitxt/edycja.php on line 62
  2.  
  3. Warning: Invalid argument supplied for foreach() in /home/a8963311/public_html/WAZNE/plikitxt/edycja.php on line 62


Czy da się jakoś temu zaradzić questionmark.gif
A raczej jak??

Ten post edytował moto0095 11.04.2010, 21:44:46
Go to the top of the page
+Quote Post
mortus
post 11.04.2010, 21:48:06
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Da się. Po linii 6 trzeba dać warunek
  1. if(count($file) == 0) {
i objąć nim całą resztę kodu, tzn. nawias zamykający } powinien być na końcu. Można na końcu dać
  1. } else {
  2. echo 'Brak danych!';
  3. }
Go to the top of the page
+Quote Post
mortus
post 11.04.2010, 22:00:00
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Miało być na końcu
  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. // pobieramy aktualne dane z pliku i zapisujemy je w tablicy data
  5. $file = file('dane.txt', FILE_IGNORE_NEW_LINES);
  6. if(count($file) != 0) {
  7. foreach($file as $line) {
  8. $data[] = explode('||', $line);
  9. }
  10.  
  11. if(!empty($_POST) && $_POST['action'] == 'saveChanges') {
  12. $row = $_POST['row'];
  13. $firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
  14. $lastname = isset($_POST['lastname']) ? $_POST['lastname'] : '';
  15. $city = isset($_POST['city']) ? $_POST['city'] : '';
  16. $data[$row][0] = $firstname;
  17. $data[$row][1] = $lastname;
  18. $data[$row][2] = $city;
  19. $file = fopen("dane.txt", "w");
  20. foreach($data as $line){
  21. $newline = implode('||', $line);
  22. fputs($file, $newline . "\n");
  23. }
  24. fclose($file);
  25. }
  26.  
  27. if(isset($_GET['action'])) {
  28. if($_GET['action'] == 'edit' && isset($_GET['row']) && $_GET['row'] != '') {
  29. $row = $_GET['row'];
  30. ?>
  31. <form action="edycja.php" method="post">
  32. <input type="hidden" name="action" value="saveChanges" />
  33. <input type="hidden" name="row" value="<?php echo $row; ?>" />
  34. <dl>
  35. <dt>Imię:</dt>
  36. <dd><input type="text" name="firstname" value="<?php echo $data[$row][0]; ?>" /></dd>
  37. </dl>
  38. <dl>
  39. <dt>Nazwisko:</dt>
  40. <dd><input type="text" name="lastname" value="<?php echo $data[$row][1]; ?>" /></dd>
  41. </dl>
  42. <dl>
  43. <dt>Miejscowość:</dt>
  44. <dd><input type="text" name="city" value="<?php echo $data[$row][2]; ?>" /></dd>
  45. </dl>
  46. <input type="submit" value="Zapisz zmiany" />
  47. </form>
  48. <?php
  49. }
  50. }
  51.  
  52. // wyświetlamy dane w odpowiedni sposób
  53. ?>
  54. <style type="text/css">
  55. td {
  56. width: 150px;
  57. }
  58. </style>
  59. <table cellspacing="0" cellpadding="0" border="0">
  60. <tr><td>Imię</td><td>Nazwisko</td><td>Miejscowość</td><td>Akcja</td></tr>
  61. <?php
  62. foreach($data as $rowNumber => $row) {
  63. ?>
  64. <tr>
  65. <td><?php echo $row[0]; ?></td>
  66. <td><?php echo $row[1]; ?></td>
  67. <td><?php echo $row[2]; ?></td>
  68. <td><a href="edycja.php?action=edit&row=<?php echo $rowNumber; ?>">Edytuj</a></td>
  69. </tr>
  70. <?php
  71. }
  72. ?>
  73. </table>
  74. <?php
  75. } else {
  76. echo 'Brak danych!';
  77. }
  78. ?>


EDIT:
@down Wystarczyło warunek zmienić na if(count($file) != 0).

Ten post edytował mortus 11.04.2010, 23:53:59
Go to the top of the page
+Quote Post
moto0095
post 11.04.2010, 22:11:00
Post #8





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Już sobie sam to zrobiłem smile.gif.
BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO BARDZO CI DZIĘKUJĘ mortus exclamation.gif exclamation.gif exclamation.gif exclamation.gif smile.gif

Tylko, że ten plik powinien wyglądać tak:
  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. // pobieramy aktualne dane z pliku i zapisujemy je w tablicy data
  5. $file = file('db.txt', FILE_IGNORE_NEW_LINES);
  6. if(count($file) == 0) {
  7. echo 'Brak danych!';
  8. }else{
  9. foreach($file as $line) {
  10. $data[] = explode('||', $line);
  11. }
  12.  
  13. if(!empty($_POST) && $_POST['action'] == 'saveChanges') {
  14. $row = $_POST['row'];
  15. $firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
  16. $lastname = isset($_POST['lastname']) ? $_POST['lastname'] : '';
  17. $city = isset($_POST['city']) ? $_POST['city'] : '';
  18. $data[$row][0] = $firstname;
  19. $data[$row][1] = $lastname;
  20. $data[$row][2] = $city;
  21. $file = fopen("db.txt", "w");
  22. foreach($data as $line){
  23. $newline = implode('||', $line);
  24. fputs($file, $newline . "\n");
  25. }
  26. fclose($file);
  27. }
  28.  
  29. if(isset($_GET['action'])) {
  30. if($_GET['action'] == 'edit' && isset($_GET['row']) && $_GET['row'] != '') {
  31. $row = $_GET['row'];
  32. ?>
  33. <form action="edycja.php" method="post">
  34. <input type="hidden" name="action" value="saveChanges" />
  35. <input type="hidden" name="row" value="<?php echo $row; ?>" />
  36. <dl>
  37. <dt>Imię:</dt>
  38. <dd><input type="text" name="firstname" value="<?php echo $data[$row][0]; ?>" /></dd>
  39. </dl>
  40. <dl>
  41. <dt>Nazwisko:</dt>
  42. <dd><input type="text" name="lastname" value="<?php echo $data[$row][1]; ?>" /></dd>
  43. </dl>
  44. <dl>
  45. <dt>Miejscowość:</dt>
  46. <dd><input type="text" name="city" value="<?php echo $data[$row][2]; ?>" /></dd>
  47. </dl>
  48. <input type="submit" value="Zapisz zmiany" />
  49. </form>
  50. <?php
  51. }
  52. }
  53.  
  54. // wyświetlamy dane w odpowiedni sposób
  55. ?>
  56. <style type="text/css">
  57. td {
  58. width: 150px;
  59. }
  60. </style>
  61. <table cellspacing="0" cellpadding="0" border="0">
  62. <tr><td>Imię</td><td>Nazwisko</td><td>Miejscowość</td><td>Akcja</td></tr>
  63. <?php
  64. foreach($data as $rowNumber => $row) {
  65. ?>
  66. <tr>
  67. <td><?php echo $row[0]; ?></td>
  68. <td><?php echo $row[1]; ?></td>
  69. <td><?php echo $row[2]; ?></td>
  70. <td><a href="edycja.php?action=edit&row=<?php echo $rowNumber; ?>">Edytuj</a></td>
  71. </tr>
  72. <?php
  73. }
  74. ?>
  75. </table>
  76. <?php
  77. }
  78. ?>


bo tak jak ty podałeś zawsze wyświetli "Brak danych!" smile.gif

Ten post edytował moto0095 11.04.2010, 22:02:02
Go to the top of the page
+Quote Post
Potar
post 13.04.2010, 13:52:34
Post #9





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 27.02.2010

Ostrzeżenie: (20%)
X----


Wszystko działa a masz może napisany skrypt dodawania ? Bo tu tylko odczytuje i da sie edytować a ja chcę aby też dodawał.

Ten post edytował Potar 13.04.2010, 14:26:02


--------------------
Odwiedź moją stronę!
Go to the top of the page
+Quote Post
moto0095
post 14.04.2010, 14:34:50
Post #10





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Tu masz plik dodawania:
  1. <?php
  2. /*********************************************
  3. * plik formularz.php
  4. *********************************************/
  5.  
  6. $pole1 = trim($_POST['pole1']);
  7. $pole2 = trim($_POST['pole2']);
  8.  
  9. if(empty($pole1) and empty($pole2)) {
  10.  
  11. // prosty formularz zawierający dwa pola
  12. echo '<form action="" method="post">
  13. <input type="text" name="pole1" style="width: 200px;" /><br />
  14. <textarea name="pole2" style="width: 200px; height: 100px;">
  15. </textarea><br />
  16. <input type="submit" value="Zapisz" />
  17. </form>';
  18. }
  19. else {
  20.  
  21. // dane pochodzące z formularza
  22. $dane = $pole1."`".$pole2."\n";
  23. // przypisanie zmniennej $file nazwy pliku
  24. $file = "baza.txt";
  25. // uchwyt pliku, otwarcie do dopisania
  26. $fp = fopen($file, "a");
  27. // blokada pliku do zapisu
  28. flock($fp, 2);
  29. // zapisanie danych do pliku
  30. fwrite($fp, $dane);
  31. // odblokowanie pliku
  32. flock($fp, 3);
  33. // zamknięcie pliku
  34. fclose($fp);
  35.  
  36. echo "Dane zostały zapisane!<br />";
  37. echo "<a href=\"podglad.php\">Zobacz wpisane dane</a>";
  38. }
  39.  
  40. ?>


skonfiguruj sobie smile.gif.

i jeszcze wyświetlanie
  1. <?php
  2. /*********************************************
  3. * plik podglad.php
  4. *********************************************/
  5.  
  6. // wczytanie zawartości pliku do tablicy
  7. $file = file("baza.txt");
  8. // przechodzimy przez tablicę za pomocą pętli foreach
  9. foreach($file as $value) {
  10. // rozbijamy poszczególne linie na części
  11. $exp = explode("`",$value);
  12. // wyświetlamy rozbity tekst
  13. echo $exp[0]."<br />".$exp[1]."<hr />";
  14. }
  15.  
  16. ?>


kod pochodzi z KESS.

A tutaj masz cały artykuł na temat pracy na plikach http://webmade.org/porady/baza-danych-opar...plikach-php.php
Go to the top of the page
+Quote Post
Pilsener
post 14.04.2010, 20:36:09
Post #11





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Ten artykuł jest niewiele warty, wczytuje się do tablicy co najwyżej pliki .ini, .cfg a nie bazy danych! Kto normalny wczytuje do pamięci cały plik by wyświetlić linijkę albo parę? Już przy 100-150 rekordach zacznie Wam mulić, a pracuje się nieraz z plikami po kilkaset mega (np. różne logi). Poczytajcie lepiej to:
http://www.forumweb.pl/viewtopic.php?t=39103
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:58