Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Cannot modify header information - headers already sent
Forum PHP.pl > Forum > Przedszkole
Maker5
Warning: Cannot modify header information - headers already sent by (output started at /zapytanie/configuration.php:14) in /zapytanie/formprocess.php on line 63

wczesniej nie bylo tego problemu a wczoraj pojawil się taki blad blad i juz naprawde nie wiem co zrobic aby jakos temu zaradzic
co proponujecie ?

link do formularza

http://alveus1.home.pl/zapytanie/index.php


i druga sprawa:
jak ktoś nie wpisze np imienia to pojawiają się dziwne znaki zamiast komunikatu:

  1. Podałeś nieprawidłowe imię. <br />Kliknij <a title="wstecz" href="java script:history.go(-1)">wstecz</a> i popraw ten błąd.';
  2.  
O$iek
Nie żebym wątpił w swoje umiejętności jasnowidza, ale może dałbyś kod pliku formprocess.php ?
Masz tu taki mały gratis bez patrzenia w kod:
http://phpedia.pl/wiki/Cannot_add_header_i...rs_already_sent
Maker5
Cytat(O$iek @ 18.10.2010, 16:50:46 ) *
Nie żebym wątpił w swoje umiejętności jasnowidza, ale może dałbyś kod pliku formprocess.php ?
Masz tu taki mały gratis bez patrzenia w kod:
http://phpedia.pl/wiki/Cannot_add_header_i...rs_already_sent


już to czytałem i to nie pomaga sad.gif

  1. <?php
  2. require_once './ValidateClass.php';
  3. require_once './configuration.php';
  4.  
  5. if(isset($_POST['send']))
  6. {
  7. if(false==ValidateClass::checkLogin(ucfirst($_POST['name'])) || empty($_POST['name']))
  8. {
  9. $error.='Podałeś nieprawidłowe imię. <br />Kliknij <a title="wstecz" href="java script:history.go(-1)">wstecz</a> i popraw ten błąd.';
  10. $error.="<br />";
  11. }
  12. if(false==ValidateClass::checkLogin(ucfirst($_POST['surname'])) || empty($_POST['surname']))
  13. {
  14. $error.='Podałeś nieprawidłowe nazwisko. <br />Kliknij <a title="wstecz" href="java script:history.go(-1)">wstecz</a> i popraw ten błąd.';
  15. $error.="<br />";
  16. }
  17. if(!is_numeric($_POST['phone_number']) || empty($_POST['phone_number']))
  18. {
  19. $error.='Podałeś zły numer telefonu (podaj tylko cyfry bez myślników i spacji). <br />Kliknij <a title="wstecz" href="java script:history.go(-1)">wstecz</a> i popraw ten błąd.';
  20. $error.="<br />";
  21. }
  22. if(false==ValidateClass::checkMail($_POST['mail']))
  23. {
  24. $error.='Podałeś nieprawidłowy adres email. <br />Kliknij <a title="wstecz" href="java script:history.go(-1)">wstecz</a> i popraw ten błąd.';
  25. $error.="<br />";
  26. }
  27. if(!empty($error))
  28. {
  29.  
  30. $error=urlencode($error);
  31. $url='Location:' . $adres . '?error=' . $error;
  32. header($url);
  33. }
  34. else
  35. {
  36. if(!empty($_POST['sugestion']))
  37. {
  38. $sugest='<br />' . 'Treść Zapytania:<br />'. htmlspecialchars($_POST['sugestion']);
  39. }
  40. //Dane klienta
  41.  
  42. $client= '' . $_POST['name'] .' '. $_POST['surname'] . '<br />Firma: ' . $_POST['street'] . ' ' . $_POST['number_flat']
  43. . '' . $_POST['postal_code'] .' ' . $_POST['town'] . '<br />Telefon: ' . $_POST['phone_number'] .
  44. $mail_content5 . $_POST['carts'] . '';
  45.  
  46. //mail dla nas
  47. $headers = 'MIME-Version: 1.0' . "\r\n";
  48. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  49. $headers .= 'To:' . $from . '<' . $mail . '>' . "\r\n";
  50. $headers .= 'From: '. $_POST['name'] . ' ' . $_POST['surname'] . '<' . $_POST['mail'] . '>' . "\r\n";
  51. $content_seller=$mail_content_seller . 'Email: ' . $_POST['mail'] .'<br />Imię i Nazwisko: ' . $client
  52. . '<br />' . $mail_content_seller3 . ' '
  53. . $sugest;
  54. mail($mail, $subject_seller, $content_seller , $headers);
  55.  
  56. $url='Location:' . $adres . '?accept=ok';
  57. header($url);
  58. }
  59.  
  60. }
  61. else
  62. {
  63. $url='Location:' . $adres;
  64. header($url);
  65. }
  66. print_r($error);
  67.  
  68.  
  69. ?>
O$iek
Przecież tam i w komunikacje błędu jest wszystko napisane:
Pierw wysyłasz nagłówek w linii 14 - HTML, że wystąpił błąd, a potem próbujesz wysłać, przekierowanie zdaje się i pluje błędem.
#edit: czekaj...

#edit2
A w pliku
/zapytanie/configuration.php
wysyłasz cokolwiek do użytkownika? Bo jemu ewidentnie nie podoba się ta 14 linia..
Maker5
Cytat(O$iek @ 18.10.2010, 17:02:01 ) *
Przecież tam i w komunikacje błędu jest wszystko napisane:
Pierw wysyłasz nagłówek w linii 14 - HTML, że wystąpił błąd, a potem próbujesz wysłać, przekierowanie zdaje się i pluje błędem.



nie rozumiem sad.gif
napisz co zrobić,
prosze.

plik form.php

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <link href="./style.css" rel="stylesheet" type="text/css" />
  7. </head>
  8. <body>
  9.  
  10.  
  11. <?php
  12. if(isset($_GET['accept']))
  13. {
  14. $url='Location:wynik.html' ;
  15. header($url);
  16. }
  17. elseif(isset($_GET['error']))
  18. {
  19. echo urldecode($_GET['error']);
  20. }
  21.  
  22. ?>
  23. <script type="text/javascript" src="./formscript.js"></script>
  24. <form name="form" action="formprocess.php" method="POST">
  25. <table width="489" border="0" cellpadding="2">
  26. <tr>
  27. <td width="117" class="td_formularz">Imię:</td>
  28. <td width="120"><input type="text" name="name" value="" size="20" /></td>
  29. <td width="98"><span class="td_formularz">Nazwisko:</span></td>
  30. <td width="128"><input type="text" name="surname" value="" size="20" /></td>
  31. </tr>
  32. <tr>
  33. <td class="td_formularz">Firma:</td>
  34. <td><input type="text" name="street" value="" size="20" /></td>
  35. <td><span class="td_formularz">Nr telefonu<br>
  36. </span></td>
  37. <td><input type="text" name="phone_number" value="" size="20" /></td>
  38. </tr>
  39. <tr>
  40. <td class="td_formularz">Email:</td>
  41. <td><input type="text" name="mail" value="" size="20" /></td>
  42. <td>tylko cyfry</td>
  43. <td>np. 555000444</td>
  44. </tr>
  45. </table>
  46. <table width="489" border="0" cellpadding="2">
  47. <tr>
  48. <td width="82" class="td_formularz">Treść:</td>
  49. <td width="393"><textarea name="sugestion" cols="40" rows="7" wrap="virtual"></textarea></td>
  50. </tr>
  51. <tr>
  52. <td class="td_formularz">&nbsp;</td>
  53. <td><span class="td_formularz">
  54. <input type="submit" value="Wyślij zapytanie" name="send" />
  55. </span></td>
  56. </tr>
  57. </table>
  58. </form>
  59. </form>
  60. <p>&nbsp;</p>
  61. </body></html>
  62.  


Cytat(O$iek @ 18.10.2010, 17:02:01 ) *
Przecież tam i w komunikacje błędu jest wszystko napisane:
Pierw wysyłasz nagłówek w linii 14 - HTML, że wystąpił błąd, a potem próbujesz wysłać, przekierowanie zdaje się i pluje błędem.
#edit: czekaj...

#edit2
A w pliku
/zapytanie/configuration.php
wysyłasz cokolwiek do użytkownika? Bo jemu ewidentnie nie podoba się ta 14 linia..


plik configuration.php

  1. <?php
  2. $mail='alveus@o2.pl'; //adres na który mają być wysyłane wiadomości
  3. $adres='http://alveus1.com.pl/zapytanie/index.php'; //adres do strony która zawiera formularz
  4. $from='Zapytanie Ofertowe'; //
  5. $subject='Potwierdzenie zapytania ofertowego'; //Temat wiadomości
  6. $cost=0; //
  7. $cost_post=0; //
  8. $mail_content1='Witamy!<br /> Twoje zapytanie zostało zarejestrowane.<br /> Wkrótce otrzymasz odpowiedź<br />';//Po tym ciągu znaków zostaną wyświetlone dane zapytania
  9. $mail_content_seller='Zapytanie Ofertowe: <br />'; //Treść maila dla nas
  10. $subject_seller='Nowe zapytanie ofertowe';//Temat wiadomości dla nas
  11. ?>


no właśnie ja nie chce nic do niego wysyałać tylko do nas.
O$iek
Podobno działa to co facet opisał na tym blogu.
Maker5
Cytat(O$iek @ 18.10.2010, 17:14:16 ) *
Podobno działa to co facet opisał na tym blogu.



poprawiłem każdą stronę gdzie mam php i dodałem to co ten chłopak sugerował.
ale teraz pojawia się inny błąd.
nie może załadować strony wynik.php.

jak myślisz dlaczego ?
O$iek
Jak brzmi ten błąd i czy strona wynik.php robi coś twórczego?
#edit
Oglądam tak ten twój kod z nudów i widzę, że wstawiłeś funkcję ob_start() po
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. <link href="./style.css" rel="stylesheet" type="text/css" />
  5. </head>
  6. <body>

Wstaw ją przed jakimkolwiek html'em.
2. Zdaje się, że nie można załadować strony wynik.html przynajmniej tak masz napisane w skrypcie:
  1. if(isset($_GET['accept']))
  2. {
  3. $url='Location:wynik.html' ;
  4. header($url);
  5. }

Chodzi o to, że ten plik nie istnieje.
Maker5
Cytat(O$iek @ 18.10.2010, 18:44:38 ) *
Jak brzmi ten błąd i czy strona wynik.php robi coś twórczego?



nie brzmi po prostu wywala
bad wczytywania strony a
w pasku adresu pojawia się ten komunikat

http://alveus1.com.pl/zapytanie/form.php?accept=ok
Echonik
Podzielam zdanie O$iek odnośnie stawienia ob_start() na samym początku kodu przed jakimkolwiek skryptem HTML.

Jeśli chodzi o błąd związany z imieniem, to wytłumacz mi, co miałaby zrobić dokładnie ta linijka kodu:

  1. $url='Location:' . $adres . '?error=' . $error;


Coś o Location znajdziesz tu: http://php.net/manual/en/function.header.php
Maker5
Po wielu próbach doszedłem do wniosku że nie ma sensu męczyć się z tym.
Przeniosłem stronę na hosting dreamhost.com i wszystko działa idealnie.

Niestety problemy były obecne tylko i wyłącznie na home.pl


Tak to właśnie jest z ich profesjonalnym podejściem do hostingu.

Na dreamhost od samego początku jak mam tam hosting (2 lata)
żaden problem nie trwał dłużej niż 15 minut a tu jak widać.

To tyle.

Dzięki za pomoc i chęci.
thek
Na dreamie też masz na bank ten byk, ale jest on pewnie "wyciszony". Twoim błędem jest wysłanie kodu HTML przed funkcją ob_start()! Najpierw kod wysyłasz, potem sprawdzasz warunki i ewentualnie przekierowujesz. A tak nie wolno robić. Przed przekierowaniem nie może być nic wysłane do usera. Ty tę zasadę złamałeś. Jeśli chcesz coś wypisać przed przekierowaniem to musisz to wrzucić do bufora i dopiero gdy konieczne - wysłać do przeglądarki. Przykład kodu z przeróbką, który na bank by zadziałał.
  1. <?php
  2. $bufor = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title></title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <link href="./style.css" rel="stylesheet" type="text/css" />
  8. </head>
  9. <body>';
  10. if(isset($_GET['accept']))
  11. {
  12. header( 'Location:wynik.html' );
  13. }
  14. elseif(isset($_GET['error']))
  15. {
  16. $bufor .= urldecode($_GET['error']);
  17. }
  18. $bufor .= '<script type="text/javascript" src="./formscript.js"></script>
  19. <form name="form" action="formprocess.php" method="POST">
  20. <table width="489" border="0" cellpadding="2">
  21. <tr>
  22. <td width="117" class="td_formularz">Imię:</td>
  23. <td width="120"><input type="text" name="name" value="" size="20" /></td>
  24. <td width="98"><span class="td_formularz">Nazwisko:</span></td>
  25. <td width="128"><input type="text" name="surname" value="" size="20" /></td>
  26. </tr>
  27. <tr>
  28. <td class="td_formularz">Firma:</td>
  29. <td><input type="text" name="street" value="" size="20" /></td>
  30. <td><span class="td_formularz">Nr telefonu<br>
  31. </span></td>
  32. <td><input type="text" name="phone_number" value="" size="20" /></td>
  33. </tr>
  34. <tr>
  35. <td class="td_formularz">Email:</td>
  36. <td><input type="text" name="mail" value="" size="20" /></td>
  37. <td>tylko cyfry</td>
  38. <td>np. 555000444</td>
  39. </tr>
  40. </table>
  41. <table width="489" border="0" cellpadding="2">
  42. <tr>
  43. <td width="82" class="td_formularz">Treść:</td>
  44. <td width="393"><textarea name="sugestion" cols="40" rows="7" wrap="virtual"></textarea></td>
  45. </tr>
  46. <tr>
  47. <td class="td_formularz"> </td>
  48. <td><span class="td_formularz">
  49. <input type="submit" value="Wyślij zapytanie" name="send" />
  50. </span></td>
  51. </tr>
  52. </table>
  53. </form>
  54. </form>
  55. <p> </p>
  56. </body></html>';
  57. echo $bufor;
Widzisz co zrobiłem z buforem? Nic nie poszło do przeglądarki wcześniej. Mogłem użyć funkcji ob_*, ale chciałem byś widział zasadę tego co należy robić, a raczej czego nie należy, używając header. Wszystko sobie na boku sklejam i wyświetlam dopiero gdy trzeba, a nie gdzie popadnie. To są złe nawyki i trzeba się ich pozbywać.
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.