Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Sesja i komunikaty dziwne
Forum PHP.pl > Forum > Przedszkole
janek222
witam, problem wałkowany zapewne setki razy ale po zrobieniu chyba juz wiekszości propozycji jakie znalazłem wymiękam. Mianowicie w Dreamweawer tworzę swoja stronę i występuje mi błąd
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\strona\log.php:1) in C:\xampp\htdocs\strona\log.php on line 0

Próbowałem, jak to było proponowane w wielu odpowiedziach dodać ob_start() na początku i ob_end_flush() na końcu- to nic nie pomogło. Dodam, że kodowanie UTF-8 i w opcjach programu jest odznaczona opcja do dodania "BOM".
Edytowałem plik php.ini i tam w jednym miejscu zmieniałem z off na on.
Gdy na początku pliku dodałem session_start() odziwo uruchomiło się bez błędów, ale gdy wprowadze błędne dane do logowania pojawia się coś takiego
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\strona\log.php:2) in C:\xampp\htdocs\strona\log.php on line 74
a gdy dane są poprawne to coś takiego, czy wnioskuje że połączenia z bazą jest poprawne tylko coś innego psuje
Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in C:\xampp\htdocs\strona\log.php on line 63
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\strona\log.php:2) in C:\xampp\htdocs\strona\log.php on line 71

Sprawdziłem jeszcze dla pewności, czy na początku nie ma jakiś krzaczków za pomocą programu pspad i było ok

Mam kod, w którym jest prosty formularz do wprowadzania loginu i hasła no i oczywiscie baze użytkowników.
Oto kod:
  1. <?php virtual('/strona/Connections/sklep.php'); ?>
  2. <?php
  3. if (!function_exists("GetSQLValueString")) {
  4. function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
  5. {
  6. if (PHP_VERSION < 6) {
  7. $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  8. }
  9.  
  10. $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  11.  
  12. switch ($theType) {
  13. case "text":
  14. $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  15. break;
  16. case "long":
  17. case "int":
  18. $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  19. break;
  20. case "double":
  21. $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
  22. break;
  23. case "date":
  24. $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  25. break;
  26. case "defined":
  27. $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  28. break;
  29. }
  30. return $theValue;
  31. }
  32. }
  33. ?>
  34. <?php
  35. // *** Validate request to login to this site.
  36. if (!isset($_SESSION)) {
  37. }
  38.  
  39. $loginFormAction = $_SERVER['PHP_SELF'];
  40. if (isset($_GET['accesscheck'])) {
  41. $_SESSION['PrevUrl'] = $_GET['accesscheck'];
  42. }
  43.  
  44. if (isset($_POST['login'])) {
  45. $loginUsername=$_POST['login'];
  46. $password=$_POST['haslo'];
  47. $MM_fldUserAuthorization = "";
  48. $MM_redirectLoginSuccess = "/strona/index.html";
  49. $MM_redirectLoginFailed = "/strona/log.php";
  50. $MM_redirecttoReferrer = false;
  51. mysql_select_db($database_sklep, $sklep);
  52.  
  53. $LoginRS__query=sprintf("SELECT login, haslo FROM uzytkownicy WHERE login=%s AND haslo=%s",
  54. GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
  55.  
  56. $LoginRS = mysql_query($LoginRS__query, $sklep) or die(mysql_error());
  57. $loginFoundUser = mysql_num_rows($LoginRS);
  58. if ($loginFoundUser) {
  59. $loginStrGroup = "";
  60.  
  61. if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
  62. //declare two session variables and assign them
  63. $_SESSION['MM_Username'] = $loginUsername;
  64. $_SESSION['MM_UserGroup'] = $loginStrGroup;
  65.  
  66. if (isset($_SESSION['PrevUrl']) && false) {
  67. $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
  68. }
  69. header("Location: " . $MM_redirectLoginSuccess );
  70. }
  71. else {
  72. header("Location: ". $MM_redirectLoginFailed );
  73. }
  74. }
  75. ?>
  76. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  77. <html xmlns="http://www.w3.org/1999/xhtml">
  78. <head>
  79. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  80. <title>Dokument bez tytułu</title>
  81. </head>
  82.  
  83. <body>
  84. <form id="form1" name="form1" method="POST" action="<?php echo $loginFormAction; ?>">
  85. <label for="login">login</label>
  86. <input type="text" name="login" id="login" />
  87. <label for="haslo">haslo</label>
  88. <input type="password" name="haslo" id="haslo" />
  89. <input type="submit" name="wyslij" id="wyslij" value="Wyślij" />
  90. </form>
  91. </body>
  92. </html>


mlawnik
Forum nie parser.

session_start wstawia się przed wysłaniem jakichkolwiek danych do przeglądarki.
toaspzoo
Kolego !

Po 1: Sesje startuje się ZAWSZE w każdym pliku nie zależnie od tego, czy była w innym.

Po 2: Początek każdego plku .php MUSI wyglądać TAK:
  1. <?php


funkcja session_start zawsze musi być pierwsza, przed wywołaniem czegokolwiek innego

pozdro
janek222
wtedy, co mi na początku nie wywalało błędy to session_start było dodane na samym początku, czy mniej więcej to tak wyglądało
  1. <?php session_start(); ?>
  2. <?php virtual('/strona/Connections/sklep.php'); ?>
  3. <?php
  4. ...
mat-bi
Podstawy... Nagłówki wysyłamy PRZED jakimikolwiek danymi (session_start też tworzy jakby nagłówek, zresztą komunikat jasno ci określa problem)
tolomei
Poczytaj także o funkcjach ob_start() oraz ob_end_flush().

Pozdrawiam
mat-bi
Cytat
Próbowałem, jak to było proponowane w wielu odpowiedziach dodać ob_start() na początku i ob_end_flush() na końcu- to nic nie pomogło.


Nie chcę być złośliwy, ale...
janek222
Cytat(mat-bi @ 8.05.2011, 23:34:08 ) *
Nie chcę być złośliwy, ale...

jak ma mi to pomóc to napisz
tolomei
Racja mat-bi.
Trzeba tępić takich jak ja, którzy nie czytają dokładnie postów.
Obiecuję poprawę smile.gif

PS. Może plik log.php jest includowany do innego pliku(np. index.php)?
Wtedy ob_start() wstawiasz w index.php.

Co złego to nie ja smile.gif
janek222
teraz to już nic nie czaje, wrzuciłem ten kod na serwer, w takiej samej formie jak tu i działa, dlaczego??
mat-bi
Może to dlatego, że jest inny poziom raportowania błędów? Wstaw

  1. ini_set('display_errors', '1');


i pokaż, czy coś wywaliło
janek222
Cytat(mat-bi @ 9.05.2011, 21:20:03 ) *
Może to dlatego, że jest inny poziom raportowania błędów? Wstaw

  1. ini_set('display_errors', '1');


i pokaż, czy coś wywaliło


nic nie wywaliło, ale zobaczyłem u siebie, że jak dane do logowania, z pliku sklep.php wrzucę do tego głównego kodu i wywalę pierwszą linijkę to działa też dobrze. Nie wiem co jest źle jak jest w tym osobnym pliku
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.