Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Błąd w dodawaniu komentarzy
Forum PHP.pl > Forum > Przedszkole
lokotheboy
Witam.

W miejscu, w którym mam komentarze pojawia się błąd:

  1. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/lokotheb/domains/........menu.php:20) in /home/lokotheb/domains/............komentator.php on line 3
  2.  
  3. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/lokotheb/............menu.php:20) in /home/lokotheb/domains/.....................komentator.php on line 3


Dodatkowo nie pojawia się kod captcha - brak literek, tło jest.

capcha.php
  1. <?php
  2.  
  3. /* config */
  4.  
  5. $imgPatch = "images-captcha/";
  6. $fntPatch = "fonts/";
  7.  
  8. $images = preg_grep("/.+\..+/si", scandir($imgPatch));
  9. $images = $images[array_rand($images)];
  10.  
  11. $fonts = preg_grep("/.+\..+/si", scandir($fntPatch));
  12. $fonts = $fntPatch . $fonts[array_rand($fonts)];
  13.  
  14. /* script */
  15.  
  16. $i = imagecreatefromjpeg($imgPatch . $images);
  17. imagettftext($i, 25, rand(-7, 7), rand(1, 20), ceil(next(getimagesize($imgPatch . $images))/2)+10, imagecolorallocatealpha($i, 255, 255, 255, 60), $fonts, $_SESSION["captcha"]);
  18.  
  19. header('Content-Type: image/jpeg');
  20. imagejpeg($i);
  21. imagedestroy($i);
  22.  
  23. ?>


komentator.php
  1. <?php
  2.  
  3.  
  4. $status = "";
  5.  
  6. if ( isset ( $_POST["submit"] ) )
  7. {
  8.  
  9. if ( strtolower ( htmlspecialchars ( $_POST["captcha"] ) ) == strtolower ( $_SESSION["captcha"] ) )
  10. {
  11.  
  12. $status = "info";
  13.  
  14. }
  15. else
  16. {
  17.  
  18. $status = "error";
  19.  
  20. }
  21.  
  22. }
  23.  
  24. $_SESSION["captcha"] = substr(str_replace(array(1, 0, "O", "I", "L"), array("X"), strtoupper(md5(date("Y-m-d H:i:s" . rand(0, 999))))), 0, 6);
  25.  
  26. ?>
  27. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  28. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  29. <head>
  30. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  31. <title>Test formularza zabezpieczonego captcha</title>
  32. <meta name="author" content="JG24 TEAM - Marusz" />
  33. <meta name="copyright" content="2009" />
  34. <style type="text/css">
  35. * { font-family: Arial, Verdana; font-size: 12px; }
  36. input, textarea { display: block; padding: 3px; margin: 2px 0; border: 1px solid grey; }
  37. form { padding: 15px; }
  38. div#error { border: 2px solid #000; background-color: #ff0000; color: #fff; font-weight: bold; padding: 10px; }
  39. div#info { border: 2px solid orange; background-color: yellow; color: #000; font-weight: bold; padding: 10px; }
  40. </style>
  41. </head>
  42. <body>
  43.  
  44. <?php
  45.  
  46. if ( !empty ( $status ) )
  47. {
  48.  
  49. ?><div id="<?php echo $status; ?>"><?php echo $status == "info" ? "Formularz został wysłany poprawnie" : "Wyst?pił bł?d - formularz nie zostanie wysłany..." ?></div><?php
  50.  
  51. }
  52.  
  53. ?>
  54.  
  55. <form method="post">
  56. Imię:
  57. <input type="text" name="imie" value="<?php if ( isset ( $_POST["imie"] ) && $status != "info" ) { echo htmlspecialchars($_POST["imie"]); } ?>" />
  58. Tekst:
  59. <br />
  60. <textarea name="tekst"><?php if ( isset ( $_POST["tekst"] ) && $status != "info" ) { echo htmlspecialchars($_POST["tekst"]); } ?></textarea>
  61. <hr />
  62. <img src="captcha.php" alt="captcha" />
  63. <br />
  64. Przepisz tekst z powyższego obrazka:
  65. <input type="text" name="captcha" value="" />
  66. <hr />
  67. <input type="submit" name="submit" value="Wy?lij formularz" />
  68. </form>
  69.  
  70. </body>
  71. </html>


Skąd ten błąd?
Z góry dziękuję i pozdrawiam,
crocodillo
session_start() wykorzystuje nagłówki, z tego powodu przed wywołaniem tej funkcji nic nie możesz wysłać do przeglądarki. Polecam zapoznanie się z ob_start(),
modern-web
Na początku skryptu dodaj funkcję ob_start(); oraz na końcu ob_end_flush();

P.S.
Rozwijając myśl kolegi powyżej - problem taki pojawia się gdy wykonujesz skrypt PHP (inicjacja sesji) po wysłaniu do przeglądarki części kodu HTML.
lokotheboy
Cytat(modern-web @ 23.02.2012, 23:40:33 ) *
Na początku skryptu dodaj funkcję ob_start(); oraz na końcu ob_end_flush();

P.S.
Rozwijając myśl kolegi powyżej - problem taki pojawia się gdy wykonujesz skrypt PHP (inicjacja sesji) po wysłaniu do przeglądarki części kodu HTML.


Funkcje mam dodać przed <html> pliku głownego (np: index.php) czy przed <html> includowanego pliku?
nospor
Skorzystaj w wyszukiwarki, bo tam problem jest omówiony bardzo dobrze i petryliard razy.
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.