Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> header, nie przenosi tam gdzie powinno :/
hmmm
post 28.01.2005, 22:28:44
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


mam skrypt obslugujacy formularz.
to jest fragment (wczesniej mam tylko polaczenie z baza i stworzenie funkcji escape_data):
  1. <?php
  2. if (isset($_POST['submit'])) {
  3. $message = NULL;
  4. //jesli cookie nie istnieje
  5. if (!isset($_COOKIE['admin'])) {
  6. if ((strlen($_POST['nick']) == 0) OR (in_array($_POST['nick'], $donotuse))) {
  7. $nick1 = FALSE;
  8. $message .= &#092;"podaj imie lub nick;<br />n nie mozesz uzyc: \" . implode(', ', $donotuse) . \".<br />n\";
  9. } else {
  10. $nick1 = escape_data($_POST['nick']);
  11. }
  12. if (strlen($_POST['email']) == 0) {
  13. $email1 = TRUE;
  14. } else {
  15. $email1 = escape_data($_POST['email']);
  16. }
  17. //jezeli cookie istnieje
  18. } else {
  19. $nick1 = &#092;"niewazne86\";
  20. $email1 = &#092;"niewazne86@o2.pl\";
  21. }
  22. if (strlen($_POST['content']) == 0) {
  23. $content1 = FALSE;
  24. $message .= &#092;"podaj tresc wpisu.<br />n\";
  25. } else {
  26. $content1 = escape_data($_POST['content']);
  27. }
  28. if ($nick1 && $email1 && $content1) {
  29. $query = &#092;"INSERT INTO book (nick, datetime, email, content) VALUES ('$nick1', NOW(), '$email1', '$content1')\";
  30. $result = @mysql_query($query);
  31. if ($result) {
  32. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/book.php?link=0\");
  33. exit();
  34. }
  35. }
  36. }
  37. ?>

skrypt ten znajduje sie w pliku bookaddcheck.inc, ktory jest includowany do book.php. sam formularz rowniez jest includowany - z pliku bookadd.inc do tego samego pliku.

problem polega na tym, ze po kliknieciu na 'dodaj wpis' rekordy sa dodawane do bazy danych, ale zamiast przeniesc na book.php?link=0 (pierwsza strona ksiegi gosci) w naglowku dalej zostaje book.php?link=bookadd.

prosze o pomoc i z gory dziekuje :)
Go to the top of the page
+Quote Post
uli
post 29.01.2005, 11:24:50
Post #2





Grupa: Zarejestrowani
Postów: 318
Pomógł: 6
Dołączył: 27.01.2005

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


Moze jestem poczatkujacy, ale co tam robi ta @ w wierszu 32? Przeciez php potraktuje ja jak cos zbednego i wykona query, ale za to nigdy nie bedziesz miec spelnionego warunku w 33.


--------------------
Prawo Wylera:
Nie ma rzeczy niemożliwych dla kogoś, kto nie musi ich zrobić sam.
Go to the top of the page
+Quote Post
hmmm
post 30.01.2005, 23:16:14
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


@ oznacza brak zwracania bledow ;)

no ale, wie ktos moze dlaczego header nie przenosci mnie pod wskazany adres?
Go to the top of the page
+Quote Post
crash
post 30.01.2005, 23:20:36
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Skrypt nie zwraca niczego przed wywołaniem header? Sprawdź czy w ogóle dochodzi do tego miejsca, daj na przykład zaraz przed header: echo 'tutaj';


--------------------
Go to the top of the page
+Quote Post
hmmm
post 30.01.2005, 23:31:50
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


  1. <?php
  2. if ($result) {
  3. echo 'tutaj';
  4. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/book.php?link=0\");
  5. exit();
  6. }
  7. ?>

dopisalem echo i zwraca mi :/ nie rozumiem. poza tym wpisy sa dodawane do bazy danych, a zamiast przeniesc mnie w naglowku pozostaje dalej book.php?link=bookadd
Go to the top of the page
+Quote Post
crash
post 30.01.2005, 23:39:24
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Hmm a nie jest tu może problemem dirname? Bo pod Winda to zwraca \ które nie mogą występować w URL'ach.


--------------------
Go to the top of the page
+Quote Post
hmmm
post 30.01.2005, 23:41:32
Post #7





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


czyli jak? sam powinienem wpisac adres?

wczesniej dirname dobrze mi dzialal w innej ksiedze, no ale sprawdze :)

UPDATE
---------
zmienilem na:
  1. <?php
  2. header (&#092;"Location: http://localhost/babeblog/book.php?link=0\");
  3. ?>
ale dalej to samo - nie dziala :/

myslalem moze, ze to bledy w IE, ale pod FF tak samo :|

Ten post edytował hmmm 30.01.2005, 23:44:23
Go to the top of the page
+Quote Post
xardas
post 30.01.2005, 23:46:18
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.03.2004

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


Na początku strony z kodem php (na SAMYM początku)
  1. <?php ob_start(); ?>
Go to the top of the page
+Quote Post
crash
post 30.01.2005, 23:47:31
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Hmm dziwne dziwne, a error_reporting(E_ALL) coś konkretnego podaje?


--------------------
Go to the top of the page
+Quote Post
hmmm
post 30.01.2005, 23:55:42
Post #10





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


dodalem error_reporting(E_ALL) w tym miejscu:
  1. <?php
  2. if ($nick1 && $email1 && $content1) {
  3. $query = &#092;"INSERT INTO book (nick, datetime, email, content) VALUES ('$nick1', NOW(), '$email1', '$content1')\";
  4. $result = @mysql_query($query);
  5. if ($result) {
  6. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/book.php?link=0\");
  7. exit();
  8. }
  9. }
  10. ?>

i zwrocilo mi:

Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\babeblog\book.php:1) in c:\inetpub\wwwroot\babeblog\inc\bookaddcheck.inc on line 54

a rekord mimo to zostal dodany
Go to the top of the page
+Quote Post
crash
post 31.01.2005, 00:03:53
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Cytat
output started at c:\inetpub\wwwroot\babeblog\book.php:1

Musisz mieć pustą linię na początku pliku...


--------------------
Go to the top of the page
+Quote Post
Ociu
post 31.01.2005, 09:30:33
Post #12





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




http://php.pl/index.php/phppl/artyku_y/dla...ch_programist_w
Go to the top of the page
+Quote Post
hmmm
post 31.01.2005, 15:06:41
Post #13





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


przestudiowalem caly skrypt, przeczytalem artykul ... ale nie znalazlem :|

plik z skryptem jest includowany do book.php, a na samym poczatku book.php mam cos takiego:
  1. <?php
  2. if (isset($_GET['link'])) {
  3. if ($_GET['link'] == 'bookadd') {
  4. @include('inc/bookaddcheck.inc');
  5. }
  6. }
  7.  
  8. include('inc/head.inc');
  9. ?>
  10.  
  11. <!-- dalej kod html -->

z kolei bookaddcheck.inc to (caly kod):
  1. <?php
  2. //polacz z baza
  3. include('connect.inc');
  4. $db = mysql_connect($host, $user, $pass) or die (&#092;"blad w polaczeniu z hostem:<br />n\" . mysql_error() . \"n\");
  5. mysql_select_db($name, $db) or die (&#092;"blad w wybieraniu bazy:<br />n\" . mysql_error() . \"n\");
  6.  
  7. //funkcja poprzedzajaca znakiem odwrotnego ukosnika wszystkie problematyczne znaki
  8. function escape_data ($data) {
  9. //jezeli dane zostaly juz przepuszczone przez magic quotes
  10. //usun wprowadzone ukosniki przed znakami specjalnymi
  11. if (ini_get('magic_quotes_gpc')) {
  12. $data = stripslashes($data);
  13. }
  14. //dodaj odwrotne ukosniki przed znakami specjalnymi
  15. //usun niepotrzebne odstepy
  16. }
  17.  
  18. //includuj plik z nickami ktore moze uzywac wylacznie administrator
  19. include('inc/donotuse.inc');
  20.  
  21. if (isset($_POST['submit'])) {
  22. $message = NULL;
  23. //jesli cookie nie istnieje
  24. if (!isset($_COOKIE['admin'])) {
  25. if ((strlen($_POST['nick']) == 0) OR (in_array($_POST['nick'], $donotuse))) {
  26. $nick1 = FALSE;
  27. $message .= &#092;"podaj imie lub nick;<br />n nie mozesz uzyc: \" . implode(', ', $donotuse) . \".<br /><br />n\";
  28. } else {
  29. $nick1 = escape_data($_POST['nick']);
  30. }
  31. if (strlen($_POST['email']) == 0) {
  32. $email1 = TRUE;
  33. } else {
  34. $email1 = escape_data($_POST['email']);
  35. }
  36.  
  37. //jezeli cookie istnieje
  38. } else {
  39. $nick1 = &#092;"niewazne86\";
  40. $email1 = &#092;"niewazne86@o2.pl\";
  41. }
  42. if (strlen($_POST['content']) == 0) {
  43. $content1 = FALSE;
  44. $message .= &#092;"podaj tresc wpisu.<br />n\";
  45. } else {
  46. $content1 = escape_data($_POST['content']);
  47. }
  48. if ($nick1 && $email1 && $content1) {
  49. $query = &#092;"INSERT INTO book (nick, datetime, email, content) VALUES ('$nick1', NOW(), '$email1', '$content1')\";
  50. $result = @mysql_query($query);
  51. if ($result) {
  52. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/book.php?link=0\");
  53. exit();
  54. }
  55. }
  56. }
  57.  
  58. //zamknij polaczenie z baza
  59. ?>


Ten post edytował hmmm 31.01.2005, 15:07:08
Go to the top of the page
+Quote Post
Ociu
post 31.01.2005, 15:19:52
Post #14





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Jeśli to twój cały kod, to odpowiedź masz we fragmencie artykułu.
Cytat
Warning: Cannot modify header information - headers already sent by (output started at plik.php:10) in plik.php on line n

Oznacza to, że już jakieś informacje zostały wysłane do przeglądarki (echo, print, czy nawet spacja przed <?php ). Rozwiązaniem problemu jest skasowanie wszystkiego przed <?php, lub wpisanie na początku pliku funkcji uruchamiającej buforowanie: ob_start(). Gdy chcemy opróżnić bufor wywołujemy funkcję ob_flush() (bez kończenia buforowania), lub ob_end_flush() (kończy buforowanie)

pozdrawiam

edit:
oczywiście polecam ten drugi sposób.

Ten post edytował badme 31.01.2005, 15:22:50
Go to the top of the page
+Quote Post
hmmm
post 31.01.2005, 22:27:09
Post #15





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


przeciez napisalem, ze czytalem ...
wiem, ze zadne dane nie powinny zostac wyslane do przegladarki i tu twki moj problem, bo w ktorym miejscu w moim kodzie takie dane zostaly wyslane?
nie umieszczalbym kodu, jezeli sam bym do tego doszedl, ale nie znalazlem dlatego tak bardzo mnie zastanawia, dlaczego nie dziala ...
Go to the top of the page
+Quote Post
crash
post 31.01.2005, 22:30:10
Post #16





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Przecież błąd, który się pojawia jasno wskazuje gdzie pojawiają się te niechciane dane, sprawdź po prostu co tam masz i popraw.


--------------------
Go to the top of the page
+Quote Post
hmmm
post 31.01.2005, 22:41:51
Post #17





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


moze glupie pytanie, ale ... jak mam liczyc?
<?php - to jest pierwsza linijka? czy dopiero od nastepnej ... i jeszcze jedno - jak kod jest dlugi i zostanie zawiniety, to czesc kodu wtracona do nastepnej linii tez liczyc? chyba nie, co?


UPDATA
----------
policzylem <?php jako pierwsza linie i blad jest w lini 64, a to:
  1. <?php
  2. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/book.php?link=0\");
  3. ?>


Ten post edytował hmmm 31.01.2005, 22:46:01
Go to the top of the page
+Quote Post
crash
post 31.01.2005, 22:50:54
Post #18





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Nie ta linia, błąd w przypadku header podaje jeszcze gdzie pojawiają się dane, zobacz dokładniej...


--------------------
Go to the top of the page
+Quote Post
hmmm
post 31.01.2005, 23:02:43
Post #19





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\babeblog\book.php:1) in c:\inetpub\wwwroot\babeblog\inc\bookaddcheck.inc on line 64

  1. <?php
  2. //linia 59
  3. if ($nick1 && $email1 && $content1) {
  4. $query = &#092;"INSERT INTO book (nick, datetime, email, content) VALUES ('$nick1', NOW(), '$email1', '$content1')\";
  5. $result = @mysql_query($query);
  6. if ($result) {
  7. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/book.php?link=0\");
  8. exit();
  9. }
  10. }
  11. }
  12.  
  13. //zamknij polaczenie z baza
  14. ?>

czyli niby w ktorej linii bo nie rozumiem :/


EDIT
------
dodam tylko, ze kod tego pliku konczy sie na tym, co tu wkleilem - dalej nic nie ma.
i jeszcze jedno ... jak na poczatku kodu w pliku bookaddcheck.inc dalem funkcje ob_start(); to mimo to zwracalo mi blad, ze 'headers already sent ...'

Ten post edytował hmmm 31.01.2005, 23:39:30
Go to the top of the page
+Quote Post
Ociu
post 1.02.2005, 08:22:57
Post #20





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




A dałeś ob_end_flush(); ?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 18.07.2025 - 05:16