Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]fopen i inne, edycja pliku formularzem...?
Forum PHP.pl > Forum > Przedszkole
MenzoX
Witam, to mój pierwszy post tutaj, nie zdążyłem przeczytać jeszcze regulaminu, ale opowiadał mi go sąsiad, szukałem, ale nie znalazłem, na phpedii owszem, coś było, ale nie odpowiadało mi na pytanie, sąsiad czytał regulamin rok temu bodaj, więc coś mogło się zmienić, on też z resztą nie zna odpowiedzi na pytanie.

Do rzeczy:
Hipotetycznie, posiadam tablicę asocjacyjną, wielowymiarową np.
$vbasic = array('vwpis' = array(), 'vpodpis' = array(), 'vmail' = array());

Owszem, mogę zrobić coś takiego za każdym razem:
  1. <?php
  2. $vbasic['vwpis'][] = "xxx";
  3. ?>

I dla każdej pozycji w tablicy to samo, z inną treścią. Ale można by jakoś napisać skrypt, powiedzmy vdopis.php , w którym, w formularzu, jest textarea, do której coś wpiszę (tagując htmlem), i wtedy zostanie dodane do do pliku z $vbasic w jakimś pliku (pod definicją(?) $vbasic):
  1. <?php
  2. <nowa linia>
  3. <nowa linia>
  4. vbasic['vwpis'][] = "TREŚĆ Z TEXTAREA'Y";
  5. <nova linia>
  6. <nova linia>
  7. ?>


I żeby zawsze dopisywało ponad wcześniejszym dopisem, a pod definicją(?) $vbasic.

Tyle. Z góry dziękuję za pomoc blinksmiley.gif
aaevil.gif

Aha, pytanie xP :

Jak coś takiego napisać? Sugestie?
Pilsener
A mógłbyś opisać swój problem po polsku? Bo w tej postaci podejrzewam, że nikt tego nie zrozumie.
xmik
Nie wiem jak inni, ale ja nie bardzo rozumiem Twojego posta.
MenzoX
Chodzi o skrypt, który dopisze pod hipotetyczną linią, która określa tablicę np.
  1. <?php
  2. $tablica = array('jeden' => array(), 'dwa' => array());
  3. ?>

To:
  1. <?php
  2. $tablica['jeden'][] = "TEKST Z POLA TEKSTOWEGO (TEXTAREA) W FORMULARZU";
  3. $tablica['dwa'][] = "TEKST Z POLA TEKSTOWEGO JEDNOLINIOWEGO W FORMULARZU (zwykły input)";
  4. ?>


OK, mamy teraz plik:

  1. <?php
  2. $tablica = array('jeden' => array(), 'dwa' => array());
  3. $tablica['jeden'][] = "TEKST Z POLA TEKSTOWEGO (TEXTAREA) W FORMULARZU";
  4. $tablica['dwa'][] = "TEKST Z POLA TEKSTOWEGO JEDNOLINIOWEGO W FORMULARZU (zwykły input)";
  5. ?>


Jeżeli znowu coś dopiszę, to będzie to wyglądało tak:

  1. <?php
  2. $tablica = array('jeden' => array(), 'dwa' => array());
  3. $tablica['jeden'][] = "DOPISAŁEM";
  4. $tablica['dwa'][] = "DOPISAŁEM";
  5.  
  6. $tablica['jeden'][] = "TEKST Z POLA TEKSTOWEGO (TEXTAREA) W FORMULARZU";
  7. $tablica['dwa'][] = "TEKST Z POLA TEKSTOWEGO JEDNOLINIOWEGO W FORMULARZU (zwykły input)";
  8. ?>


A ogólny interfejs najlepiej powinien składać się z:

-------------------------------+
Pola tekstowego |
|
|
|
[_INPUT'u xP_]

oraz

[SUBMIT'a]

biggrin.gif O to mi chodzi.
kefirek
Nie wiem czy do końca o to chodzi ale może pomoże
Robisz tak
  1. <?php
  2. $tekst = "aaaaaaaaaa";
  3. $test = "<?php\n";
  4. $test .= "$"."test = "."\"".$tekst."\";\n";
  5. $test.= "?>";
  6. $temp = fopen("test1.php","w");
  7. if (fwrite($temp, $test)) {
  8. fclose($temp);
  9. }
  10. ?>

I potem tworzysz pusty plik test1.php i zmieną $tekst zapisze w tym plik test1.php
I przy pomocy pętli zapisujesz to do pliku
MenzoX
Cytat(kefirek @ 3.01.2009, 22:36:55 ) *
Nie wiem czy do końca o to chodzi ale może pomoże
Robisz tak
  1. <?php
  2. $tekst = "aaaaaaaaaa";
  3. $test = "<?php\n";
  4. $test .= "$"."test = "."\"".$tekst."\";\n";
  5. $test.= "?>";
  6. $temp = fopen("test1.php","w");
  7. if (fwrite($temp, $test)) {
  8. fclose($temp);
  9. }
  10. ?>

I potem tworzysz pusty plik test1.php i zmieną $tekst zapisze w tym plik test1.php
I przy pomocy pętli zapisujesz to do pliku



Stary, jesteś boski! biggrin.gif Pomogłeś mi i mojemu sąsiadowi, niech Bóg... nieważne... Gdzie ten przycisk Pomógł?
Otóż właśnie sęk w tym, że nie umiałem posłużyć się fopen i fclose, ale to nawet proste smile.gif

Aha, i mam pytanko jeszcze:
OK, ten kod pisze w pliku, dzięki! Ale co zrobić, żeby nie kasował zawartości pliku, przy dopisywaniu, oraz żeby potem dopisywał w określonej linii (albo określonej liczbie znaków od początku pliku)?
carck3r
Cytat(MenzoX @ 4.01.2009, 00:13:04 ) *
Stary, jesteś boski! biggrin.gif Pomogłeś mi i mojemu sąsiadowi, niech Bóg... nieważne... Gdzie ten przycisk Pomógł?
Otóż właśnie sęk w tym, że nie umiałem posłużyć się fopen i fclose, ale to nawet proste smile.gif

Aha, i mam pytanko jeszcze:
OK, ten kod pisze w pliku, dzięki! Ale co zrobić, żeby nie kasował zawartości pliku, przy dopisywaniu, oraz żeby potem dopisywał w określonej linii (albo określonej liczbie znaków od początku pliku)?


Żeby nie kasował przy dopisywaniu musisz zastosować tryb 'ab', czyli np.:
  1. <?php
  2. fopen("$DOCUMENT_ROOT/teksty/tekst.txt",'ab');
  3. ?>


pozdrawiam
MenzoX
Dziwna sprawa, ale mi to nie działa... spróbuję jeszcze kilka razy...
Ponawiam pytanie:
Co zrobić, żeby dopisywało tekst w określonym miejscu pliku?

// Już działa ten ab biggrin.gif Dzięki!
kefirek
Do odczytu zawartości pliku file_get_contents czyli
  1. <?php
  2. $wynik = file_get_contents('test1.php'); echo $wynik;
  3. ?>
Lub file
MenzoX
Dzięki, na pewno się przyda, tylko, niestety, to przypisuje $wynik'owi "Array", bo kiedy drukuję echem $wynik zwraca tylko ten wyraz, a test1.php u mnie na pewno nie zawiera żadnej tablicy. Kiedy użyję print_r(), w przeglądarce widzę:
  1. <?php
  2. Array ( [0] => $test = "qwertyuiop"; [2] => ?> )
(Należy pamiętać, że BBCode [php.] "dokleja" "<?php")
podczas, gdy plik zawiera:
  1. <?php
  2. $test = "qwertyuiop";
  3. ?>

Widać, że pomija "<?php", ponadto, kiedy napiszę ponad print_r'em "echo "<?php\n";" , absolutnie tego nie drukuje, tylko dalej Array i w tablicy wypis zawartości. Ponadto, nie mogę odwołać się do niczego przy print_r'ze, np. "print_r($wynik[0]);" :/
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.