Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Edycja danych z pliku *.txt.
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
moto0095
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
mortus
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.
moto0095
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
mortus
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.
moto0095
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??
mortus
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. }
mortus
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).
moto0095
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
Potar
Wszystko działa a masz może napisany skrypt dodawania ? Bo tu tylko odczytuje i da sie edytować a ja chcę aby też dodawał.
moto0095
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
Pilsener
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
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.