Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> fwrite oraz $_POST - pomocy
elipsa
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


Mam wielki problem - otóż posiadam formularz, który metodą POST przekazuje pewną informację do skryptu php (pole formularza ma name="Napisano"). Skrypt ten ma utworzyć nowy plik tekstowy i zapisać tę informację w nim. Wygląda to tak:
  1. <?php
  2. $tresc=$_POST[Napisano];
  3.  
  4. $tresc=stripslashes($tresc);
  5. $tresc=ereg_replace("r", "", $tresc);
  6. $tresc=str_replace("n", " <br> ", $tresc);
  7.  
  8. $akcja=fopen("plik.txt", "w");
  9. flock($akcja, 2);
  10. fwrite($akcja, $tresc);
  11. flock($akcja, 3);
  12. fclose($akcja);
  13. ?>


Otóż to działało bez zarzutu dopóki nie admini nie zaczęli coś zmieniać w php na serwrze. Teraz plik jest tworzony, ale pusty - informacja się nie zapisuje.

Bardzo proszę o pomoc, bo już nie w głowę zachodze co jto jest!

blink.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
KG-
post
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 30.05.2006

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


Prawdopodobnie to wina praw dostępu, najlepiej będzie jeśli ustalisz która funkcja zawodzi.
fopen, flock, fwrite i fclose zwracają false w przypadku błędu, dodatkowo fopen zwraca komunikat na poziomie E_WARNING w przypadku niepowodzenia więc możesz włączyć
  1. <?php
  2. error_reporting(E_ERROR | E_WARNING);
  3. ?>


Ten post edytował KG- 27.07.2006, 16:51:30
Go to the top of the page
+Quote Post
elipsa
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


Nie ma żadnego błędu. W dodatku wszystko działa poprawnie, jeżeli zamiast zmiennej z tablicy POST fwrite ma zapisać cokolwiek innego, np. takie coś zadziała bez zarzutu:

  1. <?php
  2. $akcja=fopen("plik.txt", "w");
  3. flock($akcja, 2);
  4. fwrite($akcja, "lalala");
  5. flock($akcja, 3);
  6. fclose($akcja);
  7. ?>


Zamiszczam link do konfiguracji php na serwerze. Może to coś komuś powie :-(

http://jerzy.sopot.pl/skrypty/php_info.php

Ten post edytował elipsa 27.07.2006, 18:23:38
Go to the top of the page
+Quote Post
thornag
post
Post #4





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


  1. <?php
  2. $tresc=$_POST[Napisano];
  3.  
  4. $tresc=stripslashes($tresc);
  5. $tresc=ereg_replace("r", "", $tresc);
  6. $tresc=str_replace("n", " <br> ", $tresc);
  7.  
  8. echo $tresc;
  9.  
  10. $akcja=fopen("plik.txt", "w");
  11. flock($akcja, 2);
  12. fwrite($akcja, $tresc);
  13. flock($akcja, 3);
  14. fclose($akcja);
  15. ?>


Sprobuj tak i powiedz czy widzisz na ekrenie zawartos zmiennej.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
elipsa
post
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


Tak, zawartość zmiennej się wyświetla.

Wymyśliłem coś takiego, ale nie wiem czy to poprawnw (ale chyba działa):

  1. <?php
  2. $tresc=$_POST[Napisano];
  3.  
  4. $tresc=stripslashes($tresc);
  5. $tresc=ereg_replace("r", "", $tresc);
  6. $tresc=str_replace("n", " <br> ", $tresc);
  7.  
  8. setcookie("tresc", $tresc, time()+60);
  9.  
  10. $akcja=fopen("plik.txt", "w");
  11. flock($akcja, 2);
  12. fwrite($akcja, $_COOKIE[tresc]);
  13. flock($akcja, 3);
  14. fclose($akcja);
  15. ?>


Jak się zapisze zmienną z POST w ciasteczku, to coś takiego fwrite zapisze, a jak ma zapisać bezpośrednio z POST, to tego nie robi. O co tu może chodzić? A można zapisać wartośćz tablicy POST jeszcze gdzieś indziej? worriedsmiley.gif
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


a moze sprobuj inny tryb zapisu do pliku

P.S
  1. <?php
  2. $tresc=str_replace("n", " <br> ", $tresc);
  3. ?>

nielepiej bylo uzyc
  1. <?php
  2. $tresc = nl2br("$tresc");
  3. ?>


ale to nie istotne

Ten post edytował skowron-line 27.07.2006, 19:19:55


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
elipsa
post
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


A co to znaczy z tym trybem zapisu?
Go to the top of the page
+Quote Post
skowron-line
post
Post #8





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. <?php
  2. $akcja=fopen("plik.txt", "w");
  3. ?>

zamiast w daj "ab"


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
elipsa
post
Post #9





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


Nie działa :-/

Wygląda to tak, jak gdyby php uparło się, aby nie zapisywać do pliku czegoś przesłanego metodą POST. Dla próby dałem metodą GET i wtedy zadziałało. Czy gdzieś w ustawieniach php (php.ini?) można coś takiego ustawić?

A co myślicie o sztuczce z ciasteczkiem?
Go to the top of the page
+Quote Post
skowron-line
post
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


wiesz jezeli dziala to chyba mozna to nazwac dobra metoda ale wiesz ja osobiscie nie wiem ale ciasteczko moze miec ograniczona ilosc znakow


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
elipsa
post
Post #11





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


No tyak, ale można jakoś inaczej?
Go to the top of the page
+Quote Post
skowron-line
post
Post #12





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. <?php
  2. $tresc=$_POST[Napisano];
  3.  
  4. $tresc=stripslashes($tresc);
  5. $tresc=ereg_replace("r", "", $tresc);
  6. $tresc=str_replace("n", " <br> ", $tresc);
  7.  
  8. echo $tresc;
  9.  
  10. $akcja=fopen("plik.txt", "w");
  11. flock($akcja, 2);
  12. fwrite($akcja, "cos");
  13. flock($akcja, 3);
  14. fclose($akcja);
  15. ?>

a probowales tak.A moze jeszcze jedna mysl moze zmienna daj w cudzyslow
zobacz czy zwyklego stringa zapisze nie ze zmiennej.
pozdrowki

Ten post edytował skowron-line 27.07.2006, 20:34:34


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
elipsa
post
Post #13





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


Z cudzysłowem podwójnym, pojedynczym i bez jest to samo. Najgorsze, że to wszystko działało, dopóki ostatnio nie padł serwer. Wgrali na nowo php i teraz są same niespodzianki. Dlatego też zastanawiam się, czy jest może jakaś dyrektywa w php zabraniająca skryptom zapis do pliku danych przesłanych metodą POST.
Go to the top of the page
+Quote Post
thornag
post
Post #14





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


raczej nie, bo zapisujesz te dane do zwyklej zmiennej.

Sprobuj jesio dla elegancji zmienic $_POST[Napisano]; na $_POST['Napisano'];


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
elipsa
post
Post #15





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


Ja już się poddaję - 2 dni nad tym myślałem i nic. Widać są na tym świecie rzeczy "dla zmysłów niepojęte", skoro nawet tu, na takim forum nikt nie zna odpowiedzi.

Ten post edytował elipsa 28.07.2006, 14:06:37
Go to the top of the page
+Quote Post
.radex
post
Post #16





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat(thornag @ 28.07.2006, 11:40 ) *
raczej nie, bo zapisujesz te dane do zwyklej zmiennej.

Sprobuj jesio dla elegancji zmienic $_POST[Napisano]; na $_POST['Napisano'];


Nie znam się dobrze na tym ale czy apostrofy nie robią też różnicy w działaniu ? Bo jak ja raz napisałem skrypt z odwołaniem do POST bez apostrofów to wyskoczył mi błąd


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
thornag
post
Post #17





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Nie wiem czy apostrofy to konwencja, elegancja czy moze cos wymaganego co roznie dziala na roznych konfiguracjach serwera. Jednak wszyscy gonia do ich uzywania wiec lepiej sobie zlych nawykow nie wyrabiac. Jesli na jakims problemie maja pojawic sie problemy po nie ma ' to lepiej dodac je od razu wtedy przy przenosinach nie ma przykrych niespodzianek smile.gif


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nie znam się dobrze na tym ale czy apostrofy nie robią też różnicy w działaniu ? Bo jak ja raz napisałem skrypt z odwołaniem do POST bez apostrofów to wyskoczył mi błąd


Cytat
Nie wiem czy apostrofy to konwencja, elegancja czy moze cos wymaganego co roznie dziala na roznych konfiguracjach serwera. Jednak wszyscy gonia do ich uzywania wiec lepiej sobie zlych nawykow nie wyrabiac. Jesli na jakims problemie maja pojawic sie problemy po nie ma ' to lepiej dodac je od razu wtedy przy przenosinach nie ma przykrych niespodzianek


A teraz idziemy do manuala i sie juz wiecej nie zastanawiamy czy to tradycja, wymysl chorych ludzi czy może blad:
http://pl2.php.net/manual/pl/language.types.array.php
Cytat
Co wolno, a czego nie w tablicach?
Dlaczego zapis $foo[bar] jest niepoprawny?

W starych skryptach można spotkać taką składnię:

$foo[bar] = 'coś';
echo $foo[bar];
// itd.

Ten zapis jest niepoprawny, ale działa. Dlaczego zatem jest niepoprawny? Powód jest to, co opisano w rozdziale składnia, że pomiędzy nawiasami kwadratowymi ('[' i ']') musi znajdować się wyrażenie. Oznacza to, że można używać czegoś takiego:

echo $arr[ foo(true) ];

Jest to przykład użycia wartości zwracanej przez funkcję jako indeksu tablicy. php zna też stałe, więc można spotkać zastosowanie E_*.

$opis_błędu[E_ERROR] = "Wystąpił poważny błąd";
$opis_błędu[E_WARNING] = "php wysłało ostrzeżenie";
$opis_błędu[E_NOTICE] = "To jest tylko nieformalna uwaga";

Proszę pamiętać, że E_ERROR jest także ważnym identyfikatorem, tak jak bar w pierwszym przykładzie. Ale ostatni przykład znaczy to samo co:

$opis_błędu[1] = "Wystąpił poważny błąd";
$opis_błędu[2] = "php wysłało ostrzeżenie";
$opis_błędu[8] = "To jest tylko nieformalna uwaga";

ponieważ E_ERROR znaczy to samo co 1, itd.

W takiem razie, jak to możliwe, że $foo[bar] działa? To działa, ponieważ bar, zgodnie z jego zapisem powinien być stałą. Jednakże w tym przypadku nie instnieje stała o nazwie bar. php teraz zakłada, że masz na myśli bar literalnie, czyli jako łańucuch "bar", tylko że zapomniałeś napisać cudzysłowów.
Więc dlaczego tak jest źle?

Kiedyś w przyszłości grupa php może chcieć dodać jeszcze jedną stałą lub słowo kluczowe i wtedy będziesz miał kłopot. Dla przykładu, obecnie już nie można używać słów empty i default, gdyż są to specjalne słowa kluczowe.

Poza tym, jeśli dotąd argumenty nie przekonują cię: ta składnia jest po prostu odrzucona i kiedyś może przestać działać.

Notatka: Po przełączeniu error_reporting na E_ALL, zobaczysz, że php generuje ostrzeżenie, kiedy tylko powyższa składnia zostanie użyta. Tak samo generowane będą ostrzeżenia odnośnie innych odrzuconych "udogodnień". (umieść w swoim skrypcie linię error_reporting(E_ALL)winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
elipsa
post
Post #19





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

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


No, już sobie poradziłem i nie miało to żadnego związku z apostrofami. Zauważyłem, że po rekonfiguracji php zapisywało mi plik 2 razy, tylko że za drugim razem zmienna z tablicy POST była już pusta. W efekcie miało się wrażenie, że php po prostu nie zapisuje zmiennej z tablicy POST do pliku. Wystarczy więc coś takiego:

  1. <?php
  2. $tresc=$_POST["Napisano"]; // mogą sobie być te apostrofy, ale to i tak nic nie zmienia :-/
  3.  
  4.  
  5. if($tresc!="") {
  6.  
  7. $tresc=stripslashes($tresc);
  8. $tresc=ereg_replace("r", "", $tresc);
  9. $tresc=str_replace("n", " <br> ", $tresc);
  10.  
  11. $akcja=fopen("plik.txt", "w");
  12. flock($akcja, 2);
  13. fwrite($akcja, $tresc);
  14. flock($akcja, 3);
  15. fclose($akcja);
  16.  
  17. }
  18. ?>


I to działa!

Nie wiem, o co tu dokładnie chodzi i dlaczego probem jest akurat ze zmienną POST (bo zmienna z GET działa). Jakby ktoś potrafił to zjawisko wyjaśnić, to byłoby bardzo fajnie. Pozdrawiam wszystkich zainteresowanych tym tematem.

Ten post edytował elipsa 1.08.2006, 11:05:04
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 Aktualny czas: 20.08.2025 - 10:36