Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Edycja postów zapisanych w .txt
ZeTu
post
Post #1





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


Witam
Mam wykonany skrypt do tworzenia i edycji postów i mam pewien problem. Mianowicie kod do edycji postów nie edytuje prawidłowo treści, nie umiem tego za bardzo wyjaśnić, ale na przykładzie to wyjaśnię.
A to kod edycji postów:
  1. ...
  2. $aid = $_GET['edytuj3'];
  3. if(!empty($aid)) {
  4. if(is_file('$aid')) include '$aid';
  5. else
  6.  
  7. echo '
  8. <br><b><br>Edycja strony</b>';
  9. $ide = $aid - 1;
  10. $tytul=chop($_POST["tytul"]);
  11. $tresc=chop($_POST["tresc"]);
  12. $folder = "$pliczek";
  13. $file=file("$folder");
  14. $dane=explode(" | ", $file[$ide]);
  15. $zero=$dane[0];
  16. $name=$dane[1];
  17. $link=$dane[2];
  18. $enter=$dane[3];
  19. $text = $plik1;
  20. $ad1 = $link;
  21. $ad2 = '$tresc';
  22. $be1 = $name;
  23. $be2 = '$tytul';
  24.  
  25. $plik = fopen("$folder", "r");
  26. $plik1 = fread($plik, 10240);
  27.  
  28.  
  29. $be1 = str_replace("+", " ", $be1);
  30. $ad1 = str_replace("+", " ", $ad1);
  31. $ad1 = str_replace("<br>", "
  32. ", $ad1);
  33.  
  34.  
  35. if ($_POST["Edycja3"]!="")
  36. {
  37. $ide = $aid - 1;
  38. $tytul=chop($_POST["tytul"]);
  39. $tresc=chop($_POST["tresc"]);
  40. $folder = "$pliczek";
  41. $file=file("$folder");
  42. $dane3=explode("", $file[0]);
  43. $ze=$dane3[0];
  44. $dane=explode(" | ", $file[$ide]);
  45. $zero=$dane[0];
  46. $name=$dane[1];
  47. $link=$dane[2];
  48. $enter=$dane[3];
  49. $enter = '
  50. ';
  51. $text = $plik1;
  52. $ad1 = $link;
  53. $ad2 = chop($_POST["tresc"]);
  54. $be1 = $name;
  55. $be2 = chop($_POST["tytul"]);
  56.  
  57. $plik = fopen("$folder", "r");
  58. $plik1 = fread($plik, 10240);
  59.  
  60. $ad2 = str_replace(" ", "+", $ad2);
  61. $be2 = str_replace(" ", "+", $be2);
  62.  
  63. $text = str_replace("$ad1", "$ad2", $text);
  64. $text = str_replace("$be1", "$be2", $text);
  65.  
  66.  
  67. file_put_contents($folder, $text);
  68. fclose($plik);
  69. echo("<br><br>Zapisano zmiany<br><a href='?panele=lista'>Zobacz efekt</a>");
  70. }
  71. else
  72. {
  73. echo <<<KONIEC
  74. <form method="POST" action="">
  75. <table>
  76. <p>
  77. <tr><td>Tytuł:</td><td><input type="text" name="tytul" size=20 value="$be1"></td> </tr>
  78. <tr><td>Treść:</td><td><textarea name="tresc" cols="25" rows="12">$ad1</textarea>
  79. </td> </tr>
  80. </p>
  81. <tr><td></td>
  82. <td><input type="submit" value="Zapisz zmiany" name="Edycja3"></td></tr>
  83. </table></form>
  84. KONIEC;
  85. }
  86. }
  87. ...

A to kod w .txt który jest przed edycją:
  1. tytul | tresc+mojego+posta
  2. tytul 2 | tresc+mojego+posta+22

I jeśli chcę zmienić tytul w pierwszej linii, to kod pobiera ta linie i wpisuje w formularz, po zmianie danych np. z "tytul" na "tytul2", to zamiast edytować w tej pobranej linii edytuje w całym pliku to słowo i wtedy kod wygląda tak:
  1. tytul2 | tresc+mojego+posta
  2. tytul2 2 | tresc+mojego+posta+22

A więc jak zrobić aby edytowało tylko z wybranej linii? Trochę pomieszałem w kodzie, ale mam nadzieję, że ktoś z was pomoże mi ten kod jakoś prawidłowo zedytować.
Go to the top of the page
+Quote Post
buliq
post
Post #2





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


  1. str_replace("$ad1", "$ad2", $text);
  2. $text = str_replace("$be1", "$be2", $text);


Czytałeś co robi str_replace ? Zamienia każde słowo na inne. Więc normalnie że zamienia. Zmodyfikuj skrypt i przed każdym postem(na początku każdej lini) wstawiaj jakiś unikalny ID lub posługuj się numerem lini.
Go to the top of the page
+Quote Post
ZeTu
post
Post #3





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


No wiem, że zmienia każde słowo. Tylko nie wiem jak zrobić żeby zmieniało tak jak tego chce.
No własnie tak robie że posługuje się nr'em linii. Wiem jak wyciągąć z odpowiedniej linii do formularza za pomocą którego zedytuje sobie daną zawartość danej linii, ale nie wiem jak zrobić by zmieniało właśnie tylko wtej wybranej linii, a nie że jak zapisuje to zmienia mi w całym pliku (IMG:style_emoticons/default/sad.gif) edytuje każdą linię w taki sposób:
penel.php?edytuj3=nrlinii
np. penel.php?edytuj3=1
i edytuje mi linię pierwszą, ale to chyba widać, z resztą za pomocą
  1. $aid = $_GET['edytuj3'];
i
  1. $ide = $aid - 1;
oraz
  1. $dane=explode(" | ", $file[$ide]);


Ten post edytował ZeTu 31.12.2011, 16:25:53
Go to the top of the page
+Quote Post
buliq
post
Post #4





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


To skoro wiesz która linia to znasz jej treść przed edycją i po edycji. Nie możesz zamienić całej lini?
Go to the top of the page
+Quote Post
ZeTu
post
Post #5





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


Ale w jaki sposób mam to zrobić?, np. w taki:
  1. $file[$ide] = str_replace("$ad1 | $be1", "$ad2 | $be2",$file[$ide]);


Ten post edytował ZeTu 31.12.2011, 16:54:08
Go to the top of the page
+Quote Post
buliq
post
Post #6





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


$ad1 i $ad2 to tylko tytuły tak? więc nie tak. Musisz pobrać całą zawartość lini przed explode i tą linię zastąpić nową linią. Czyli $file[0] zastępujesz nową linią ($_POST z tytułem i treścią łączysz do odpowiedniego formatu)

@up tak dokładnie jak poprawiłeś

Ten post edytował buliq 31.12.2011, 16:56:12
Go to the top of the page
+Quote Post
ZeTu
post
Post #7





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


I teraz będzie na pewno dobrze?
Go to the top of the page
+Quote Post
buliq
post
Post #8





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Sprawdź (IMG:style_emoticons/default/smile.gif) Nic nie jest pewne (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
ZeTu
post
Post #9





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


No nie jaki żal
Zmieniłem jeszcze z
  1. file_put_contents($folder, $text);
na
  1. file_put_contents($folder, $file[$ide]);
i teraz zamiast zapisać to usuwa wszystkie linie i zapisuje tylko to co jest w formularzu ;/
Go to the top of the page
+Quote Post
Uriziel01
post
Post #10





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Przypisz dla tych postów unikalne ID, po tym parsuj plik. Pobieraj całą zawartość pliku, dziel na posty, znajdź po ID interesujący cię post, potem przenieś całą wczytaną tablicę postów na powrót do pliku. To samo z usuwaniem i dodawaniem. Str_repleace zapewne będzie 100x szybsze przy naprawdę dużych plikach (kilka tysięcy linii) ale skoro już wybrałeś zapis do pliku. .txt zamiast bazy danych to przy okazji przekonałeś się dlaczego znakomita większość korzysta jednak z zapisu do DB.
Go to the top of the page
+Quote Post
ZeTu
post
Post #11





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


Z usuwaniem i dodawanie to nie problem.
Czyli w jaki sposób mam edytować daną linijkę?
Mam zrobić tak samo jak tutaj:
  1. $file[$ide] = str_replace("$ad1 | $be1", "$ad2 | $be2",$file[$ide]);

tylko zamiast
  1. $file[$ide]

dać nr id?
A właśnie czemu mam dawać to id? Nie może być tak, że nr'em id jest nr linii? Bo teraz jak mam dopisywać do tego pliku .txt jeszcze id, to będę musiał od nowa pisać ten kod php. A robię na plikach .txt bo jestem początkujący, a jak obczaje bardziej .php + .txt to wtedy przejdę na .php + MySQL

Ten post edytował ZeTu 31.12.2011, 17:41:10
Go to the top of the page
+Quote Post
Uriziel01
post
Post #12





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Używasz jakiegoś kodowania/szyfrowania do zapisu treści post'a ? Jeżeli nie to numer linii zmieni się gdy w poście będzie zawarty znak nowej linii.
Co do tego że jesteś początkujący, lepiej zacznij od baz danych zamiast pllików tekstowych, jest to imho o wiele łatwiejsze w implementacji. A po drugie mają one niezliczoną ilość zalet.

Ten post edytował Uriziel01 31.12.2011, 18:04:58
Go to the top of the page
+Quote Post
ZeTu
post
Post #13





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

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


A dobra, nie to nie. kurde jak dodaje kolejny post to dodaje go na końcu pliku czyli id się nie zmienia!
Ok już sobie poradziłem zrobiłem to tak:
  1. $file[$ide] = str_replace("$ad1 | $be1", "$ad2 | $be2",file_get_contents($folder));
  2. file_put_contents($folder, $file[$ide]);


Ten post edytował ZeTu 31.12.2011, 19:05:29
Go to the top of the page
+Quote Post
bambam
post
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.09.2011

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


zakoncz kazdy rekord jakims znakiem i pobieraj az do jego napotkania, kazde wystapienie tego znaku to kolejny post.

id | tresc |autor | data ;

pobierasz do ; pozniej explodujeszz linijke za pomoca |
zapisujesz sobie numer lini gdzie zaczal sie ten post edytujesz jakie chcesz dane otrzymane po explode i zapisujesz w to samo miejsce albo na koncu

nie rozumiem z czym tu masz problem ?

W przyszlosci i tak w wiekszosci przypadkow bedziesz parsowal csv'alki albo xmle w ktorych reguly beda sie zmieniac przy kazdym innym zadaniu praktycznie,
rzadko kiedy ktos uzywa .txt



Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.12.2025 - 18:44