Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Formularz wyszukujący i zmieniający tekst w pliku, Formularz wyszukujący i zmieniający tekst w pliku
someone007
post 14.09.2016, 22:50:53
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 19.01.2005

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


Cześć
na wstępie zaznaczę tylko, że szukałem tego rozwiązania zanim zapytałem tutaj. Proszę o przeczytanie

mam problem ponieważ jestem grafikiem, a do swojej pracy potrzebuję wiedzy programistycznej.
Otóż stworzyłem animację zawierającą tekst w html5 (przy pomocy Adobe Animate).
Nie pytajcie czemu, ale potrzebuję w łatwy sposób móc zmienić tekst w tej animacji. Podmieniać tekst będzie osoba, która jest kompletnym laikiem i edytując plik ręcznie z pewnością coś zepsuje.
Dlatego potrzebuję formularza który:
1. poszuka w danym pliku określoną frazę pomiędzy resztą kodu
2. w tej frazie zmieni tekst na ten wprowadzony w polu input formularza

czyli np. treść tego pliku wygląda tak

jakiś kod coś tam coś tam
textdozmiany="jakis tekst"
skrypt znajduje ten tekst i podmienia na ten wprowadzony w formularzu, ale zachowuje resztę kodu
czyli: textdozmiany="podmieniony tekst"

teraz trudność, bo wyrażeń textdozmiany może być więcej niż jedno, dlatego wprowadziłem do pliku komentarze.
Skrypt powinien badać więc warunek

jeśli znalazł wyrażenie "komentarz1" i następnie znalazł textdozmiany to zamienił tekst na wprowadzony w 1 polu formularza
jeśli znalazł komentarz2 to poszukał pierwszy za nim texdozmiany i podmienił tekst na ten wpisany w drugim polu formularza.

Czytałem o operacjach na plikach,
ale przerasta mnie tego typu edycja i połączenie jeszcze tego z formularzem.
Gdyby ktoś był łaskaw podsunąć jakiś kawałek kodu żebym miał jakiś punkt zaczepienia, byłbym wdzięczny.

z góry dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
rafkon1990
post 15.09.2016, 17:38:39
Post #2





Grupa: Zarejestrowani
Postów: 37
Pomógł: 9
Dołączył: 14.09.2016
Skąd: Śląskie

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


struktura twojego pliku przypomina format plików INI.
A stąd już prosta droga do edycji tego pliku z formularzu metodami GET/POST (jak wolisz).


// plik konfiguracja.ini
textdozmiany="jakis tekst"
textdozmiany2="jakis tekst 2"


Najpierw odczytujemy aktualną konfigurację
  1. $konfiguracjaNazwaPliku="./konfiguracja.ini"
  2. $konfiguracjaTablica = parse_ini_file($konfiguracjaNazwaPliku);

i dokonujemy zmian
  1. $konfiguracjaTablica ["textdozmiany"] = $_POST["textdozmiany"]; // w tym elemencie tablicy POST powinny znajdować się nowe wartości przesłane z formularza
  2. $konfiguracjaTablica ["textdozmiany2"] = $_POST["textdozmiany2"]; // jak wyżej
  3. // .... dowolna ilość zmian

Teraz potrzeba jedynie zapisać zmienioną tablicę do pliku.
Istnieje tyle rozwiązań, ilu programistów. Oto jedno z rozwiązań zaproponowanych na php.net (nie testowane)
  1. function write_php_ini($array, $file)
  2. {
  3. $res = array();
  4. foreach($array as $key => $val)
  5. {
  6. if(is_array($val))
  7. {
  8. $res[] = "[$key]";
  9. foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"');
  10. }
  11. else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"');
  12. }
  13. safefilerewrite($file, implode("\r\n", $res));
  14. }
  15. function safefilerewrite($fileName, $dataToSave)
  16. { if ($fp = fopen($fileName, 'w'))
  17. {
  18. $startTime = microtime();
  19. do
  20. { $canWrite = flock($fp, LOCK_EX);
  21. // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
  22. if(!$canWrite) usleep(round(rand(0, 100)*1000));
  23. } while ((!$canWrite)and((microtime()-$startTime) < 1000));
  24.  
  25. //file was locked so now we can store information
  26. if ($canWrite)
  27. { fwrite($fp, $dataToSave);
  28. flock($fp, LOCK_UN);
  29. }
  30. fclose($fp);
  31. }
  32.  
  33. }

No i sama operacja zapisu tablicy
  1. write_php_ini($konfiguracjaTablica, $konfiguracjaNazwaPliku); // zapis do pliku nowych wartości


############################################################################
##### Działający i kompletny kod na prośbę pytającego
  1. <?php
  2.  
  3. # Twoje sekretne hasło - chroni plik konfiguracyjny przed zmianami za pomocą tego skryptu
  4. # podanie prawidłowego hasła umożliwia zmiany
  5. $password = "qwerty";
  6.  
  7. # nazwa pliku konfiguracyjnego INI
  8. $konfiguracjaNazwaPliku = "./konfiguracja.ini";
  9. $konfiguracjaTablica = parse_ini_file($konfiguracjaNazwaPliku);
  10. $message = "";
  11.  
  12. # sprawdzamy czy wysyłane było hasło
  13. if (isset($_REQUEST["password"])) {
  14. $passwordSent = $_REQUEST["password"];
  15. unset($_REQUEST["password"]);
  16. # jeśli hasło prawidłowe
  17. if ($passwordSent === $password) {
  18.  
  19. function write_php_ini($array, $file) {
  20. $res = array ();
  21. foreach ($array as $key => $val) {
  22. if (is_array($val)) {
  23. $res[] = "[$key]";
  24. foreach ($val as $skey => $sval) {
  25. $res[] = "$skey = " . (is_numeric($sval) ? $sval : '"' . $sval . '"');
  26. }
  27. } else {
  28. $res[] = "$key = " . (is_numeric($val) ? $val : '"' . $val . '"');
  29. }
  30. }
  31. safefilerewrite($file, implode("\r\n", $res));
  32. }
  33.  
  34. function safefilerewrite($fileName, $dataToSave) {
  35. $fp = fopen($fileName, 'w');
  36. if ($fp !== FALSE) {
  37. $startTime = microtime();
  38. do {
  39. $canWrite = flock($fp, LOCK_EX);
  40. if (!$canWrite) {
  41. usleep(round(rand(0, 100) * 1000));
  42. }
  43. } while ((!$canWrite)and ( (microtime() - $startTime) < 1000));
  44. if ($canWrite) {
  45. fwrite($fp, $dataToSave);
  46. flock($fp, LOCK_UN);
  47. }
  48. fclose($fp);
  49. }
  50. }
  51. write_php_ini($_REQUEST, $konfiguracjaNazwaPliku); // zapis do pliku nowych wartości
  52. } else {
  53. $message = "<h3 style=\"color: red; text-align: center;\">Nie prawidłowe hasło.</h3>";
  54. }
  55. $konfiguracjaTablica = $_REQUEST;
  56. }
  57.  
  58. # generujemy prosty formularz - dla każdej wartości klucz=wartość pliku INI zostanie wygenerowany input z opisem klucza
  59. $html = "
  60. <html>
  61. <body>
  62. <form method=\"POST\" >
  63. <table style=\"border: 1px solid black; padding: 5px; margin: auto;\">
  64. <tr><td style=\"min-width: 150px;\" colspan=2>$message</td></tr>
  65. ";
  66. foreach ($konfiguracjaTablica as $klucz => $wartosc) {
  67. $html .="<tr><td><label>$klucz</label></td><td><input type=\"text\" name=\"$klucz\" value=\"$wartosc\" /></td></tr>";
  68. }
  69.  
  70. $html .="
  71. <tr><td></td><td><br /></td></tr>
  72. <tr><td><label>Hasło:</label></td><td><input type=\"password\" name=\"password\" value=\"\" /></td></tr>
  73. <tr><td colspan=2><input type=\"submit\" value=\"wyslij\" style=\"min-width: 100px; padding: 5px; margin: 5px; float: right;\" /></td></tr>
  74. </table>
  75. </form>
  76. </body>
  77. </html>
  78. ";
  79.  
  80. # wyświetlenie formularza
  81. echo $html;
  82. ?>


i plik ini znajdujący się na serwerze

textdozmiany1 = "jakis tekst1"
textdozmiany2 = "jakis tekst2"
textdozmiany3 = "jakis tekst3"


Całość do testowania na byethost wraz z zablokowanym dostępem (poza skryptem) do pliku ini

Ten post edytował rafkon1990 15.09.2016, 17:55:27
Go to the top of the page
+Quote Post
someone007
post 15.09.2016, 19:26:53
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 19.01.2005

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


Po stokroć przeogromne dzięki!

Ostatnie tylko pytanko,

kod pliku który chcę zmienić wygląda tak:
  1. (function (lib, img, cjs, ss) {
  2.  
  3. var p; // shortcut to reference prototypes
  4.  
  5. // library properties:
  6. lib.properties = {
  7. width: 750,
  8. height: 200,
  9. fps: 25,
  10. color: "#FFFFFF",
  11. opacity: 1.00,
  12. manifest: [
  13. {src:"images/db.png?1473760814537", id:"db"}
  14. ]
  15. };
  16.  
  17.  
  18.  
  19. lib.ssMetadata = [];
  20.  
  21.  
  22. // symbols:
  23.  
  24.  
  25.  
  26. (lib.db = function() {
  27. this.initialize(img.db);
  28. }).prototype = p = new cjs.Bitmap();
  29. p.nominalBounds = new cjs.Rectangle(0,0,750,200);
  30.  
  31.  
  32. (lib.Klatkapośrednia2 = function(mode,startPosition,loop) {
  33. this.initialize(mode,startPosition,loop,{});
  34.  
  35. // Warstwa 1
  36. this.text = new cjs.Text("tekst do zmiany", "20px 'Arial'", "#FFFFFF");
  37. this.text.lineHeight = 24;
  38. this.text.lineWidth = 80;
  39. this.text.parent = this;
  40. this.text.setTransform(-39.7,-11.1);
  41.  
  42. this.timeline.addTween(cjs.Tween.get(this.text).wait(1));
  43.  
  44. }).prototype = p = new cjs.MovieClip();
  45. p.nominalBounds = new cjs.Rectangle(-41.7,-13.1,83.5,26.4);
  46.  
  47.  
  48. (lib.Klatkapośrednia1 = function(mode,startPosition,loop) {
  49. this.initialize(mode,startPosition,loop,{});
  50.  
  51. // Warstwa 1
  52. this.text = new cjs.Text("qwerty", "43px 'Arial'", "#FFFFFF");
  53. this.text.lineHeight = 50;
  54. this.text.lineWidth = 175;
  55. this.text.parent = this;
  56. this.text.setTransform(-87.5,-24);
  57.  
  58. this.timeline.addTween(cjs.Tween.get(this.text).wait(1));
  59.  
  60. }).prototype = p = new cjs.MovieClip();
  61. p.nominalBounds = new cjs.Rectangle(-89.5,-26,179,52.1);
  62.  
  63.  
  64. (lib.button = function(mode,startPosition,loop) {
  65. this.initialize(mode,startPosition,loop,{});
  66.  
  67. // Warstwa 1
  68. this.shape = new cjs.Shape();
  69. this.shape.graphics.f().s("#A63100").ss(1,1,1).p("Eg/fgLUMB+/AAAIAAWpMh+/AAAg");
  70. this.shape.setTransform(375,100,0.923,1.379);
  71.  
  72. this.shape_1 = new cjs.Shape();
  73. this.shape_1.graphics.f("#00CC99").s().p("Eg/fALUIAA2oMB+/AAAIAAWog");
  74. this.shape_1.setTransform(375,100,0.923,1.379);
  75.  
  76. this.timeline.addTween(cjs.Tween.get({}).to({state:[]}).to({state:[{t:this.shape_1},{t:this.shape}]},3).wait(1));
  77.  
  78. }).prototype = p = new cjs.MovieClip();
  79. p.nominalBounds = null;
  80.  
  81.  
  82. (lib.rek = function(mode,startPosition,loop) {
  83. this.initialize(mode,startPosition,loop,{});
  84.  
  85. // 750x200
  86. this.instance = new lib.Klatkapośrednia2("synched",0);
  87. this.instance.parent = this;
  88. this.instance.setTransform(374.2,118.6);
  89. this.instance.alpha = 0;
  90. this.instance._off = true;
  91.  
  92. this.timeline.addTween(cjs.Tween.get(this.instance).wait(19).to({_off:false},0).to({alpha:1},8).wait(62));
  93.  
  94. // Reklama
  95. this.instance_1 = new lib.Klatkapośrednia1("synched",0);
  96. this.instance_1.parent = this;
  97. this.instance_1.setTransform(-117,79.4);
  98.  
  99. this.timeline.addTween(cjs.Tween.get(this.instance_1).to({x:378,y:81.4},10,cjs.Ease.get(1)).to({x:373},8,cjs.Ease.get(1)).wait(71));
  100.  
  101. // db.png
  102. this.instance_2 = new lib.db();
  103. this.instance_2.parent = this;
  104.  
  105. this.timeline.addTween(cjs.Tween.get(this.instance_2).wait(89));
  106.  
  107. }).prototype = p = new cjs.MovieClip();
  108. p.nominalBounds = new cjs.Rectangle(-206.5,0,956.5,200);
  109.  
  110.  
  111. // stage content:
  112. (lib.db_750x200_v1 = function(mode,startPosition,loop) {
  113. this.initialize(mode,startPosition,loop,{});
  114.  
  115. // timeline functions:
  116. this.frame_0 = function() {
  117. this.target_button.addEventListener("click", fl_ClickToGoToWebPage);
  118.  
  119. function fl_ClickToGoToWebPage() {
  120. window.open(clickTag, "_blank");
  121. document.removeAllChildren();
  122. document.update();
  123. }
  124.  
  125.  
  126. var parsed = (document.location.href.split('#')[1]||'').split('&');
  127. var params = parsed.reduce(function (params, param) {
  128. var param = param.split('=');
  129. params[param[0]] = decodeURIComponent(param.slice(1).join('='));
  130. return params;
  131. }, {});
  132.  
  133. var clickTag = params.clickTag;
  134.  
  135. /* ustawienie marginesu na 0 powinno być zawsze w pierwszej klatce */
  136. var bodyStyle = document.body.style;
  137. bodyStyle.margin = 0;
  138. bodyStyle.padding = 0;
  139. /* brak tła */
  140. canvas.style.background='transparent';
  141. bodyStyle.background='transparent';
  142. }
  143.  
  144. // actions tween:
  145. this.timeline.addTween(cjs.Tween.get(this).call(this.frame_0).wait(1));
  146.  
  147. // button
  148. this.target_button = new lib.button();
  149. this.target_button.parent = this;
  150. this.target_button.setTransform(406.5,72.5,1,1,0,0,0,406.5,72.5);
  151. new cjs.ButtonHelper(this.target_button, 0, 1, 2, false, new lib.button(), 3);
  152.  
  153. this.timeline.addTween(cjs.Tween.get(this.target_button).wait(1));
  154.  
  155. // Warstwa 1
  156. this.instance = new lib.rek();
  157. this.instance.parent = this;
  158. this.instance.setTransform(375,100,1,1,0,0,0,375,100);
  159.  
  160. this.timeline.addTween(cjs.Tween.get(this.instance).wait(1));
  161.  
  162. }).prototype = p = new cjs.MovieClip();
  163. p.nominalBounds = new cjs.Rectangle(168.5,99,957.5,202);
  164.  
  165. })(lib = lib||{}, images = images||{}, createjs = createjs||{}, ss = ss||{});
  166. var lib, images, createjs, ss;


w liniach zawierających frazę potrzebuję tylko podmieniać TEKST do zmiany
this.text = new cjs.Text("TEKST do zmiany", "20px 'Arial'", "#FFFFFF");

Może coś zrobiłem nie tak, ale Twój skrypt wydaje mi się, że czyści inne dane?
Przepraszam, że jeszcze męczę. Obiecuję więcej już nie "marudzić"
dzięki!
Go to the top of the page
+Quote Post
rafkon1990
post 15.09.2016, 20:29:48
Post #4





Grupa: Zarejestrowani
Postów: 37
Pomógł: 9
Dołączył: 14.09.2016
Skąd: Śląskie

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


Skrypt który napisałem we wcześniejszym poście robi dokładnie to co miał robić:
Wszystkie pola input (text) formularza zapisuje do pliku.
Jeżeli chcesz zapisać tylko wybrany/e pole/a to musisz delikatnie modyfikować skrypt.
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: 19.07.2025 - 23:21