Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] SKRYPT z komentarzem, problem
Forum PHP.pl > Forum > Przedszkole
adam1990
Witam, na stronie chciałem umieścić możliwość komentowania (na razie na chceniu się skończyło).
Przejdę do rzeczy, mój skrypt:
  1. <?php
  2.  
  3. //LOKALIZACJA PLIKU DO ZAPISU
  4.  
  5. $plik='dane.txt';
  6.  
  7. $plik_otworz=fopen($plik,'r');
  8.  
  9. $zczytaj=fread($plik_otworz,filesize($plik));
  10.  
  11. fclose($plik_otworz);
  12.  
  13. if($_POST['imie']!='' && $_POST['tresc']!=''){
  14.  
  15. //ZMIENNA WYSWIETLA DANE
  16.  
  17. $dane='Imi?:&nbsp;'.$_POST['imie'].'<br />Tre??:&nbsp;'.$_POST['tresc'].'<br /><hr />';
  18.  
  19. $dane.=$zczytaj;
  20.  
  21. $plik_zapisz=fopen($plik,'w');
  22.  
  23. $zapisz=fputs($plik_zapisz,$dane);
  24.  
  25. fclose($plik_zapisz);
  26.  
  27. header('Location:'.$_SERVER['PHP_SELF']);
  28.  
  29. exit();
  30.  
  31. }
  32.  
  33. ?>
  34.  
  35. <form name="formularz" method="post" action="<?=$_SERVER['PHP_SELF']?>">
  36.  
  37. Tw&oacute;j nick:<br />
  38.  
  39. <input type="text" name="imie" MAXLENGTH="20"><br />
  40.  
  41. Tre?? wiadomo?ci:<br />
  42.  
  43. <input type="text" name="tresc" MAXLENGTH="50"><br />
  44.  
  45. <br />
  46.  
  47. <input type="submit" name="submit" value="Dodaj komentarz">
  48.  
  49. <input type="reset" name="reset" value="Wyczy&#347?">
  50.  
  51. </form>
  52.  
  53. <?=$zczytaj?>

gdzieś w internecie znalazłem, ALE po kliknięciu Dodaj komentarz wyskakuje komunikat, że jest jakiś błąd w 27 linijce w tym wypadku jest to ta zacna częśc: header('Location:'.$_SERVER['PHP_SELF']);
Czytałem, że w zależności od wersji php działa $_SERVER albo $HTTP_SERVER_VARS jednak ani jedno ani drugie nie daje skutku.
CO DZIWNE I WAŻNE (tak mi się wydaje:P) po kliknięciu dodaj komentarz w obydwu tych przypadkach, skutek jest ten sam: wyskakuje komunikat o błędzie w 27 linii, ALE komentarz zapisał się. Wystarczy odświeżyć stronę i komentarz jest.

Pozdrawiam i proszę o pomoc
Lejto
jaki błąd otrzymujesz?
k_@_m_i_l
1.Po pierwsze : wsadzaj kod w znacznki.
2.Podaj dokładny błąd a nie wyrywek.
To jest cały kod questionmark.gif
adam1990
Warning: Cannot modify header information - headers already sent by (output started at /home/freehost/m/a/matrhio/www/boom1.php:1) in /home/freehost/m/a/matrhio/www/boom1.php on line 27
k_@_m_i_l
Spróbuj go nie przekierowywać na tą strone na której jest ten skrypt bo i bez tego pożądany efekt , i usuń te linijki :
  1. <?php
  2. header('Location:'.$_SERVER['PHP_SELF']);
  3.  
  4. exit();
  5. ?>


i zamień jest na :
  1. <?php
  2. return;
  3. ?>
Lejto
użyj ob_start(); na początku skryptu
http://pl.php.net/ob_start" title="Zobacz w manualu PHP" target="_manual
adam1990
tak to jest cały kod.
A błąd, przypomnę dokładnie taki mi wyskakuje:
Warning: Cannot modify header information - headers already sent by (output started at /home/freehost/m/a/matrhio/www/boom1.php:1) in /home/freehost/m/a/matrhio/www/boom1.php on line 27

Co jeszcze dziwne jak dla mnie, mój kumpel zamieścił na swoim serwerze ten sam skrypt i działało bez zarzutu. Więc może jednak wersja php? Tylko jak pisałem, $HTTP_SERVER_VARS jak i $_SERVER próbowałem i dalej to samo.
k_@_m_i_l
Spróbuj tak jak ci radził Lejto użyc
  1. <?php
  2. ?>

powinno z tym hulać,albo usuń tego headera,bo on tam jest zupełnie niepotrzebny,a przed nim nie możesz wysyłać żadnych danych do przeglądarki a tak się dzieje.
adam1990
hmm po usunięciu tej linijki, komentarze zapisują się tak jak poprzednio a zamiast błędu jest pusta strona (: już jakiś sukces:P
k_@_m_i_l
Cytat(adam1990 @ 6.07.2008, 21:34:54 ) *
hmm po usunięciu tej linijki, komentarze zapisują się tak jak poprzednio a zamiast błędu jest pusta strona (: już jakiś sukces:P


Usuń wogole te dwie linijki :
  1. <?php
  2. header('Location:'.$_SERVER['PHP_SELF']);
  3.  exit();
  4. ?>

i nie wstawiaj za nie nic.
Niepotrzebnie ci mówiłem o tym returnie,bo widze że chcesz po zapisaniu też wyświetlić ten formularz,więc w takim przypadku usuń je i bedzie ok .
adam1990
Ok, dzięki : ) Został jeszcze jeden mały szczegół, że jak komentuje i naciskam dodaj komentarz, to dany komentarz nie wyświetla się, dopiero jak skomentuje po raz drugi to wtedy wyświetla się ten pierwszy. Działa jakby z opóźnieniem :- P Da się to jakoś zmienić?
k_@_m_i_l
To przy zapisywaniu,po zamknięciu pliku dodaj mu funkcje czytającą plik z wpisami,i bedzie ok.
adam1990
wiem, że to teraz może irytować, ale nie jestem pewien czy dam radę wstawić poprawnie funkcję czytającą plik wpisów po zamknięciu :- P Jestem początkujący w php (:

  1. <?php
  2.  
  3.  
  4. //LOKALIZACJA PLIKU DO ZAPISU
  5.  
  6. $plik='dane.txt';
  7.  
  8. $plik_otworz=fopen($plik,'r');
  9.  
  10. $zczytaj=fread($plik_otworz,filesize($plik));
  11.  
  12. fclose($plik_otworz);
  13.  
  14. if($_POST['imie']!='' && $_POST['tresc']!=''){
  15.  
  16. //ZMIENNA WYSWIETLA DANE
  17.  
  18. $dane='Imi?:&nbsp;'.$_POST['imie'].'<br />Tre??:&nbsp;'.$_POST['tresc'].'<br /><hr />';
  19.  
  20. $dane.=$zczytaj;
  21.  
  22. $plik_zapisz=fopen($plik,'w');
  23.  
  24. $zapisz=fputs($plik_zapisz,$dane);
  25.  
  26. fclose($plik_zapisz);
  27.  
  28.  
  29.  
  30.  
  31. }
  32.  
  33. ?>
  34.  
  35. <form name="formularz" method="post" action="<?=$_SERVER['PHP_SELF']?>">
  36.  
  37. Tw&oacute;j nick:<br />
  38.  
  39. <input type="text" name="imie" MAXLENGTH="20"><br />
  40.  
  41. Tre?? wiadomo?ci:<br />
  42.  
  43. <input type="text" name="tresc" MAXLENGTH="50"><br />
  44.  
  45. <br />
  46.  
  47. <input type="submit" name="submit" value="Dodaj komentarz">
  48.  
  49. <input type="reset" name="reset" value="Wyczy&#347?">
  50.  
  51. </form>
  52.  
  53. <?=$zczytaj?>


na tym kodzie wszystko elegancko działa, tylko jak pisałem wcześniej, wyświetlanie komentarzy jest jakby opóźnione o jedno tempo. Mówiłeś, żeby wstawić funkcję czytania pliku wpisów , ale w którym dokładnie miejscu? i wstawienie tego to po prostu $plik='dane.txt'; ?tongue.gif Sorx za głupie pytania, ale przedszkole to przedszkole:P
k_@_m_i_l
Masz tu gotowy kod,odczytywałeś te wszystki komentarze przed dodaniem nowego,więc dlatego ci nie wyświetlało nowego.
Ten kod już ci bedzie działać ok.I następnym razem wstawiaj kod php do odopowiednich znaczników,bo lepiej się to czyta,od tego one są żeby kod tam wstawić.

  1. <?php
  2. //LOKALIZACJA PLIKU DO ZAPISU
  3.  
  4. $plik='dane.txt';
  5.  
  6. $plik_otworz=fopen($plik,'r');
  7.  
  8.  
  9.  
  10. fclose($plik_otworz);
  11.  
  12. if($_POST['imie']!='' && $_POST['tresc']!=''){
  13.  
  14. //ZMIENNA WYSWIETLA DANE
  15.  
  16. $dane='Imi?:&nbsp;'.$_POST['imie'].'
  17. Tre??:&nbsp;'.$_POST['tresc'].'
  18. ';
  19.  
  20. $dane.=$zczytaj;
  21.  
  22. $plik_zapisz=fopen($plik,'w');
  23.  
  24. $zapisz=fputs($plik_zapisz,$dane);
  25. //odczytanie wszystkich komentarzy razem z nowym dodanym.
  26.  
  27. $zczytaj=fread($plik_otworz,filesize($plik));
  28.  
  29. fclose($plik_zapisz);
  30.  
  31.  
  32.  
  33.  
  34. }
  35.  
  36. ?>
adam1990
Warning: fread(): 2 is not a valid stream resource in /home/freehost/m/a/matrhio/www/boom1.php on line 27


czyli właśnie w tej "nowej" linijce $zczytaj=fread($plik_otworz,filesize($plik));
k_@_m_i_l
Teraz musi działać na 100%. Nie dopatrzyłem przedtem dokładnie kodu tongue.gif
  1. <?php
  2. //LOKALIZACJA PLIKU DO ZAPISU
  3.  
  4. $plik='dane.txt';
  5.  
  6.  
  7.  
  8. if($_POST['imie']!='' && $_POST['tresc']!=''){
  9.  
  10. //ZMIENNA WYSWIETLA DANE
  11.  
  12. $dane='Imi?:&nbsp;'.$_POST['imie'].'
  13. Tre??:&nbsp;'.$_POST['tresc'].'
  14. ';
  15.  
  16. $dane.=$zczytaj;
  17.  
  18. $plik_zapisz=fopen($plik,'w');
  19.  
  20. $zapisz=fputs($plik_zapisz,$dane);
  21.  
  22. fclose($plik_zapisz);
  23.  
  24. $plik_otworz=fopen($plik,'r');
  25.  
  26.  $zczytaj=fread($plik_otworz,filesize($plik));
  27.  echo $zczytaj;
  28.  fclose($plik_otworz);
  29.  
  30.  
  31.  
  32. }
  33.  
  34. ?>


Edit down :
Mógłbyć zauważyć też ze ta zmienna była niepotrzebnie opatrzona znacznikami ale już to pominę:P
Sprawdź to jeszcze raz,sprawdzałem u mnie i działa.
adam1990
z linijką 30 <?=$zczytaj?> jest błąd właśnie z nią związany a jeśli usunę ją to komentarze w ogóle się nie wyświetlają :- P
adam1990
tak jak wcześniej, teraz w ogóle nie wyświetlają się komentarze :- P
Lejto
zobacz to:
  1. <?
  2.  
  3. $plik='dane.txt';
  4.  
  5.  
  6.  
  7. if($_POST['imie']!='' && $_POST['tresc']!=''){
  8.  
  9. //ZMIENNA WYSWIETLA DANE
  10.  
  11. $dane='Imi?:&nbsp;'.$_POST['imie'].'
  12. Tre??:&nbsp;'.$_POST['tresc'].'
  13. ';
  14.  
  15. $dane.=$zczytaj;
  16.  
  17. $plik_zapisz=fopen($plik,'w');
  18.  
  19. $zapisz=fputs($plik_zapisz,$dane);
  20.  
  21. fclose($plik_zapisz);
  22.  
  23.  
  24. header('Location:'.$_SERVER['PHP_SELF']);
  25.  
  26.  
  27.  
  28. }
  29. $plik_otworz=fopen($plik,'r');
  30.  
  31.  $zczytaj=fread($plik_otworz,filesize($plik));
  32.  
  33.  fclose($plik_otworz);
  34. ?>
adam1990
teraz wyświetla się tylko najnowszy komentarz, a reszta nie. I w taki dziwny sposób bo zarówno nad formularzem jak i pod tongue.gif Nie chcę więcej zabierać czasu, jakoś pokombinuje sam : ) Dzięki wielkie exclamation.gifsmile.gif
pozdrawiam
adam1990
lejto, z Twoim kodem jest jakiś błąd ponad formularzem a pod forumalrzem wyświetla się tylko ostatni komentarz. Tak jak pisałem wcześniej, nie chcę zabierać więcej czasu bo już i tak sporo pomogliście mi:P A w szczególności Kamil (: Dzięki raz jeszcze
Pozdrawiam:)
adam1990
http://www.matrhio.lua.pl/boom1.php >> z kodem ostatnim Kamila czy z Lejto obojętne, efekt ten sam : ) komentarze są wyświetlane najnowsze i do razu ale tylko one. No i w dziwny sposób u góry formularza teżtongue.gif
Jak ktoś z Was ma jeszcze ochotę w tej sprawie pomóc to fajnie : P
adam1990
już działa : ) usunołem echo, i dodałem do wczytywania pliku to co było wcześniej:P wyswietlnia etakie jak mial kamil.
Wiec juz jest ok : D
Ale mam nowe pytanie, czy da się aby przy komentarzach była wyświetlana aktualna data? Czy to już wyższa szkoła jazdy?tongue.gif
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.