Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podmiana znaku w otwieranym pliku
Forum PHP.pl > Forum > Przedszkole
lee2
Cześć,

mam jak mniemam prosty problem: Mam plik tekstowy o zawartości <p>sample</p>

obok istnieje formularz w którym mam przycisk i pole textowe po kliku zmienna info jest przesyłana do pliku php o takim kodzie:

  1. <?php
  2. if (isset($_POST['info']))
  3. {
  4. $file = fopen("test.txt", 'w') or die("Nie można otworzyć pliku");
  5. fwrite($file, $_POST['info']);
  6. fclose($file);
  7. echo "Dane zapisano do pliku";
  8. }
  9. ?>


chciałbym aby słowo sample było zamienione tym co zostało wpisane do pola textowego i zapisane do pliku
dało by się coś z tego zrobić?
_olo_1984
rozumiem, że chodzi o to, żeby to zapisywało się w pliku pomiędzy <p> a </p> ?
  1. //...
  2. fwrite($file, '<p>'.$_POST['info'].'</p>');
  3. //...

lub w inny sposób
  1. file_put_contents( 'test.txt', '<p>'.$_POST['info'].'</p>' );
lee2
chodzi o to zapisywał zamiast konkretnego ciągu znaków - w tym przypadku "sample"

otwiera plik txt > wyszukuje słowo sample > zamienia je tym co kryje się pod zmienną wysyłana z formularza

_olo_1984
aha, no to
  1. if (isset($_POST['info']))
  2. {
  3. // pobieram dane z pliku
  4. $dane = file_get_contents( 'test.txt' );
  5. // zamieniam, przy bardziej skomplikowanym ciągu użyłbym preg_replace
  6. $dane = str_replace( 'sample', $_POST['info'], $dane );
  7. // zapisuje
  8. file_put_contents( 'test.txt', $dane );
  9. }
lee2
bardzo dziękuję wszystko działa!

pojawiła sie natomiast opcja rozbudowy....mam kod w postaci
  1. <a href="t.php"><img border="0" src="images/btn_1.png" alt="" width="90" height="65" /></a>
  2. <a href="t.php"><img border="0" src="images/btn_2.png" alt="" width="90" height="65" /></a>
  3. <a href="t.php"><img border="0" src="images/btn_3.png" alt="" width="90" height="65" /></a>
  4.  
  5. <form name="myForm" action="" method="post">
  6. <input type="text" name="info" /><br />
  7. <input type="submit" value="Zapisz" /> <br /><textarea name="ttt" cols="72" rows="12">
  8. <?php
  9. if (isset($_POST['info']))
  10. {
  11. // pobieram dane z pliku
  12. $dane = file_get_contents('test1.txt');
  13. $dane = str_replace('sample', $_POST['info'], $dane );
  14. // wyświetlam
  15. echo $dane;
  16. }
  17. ?>
  18. </textarea>
  19. </form>


jak widać są 3 przyciski linki i teraz chciałabym uzyskać efekt

1. po kliknięciu w obrazek wczytuje się plik test1.txt, test2.txt lub test4.txt w zależności od klikniętego obrazka obrazka
2. we wczytanym tekście odszukuje ciąg znaków "sample"
3. zamienia po kliknięciu w przycisk "zapisz" wyświetla wczytany fragment z podmienionym łańcuchem


to juz chyba koniec mojej drogi przez mękę z php...
_olo_1984
zapewne można to zrobić przy uzyciu js, jeżeli używamy tylko php to przykładowo rozbudowany kod, który cały będzie w pliku index.php
  1. <?php
  2. if(isset($_GET['plik']))
  3. {
  4. switch($_GET['plik']) // pobieram dane z pliku
  5. {
  6. case 'text1':
  7. $_SESSION['dane'] = file_get_contents('test1.txt');
  8. break;
  9.  
  10. case 'text2':
  11. $_SESSION['dane'] = file_get_contents('test2.txt');
  12. break;
  13.  
  14. case 'text3':
  15. $_SESSION['dane'] = file_get_contents('test3.txt');
  16. break;
  17.  
  18. default:
  19. $_SESSION['dane'] = false;
  20. }
  21. }
  22. else
  23. {
  24. $_SESSION['dane'] = false;
  25. }
  26. ?>
  27. <a href="index.php?plik=text1"><img border="0" src="images/btn_1.png" alt="" width="90" height="65" /></a>
  28. <a href="index.php?plik=text2"><img border="0" src="images/btn_2.png" alt="" width="90" height="65" /></a>
  29. <a href="index.php?plik=text3"><img border="0" src="images/btn_3.png" alt="" width="90" height="65" /></a>
  30.  
  31. <form name="myForm" action="index.php" method="post">
  32. <input type="text" name="info" /><br />
  33. <input type="submit" value="Zapisz" /> <br /><textarea name="ttt" cols="72" rows="12">
  34. <?php
  35. if (isset($_POST['info']))
  36. {
  37. $dane = ( $_SESSION['dane'] === false ) ? 'Klik najpierw na obrazek !' : str_replace('sample', $_POST['info'], $_SESSION['dane'] );
  38. // wyświetlam
  39. echo $dane;
  40. }
  41. ?>
  42. </textarea>
  43. </form>


skorzystałem tutaj z tablic $_GET oraz sesji. Kod jest w miarę prosty, oczywiście o zabezpieczenia musisz zadbać sam.
Najpierw trzeba kliknąć na któryś z obrazków, do $_SESSION['dane'] wczyta Ci tekst z pliku, w zależności od klikniętego obrazka (a właściwie linku) - pętla switch. Jeżeli nie klikniesz to zmienna sesyjna ma wartosc false, a po kliknięciu "Zapisz" pojawia się stosowny komunikat. Mam nadzieję że pomogłem, a przynajmniej rozjaśniłem trochę. Pozdr.
lee2
bardzo dziękuję za pomoc, przykład jest jak najbardziej dydaktyczny.

jedynie zastanawia mnie fakt:
  1. <form name="myForm" action="index.php" method="post">
- nie działa (nie wczytuje plików)

  1. <form name="myForm" action="" method="post">
- działa



pozdrawiam i dzięki!
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-2025 Invision Power Services, Inc.