Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sessie i gubienie danych
Forum PHP.pl > Forum > Przedszkole
redelek
Cześć,

Mam mały problem i nie mogę dojść dlaczego tak się dzieje.
Po poprawnym zalogowaniu w panelu tworzy mi się plik z danymi sessi.
Mam plik dodaj.php w którym sprawdzam czy mogę go wyświetlić czy nie
  1. <?php
  2. session_start(); //sesje, do logowania
  3. ob_start();  //emulacja headerow
  4. require_once('inc/lib_pdb.php');
  5. if ($_SESSION["zalogowany"]=="tak") {
  6. // TU SIĘ WYŚWITLA
  7. }
  8. ?>


Wszystko pięknie tylko że po uruchomieniu pliku dodaj.php to on robi mi nową sesję bez danych. Jak zrobić żeby dane które zapisał w sesji po zalogowaniu z pliku index.php, były czytane w innych plikach php.
Jeśli usunę linijki
  1. <?php
  2. session_start(); //sesje, do logowania
  3. ob_start();  //emulacja headerow
  4. ?>


To nie wie który plik sesji ma odczytać i wywala błąd logowania( czyli nie widzi tego pliku )

Możecie mi pomóc ?
Fifi209
  1. <?php
  2. session_start(); //sesje, do logowania
  3. ob_start();  //emulacja headerow
  4. ?>


Żadna emulacja headerów a raczej włączenie buforowania.

Teraz weź manual i poczytaj dlaczego ob_start" title="Zobacz w manualu PHP" target="_manual musi być przed session_start" title="Zobacz w manualu PHP" target="_manual
redelek
No dobrze , może i nie do kończ zrozumiałem manual.
Chodzi mi o to jak w innym pliku php odczytać tane sesji.
Tak wygląda mój plik dodaj.php

  1. <?php
  2. ob_start();  //emulacja headerow
  3. session_start(); //sesje, do logowania
  4. $ses_id = session_id();
  5. require_once('inc/lib_pdb.php');
  6. if ($_SESSION["zalogowany"]=="tak") {
  7. require_once('head.php');
  8. echo "<div id=\"strona\">
  9. <div id=\"naglowek\">
  10.    ".getDateInfo()."
  11. </div>
  12. <div id=\"lewakolumna\">";
  13. require_once('menu.php');
  14. echo "</div>
  15. <div id=\"prawakolumna\">
  16. ";
  17. echo '<p class="inforamka">Informacja: <span class="info"> Tu dodajesz swój prezent</span></p><br />';
  18. $opcja = trim($_REQUEST["opcja"]);
  19. if ($opcja==""){
  20. echo "<form name=\"formularz\" method=\"post\" >";
  21. echo "<table class=\"dpdane\" cellspacing=\"0\" cellpadding=\"0\">
  22.        <tr>
  23.            <td class=\"dpopis\" >Skrócona opis<p>(max 60 znaków)</p></td>
  24.            <td class=\"dpdane\" ><input class=\"pole\" name=\"fopis\" maxlength=\"60\" size=\"67\"  type=\"text\" /></td></tr>
  25.            <td class=\"dpopis\" >Okazja</td>
  26.            <td class=\"dpdane\" ><select name=\"typ_prezentu\">
  27.                                                    <option>urodziny&nbsp</option>
  28.                                                    <option class=\"option\">imieniny</option>
  29.                                                    <option>chrzciny</option>
  30.                                                    <option class=\"option\">komunia</option>
  31.                                                    <option>bierzmowanie</option>
  32.                                                    <option class=\"option\">ślub</option>
  33.                                                </select></td></tr>
  34.            <td class=\"dpopis\" >Koszt zakupu</td>
  35.            <td class=\"dpdane\" ><input class=\"pole\" name=\"fkoszt\" maxlength=\"10\" size=\"12\"onkeypress=\"return onlydec(event,'');\"  type=\"text\" />&nbsp;zł</td></tr>
  36.            <td class=\"dpopis\" >Dokładny opis prezentu</p></td>
  37.            <td class=\"dpdane\" ><textarea cols=\"50\" rows=\"10\" name=\"fdokladnyopis\" ></textarea></td></tr>
  38.            <td class=\"dpopis\" >Link do strony</p></td>
  39.            <td class=\"dpdane\" ><input class=\"pole\" name=\"flink\" size=\"67\"  type=\"text\" /></td></tr>
  40.            <td class=\"dpopis\" >Dodaj zdjęcie (150x150) format ( jpg, png )</td>
  41.            <td class=\"dpdane\" ><input class=\"pole\" name=\"fplik\" type=\"file\" size=\"35\" /></td></tr>
  42.            <td class=\"menubuttons\" colspan=\"2\" ><input class=\"add\" type=\"submit\" value=\"Dodaj prezent\" /></td>
  43.            <input type=\"hidden\" name=\"opcja\" value=\"dodajprezent\" />
  44.            
  45.            
  46.            
  47.            
  48.            </table></form>";
  49.    }
  50. $opcja = trim($_POST["opcja"]);
  51. if ($opcja=="dodajprezent"){
  52.    $opis=$_POST["fopis"];
  53.    $okazja=$_POST["typ_prezentu"];
  54.    $koszt=$_POST["fkoszt"];
  55.    $dokladnyopis=$_POST["fdokladnyopis"];
  56.    $link=$_POST["flink"];
  57.    $plik=$_POST["fplik"];
  58.    $uzytkownik=$_SESSION["id_uzytkownika"];
  59.    $DT=$dzisiaj = date("Y-m-d");
  60.    echo $opis."<br />";
  61.    echo $okazja."<br />";
  62.    echo $koszt."<br />";
  63.    echo $dokladnyopis."<br />";
  64.    echo $link."<br />";
  65.    echo $plik."<br />";
  66.    echo $uzytkownik."<br />";
  67.    echo $DT."<br />";
  68.    polacz_db();
  69.    mysql_query("SET NAMES 'utf8'");
  70.    mysql_query("SET CHARACTER_SET_CLIENT=utf8");
  71.    mysql_query("SET CHARACTER_SET_RESULTS=utf8");
  72.    $szukaj=mysql_query("SELECT * FROM $M_TABELA2 WHERE `id_uzytkownika`='$uzytkownik'");
  73.    $dane=mysql_fetch_array($szukaj);
  74.    $USE=$dane["imie"]." ".$dane["nazwisko"];
  75.    $wynik = "INSERT INTO $M_TABELA (id_prezentu, id_uzytkownika, id_rezerwujacego, skr_prezentu, koszt, szczegoly, link, mini_fotka, rezerwacja, realizacja, typ_prezentu, dt_dodania, dt_realizacji) ".
  76.            "VALUES (NULL, '$USE', '', '$opis', '$koszt', '$dokladnyopis', '$link', '$plik' , '0', '0', '$okazja', '$DT', '')";
  77.            mysql_query($wynik) or die ('Nie można dodać rekordu !!!'.mysql_error());
  78.            echo 'Rekord dodany do bazy';
  79. }
  80.    
  81.    
  82.    
  83. echo "</div>";
  84. require_once('stopka.php');
  85. }
  86.    else {
  87.        echo "Błąd logowania";
  88.        }
  89. ?>


Problem jest w tym, że za pierwszym razem dodaje mi poprawnie rekord kolejne dodania już nie bo nie widzi danych z sesji. O to mi chodzi

Cześć pomóżcie bo już nie mam pojęcia co robię źle

Mam w pliku head.php takie ustawienia
  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  8. <title>Prezentownik</title>
  9. <style type="text/css" media="all">@import url(style/style.css);</style>
  10. <script type="text/javascript" src="js/my_js.js"></script>
  11. </head>
  12. <body>


Plik we wszystkich innych plikach jest zawsze ładowany jako pierwszy.
W pliku index.php po sprawdzeniu logowania jest robiona sesja z danymi
  1. <?php
  2. $wynik=mysql_query("SELECT * FROM $M_TABELA2 WHERE `uzytkownik`='$uzytkownik' and `haslo`='$haslo' and `blokada`=0");
  3.    //echo $wynik;                    
  4.    if (mysql_num_rows($wynik)==1) {
  5.            $dane=mysql_fetch_array($wynik);
  6.            $_SESSION["zalogowany"]="tak";
  7.            $_SESSION["iduz"]=$dane["id_uzytkownika"];
  8.            $_SESSION["login"]=$dane["uzytkownik"];
  9.            $_SESSION["blokada"]=$dane["blokada"];
  10.            $_SESSION["uprawnienia"]=$dane["uprawnienia"];
  11.            $_SESSION["imie"]=$dane["imie"];
  12.            $_SESSION["nazwisko"]=$dane["nazwisko"];
  13.            $_SESSION["dt_logowania"]=$dane["dt_logowania"];
  14.            $wynik=mysql_query("UPDATE $M_TABELA2 SET `dt_logowania`=NOW() WHERE `uzytkownik`='$uzytkownik' and `blokada`=0");
  15.            //mysql_query($zapytanie, polacz_db()) or die (mysql_error());
  16.            header("Location: indexl.php");
  17.        }
  18. ?>

Po zalogowaniu się plik sesji wygląda pięknie
zalogowany|s:3:"tak";iduz|s:1:"1";login|s:6:"predel";blokada|s:1:"0";uprawnienia|s:1:"A";imie|s:5:"Piotr";nazwisko|s:5:"Redel";dt_logowania|s:19:"2009-08-06 13:50:25";
Jeśli wybiorę inny plik php natychmiast sesja kasuje niektóre dane
Po przejściu na inny plik
zalogowany|s:3:"tak";iduz|s:1:"1";login|s:6:"predel";blokada|s:1:"0";uprawnienia|s:1:"A";imie|N;nazwisko|N;dt_logowania|s:19:"2009-08-06 13:50:25";
Dlaczego tak się dzieje i dokładnie te dwa pola znikają ?

Proszę proszę pomocy
motylo
W pliku pobierającym id użytkownika (ten główny plik który dołączasz do wszystkich) jest wprowadzone:
$_SESSION["iduz"]=$dane["id_uzytkownika"];

A przy dodawaniu (linia 60) sprawdzane:
$uzytkownik=$_SESSION["id_uzytkownika"];
redelek
Tamto to stare i jest już poprawione. Problem w tym, ża zawsze ginie imię i nazwisko.
Wszystko poza tym jest , to jest dziwne dlaczego tylko imię i nazwisko:(
motylo
zrób var_dump danych otrzymanych z bazy danych i zobacz czy masz nazwisko i imie,
przed wykonaniem zapisu do bazy danych zrób var_dump danych sesji i zobacz czy
tam istnieje imie i nazwisko.
redelek
tak po zalogowaniu mam wszystko w sesji,
kliknięcie na inny link powoduje usunięcie tego imienia i nazwiska.
Patrzę na te pliki jak sroka w gnat i już nic nie widzę sad.gif
motylo
Jak nie masz debugera jakiegoś to nie var_dump tylko:
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

W miejscu po session_start() i wyświetl sobie session_id()

Napisałeś że te źródła które pokazałeś są już stare. Może warto pokazać nowe? winksmiley.jpg

Pozdro
redelek
w pliku dodaj.php jest troszkę modyfikacji, ale
to co jest poniżej jest jak najbardziej aktualne.
ID sesji wyświetla się poprawnie i cały czas jest ta sama jak przechodzę na inne podstrony.
Niestety cały czas gubi mi to cholerne imię i nazwisko

DZIAŁA JAK ZŁOTO exclamation.gif!!!!

Nie wiem dokładnie w czym był problem, ale chyba w tym, że jednak sesje nazywały się tak jak zmienne w kodzie php.
Samiast $_SESSION["imie"], $_SESSION["nazwisko"] zmieniłem wszystko na $_SESSION["simie"], $_SESSION["snazwisko"].
I DZIAŁA sad.gif nie wiem czy to możliwe, ale chyba lepiej unikać podobnych zmiennych smile.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.