Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zasięg zmiennych globalnych $_SESSION['zmienna']
Forum PHP.pl > Forum > PHP
Kriss07
Witam
Czy zmienne globalne gdzieś się ustawia, włącza czy ...
Napisałem skrypt i testowałem go w XAMPPie śmiga jak ta lala
po przekopiowaniu plików na hosting umarło
  1. //plik klient
  2.  
  3. $_SESSION['klient_nazwisko'] = $dane['nazwisko'];
  4.  
  5. echo $SESSION['klient_nazwisko']; // XAMPP działa hosting działa
  6.  
  7. // inny plik
  8.  
  9. echo $SESSION['klient_nazwisko']; // XAMPP działa hosting nie działa

pomóżcie
trueblue
Najlepiej to:
  1. echo $_SESSION['klient_nazwisko'];

I oczywiście startować sesję na początku.
Kriss07
  1. //plik klient
  2.  
  3. $_SESSION['klient_nazwisko'] = $dane['nazwisko'];
  4.  
  5. echo $_SESSION['klient_nazwisko']; // XAMPP działa hosting działa
  6.  
  7. // inny plik
  8.  
  9. echo $_SESSION['klient_nazwisko']; // XAMPP działa hosting nie działa

tylko tutaj się pomyliłem przy wpisywaniu przykładu.



session_start(); jest w każdym pliku zaraz po <?php
gino
rozumiem, że sesje w tym innym pliku wystartowałeś?

edit ok
dublinka
Umarlo czyli co
Nic sie nie wyswietla?, jakies bledy ?

Sprawdz co zawiera tablica

  1. print_r($_SESSION);
Kriss07
jasna sprawa
mam jeden plik startowy ze wszystkimi nagłówkami i jego kopiuję kiedy potrzebuję nowy.

Cytat(dublinka @ 30.01.2021, 17:44:37 ) *
Umarlo czyli co
Nic sie nie wyswietla?, jakies bledy ?

nie wyświetla się
gino
Na hostingu ten inny plik jest w tej samej domenie ?

bo jeśli jest jak piszesz, to dostęp do danych sesyjnych w domenie jest nieograniczony pod warunkiem wystartowania sesji. Pod warunkiem, że najpierw wrzucisz do sesji a później odczytasz.
dublinka
Sprawdz co zawiera to

  1. $dane['nazwisko'];
Kriss07
ten kod jest w pliku klient.php gdzie jest odczyt z bazy danych i to samo w pliku kinfo.php
  1. <div id="topbarL">
  2. <?php //echo "<div class='tpb-h'>".$imie." ".$nazwisko."</div>";
  3. echo "<div class='tpb-h'>".$_SESSION['klient_imie']." ".$_SESSION['klient_nazwisko']."</div>";
  4. echo $_SESSION['klient_ulica'] ." ".$_SESSION['klient_nr_domu'];
  5. if($_SESSION['klient_nr_lokalu']>0)
  6. {
  7. echo "/".$_SESSION['klient_nr_lokalu'];
  8. }
  9. echo "; ".$_SESSION['klient_kod']." ".$_SESSION['klient_miasto'];
  10. echo "<br/>Tel: ".$_SESSION['klient_tel_k'];
  11. if($_SESSION['klient_tel_s']>0)
  12. {
  13. echo "; Tel2: ".$_SESSION['klient_tel_s'];
  14. }
  15. echo "<br/>E-mail: ".$_SESSION['klient_email'];
  16. echo "<br/>www: ".$_SESSION['klient_www'];
  17.  
  18. ?>
  19. </div>

plik klient.php XAMPP i Hosting wyświetla poprawnie
natomiast na hostingu one.com w pliku kinfo.php
mam tylko to :
;
Tel:
E-mail:
www:
a w XAMPP są dane klienta
gino
Akurat ten fragment kodu jest najmniej interesyujący
dublinka
Mozna tylko zgadywac.
Posprawdzaj sobie co zwracaja zmienne ktore przypisujesz konktetnej sesji. Moze wogole nie maja wartosci. W tym przykkadzie nic nie widac. Tu pikazujesz sam efekt ktory chcesz uzyskac. Operujesz nazwami plikow w ktorym niewiadomo co jest
Kriss07
Cytat(gino @ 30.01.2021, 18:04:21 ) *
Akurat ten fragment kodu jest najmniej interesyujący


kod z pliku klient.php
  1. $sql_klient="SELECT * FROM klienci, kontakty WHERE id_klient='$id_klient' AND klienci.id_kontakt = kontakty.id_kontakt";
  2. if($rezultat = @$polaczenie->query(sprintf($sql_klient)))
  3. {
  4. // Pytamy o klienta
  5. if($rezultat->num_rows >0)
  6. {
  7.  
  8. $dane = $rezultat->fetch_assoc();
  9.  
  10. $klient_status= $dane['status'];
  11. $_SESSION['klient_nazwa'] = $dane['nazwa'];
  12. $_SESSION['klient_imie'] = $dane['imie'];
  13. $_SESSION['klient_nazwisko'] = $dane['nazwisko'];
  14. $_SESSION['klient_kod'] = $dane['kod'];
  15. $_SESSION['klient_miasto'] = $dane['miasto'];
  16. $_SESSION['klient_ulica'] = $dane['ulica'];
  17. $_SESSION['klient_nr_domu'] = $dane['nr_domu'];
  18. $_SESSION['klient_nr_lokalu'] = $dane['nr_lokalu'];
  19.  
  20. $_SESSION['klient_tel_s'] = $dane['tel_s'];
  21. $_SESSION['klient_tel_k'] = $dane['tel_k'];
  22. $_SESSION['klient_fax'] = $dane['fax'];
  23. $_SESSION['klient_email'] = $dane['email'];
  24. $_SESSION['klient_www'] = $dane['www'];
  25. }
  26. $rezultat->free_result();
  27. }

ten najmniej interesujący kod w pliku klient.php wyświetla się poprawnie z danymi klienta ale w kolejnym już nie.
dublinka
Co zawiera tablica
  1.  
  2. $_SESSION


Wyswietliles dane z tabeli dla pewnosci ze zawieraja wartosci?

Jezeli dane w jednym pliku wyswietlaja sie z sesji a w drugim juz nie majac session_start() to raczej niemozliwe. Sprawdz co zawiera tablica $_SESSION.
Wez sobie w tym pliku gdzie dane sie wyswietlaja przypisz do testowej sesji jakas losowa wartosc i sprawdz w tym drugim. Musi sie wyswietlac chyba ze mieszasz protokolami.
gino
Zrób jak pisze dublinka.
Zakomentuj cały kod, daj tylko
Kod
session_start();
$_SESSION['test_var'] = 123456;


w drugim pliku
Kod
session_start();
echo $_SESSION['test_var'];


i zobacz czy to chodzi na hoście. Jak działa to szukaj błędu.
Wyrzuć @ sprzed polaczenie, niech wyświetli ewentualne błędy połączenia.
Kriss07
NIE DZIAŁA
zrobiłem dwa pliki
1.zlecenie.php
  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['zalogowany']))
  5. {
  6. header('Location:index.php');
  7. exit();
  8. }
  9.  
  10. require_once "connect.php";
  11.  
  12. if(isset($_GET['zid']))
  13. {
  14.  
  15. $_SESSION['id_klient'] = $id_klient = $_GET['kid'];
  16. $_SESSION['id_zlecenie'] = $id_zlecenie = $_GET['zid'];
  17. $_SESSION['test_var'] = 123456;
  18. echo "<br/>Sesyjna test_var: ".$_SESSION['test_var'];
  19. $case = 2;
  20. echo "<br/>Sesyjna klient id: ".$_SESSION['id_klient'];
  21. echo "<br/>Sesyjna zlecenie id: ".$_SESSION['id_zlecenie'];
  22. }else{
  23. header('location:index.php');
  24. }
  25.  
  26. $id_firma = $_SESSION['id_firma'];
  27.  
  28. echo "<br/>Sesyjna firma id: ".$_SESSION['id_firma'];
  29.  
  30. $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
  31. if($polaczenie->connect_errno!=0)
  32. {
  33. //połączenia nie udało się ustanowić
  34. //Wyświetlanie błędu połączenia
  35. echo "Error: ".$polaczenie->connect_errno."Opis: ".$polaczenie->connect_error;
  36. }
  37. else
  38. { //Połączenie nawiązane -> zaczynamy zabawę
  39.  
  40. $sql_klient="SELECT * FROM klienci, kontakty WHERE id_klient='$id_klient' AND klienci.id_kontakt = kontakty.id_kontakt";
  41.  
  42. echo "<br/>SQL : ".$sql_klient;
  43. if($rezultat = $polaczenie->query(sprintf($sql_klient)))
  44. {
  45. // Pytamy o klienta
  46. if($rezultat->num_rows >0)
  47. {
  48.  
  49. $dane = $rezultat->fetch_assoc();
  50.  
  51. $klient_status= $dane['status'];
  52.  
  53. $_SESSION['klient_imie'] = $dane['imie'];
  54. echo "<br/>SQL dane imie: ".$dane['imie'];
  55. echo "<br/>Sesyjna klient imie: ".$_SESSION['klient_imie'];
  56.  
  57. $_SESSION['klient_nazwisko'] = $dane['nazwisko'];
  58. echo "<br/>SQL dane nazwisko: ".$dane['nazwisko'];
  59. echo "<br/>Sesyjna klient nazwisko: ".$_SESSION['klient_nazwisko'];
  60.  
  61. $_SESSION['klient_kod'] = $kod= $dane['kod'];
  62. $_SESSION['klient_miasto'] = $miasto= $dane['miasto'];
  63. $_SESSION['klient_ulica'] = $ulica= $dane['ulica'];
  64. echo "<br/>SQL dane ulica: ".$dane['ulica'];
  65. echo "<br/>Sesyjna klient ulica: ".$_SESSION['klient_ulica'];
  66.  
  67. $_SESSION['klient_nr_domu'] = $nr_domu= $dane['nr_domu'];
  68. echo "<br/>SQL dane nr_domu: ".$dane['nr_domu'];
  69. echo "<br/>Sesyjna klient nr_domu: ".$_SESSION['klient_nr_domu'];
  70.  
  71. $_SESSION['klient_nr_lokalu'] = $nr_lokalu= $dane['nr_lokalu'];
  72. $_SESSION['klient_tel_s'] = $tel_s= $dane['tel_s'];
  73. $_SESSION['klient_tel_k'] = $tel_k= $dane['tel_k'];
  74. $_SESSION['klient_fax'] = $fax= $dane['fax'];
  75. $_SESSION['klient_email'] = $email= $dane['email'];
  76. $_SESSION['klient_www'] = $www= $dane['www'];
  77. $inne= $dane['inne'];
  78. }
  79. $rezultat->free_result();
  80. }
  81. else
  82. {
  83. if(!$rezultat)throw new Exception($polaczenie->error);
  84. }
  85. $polaczenie->close();
  86. }
  87. ?>
  88. <div class="optionL"><a href="sesja_test.php">Sesja test</a></div>

wynik w XAMPP:
Sesyjna test_var: 123456
Sesyjna klient id: 6
Sesyjna zlecenie id: 7
Sesyjna firma id: 1
SQL : SELECT * FROM klienci, kontakty WHERE id_klient='6' AND klienci.id_kontakt = kontakty.id_kontakt
SQL dane imie: Stan
Sesyjna klient imie: Stan
SQL dane nazwisko: Gwiezdny
Sesyjna klient nazwisko: Gwiezdny
SQL dane ulica: Kosmiczna
Sesyjna klient ulica: Kosmiczna
SQL dane nr_domu: 99
Sesyjna klient nr_domu: 99
Sesja test

Hosting one.com:
Sesyjna test_var: 123456
Sesyjna klient id: 6
Sesyjna zlecenie id: 7
Sesyjna firma id: 1
SQL : SELECT * FROM klienci, kontakty WHERE id_klient='6' AND klienci.id_kontakt = kontakty.id_kontakt
SQL dane imie: Stan
Sesyjna klient imie: Stan
SQL dane nazwisko: Gwiezdny
Sesyjna klient nazwisko: Gwiezdny
SQL dane ulica: Kosmiczna
Sesyjna klient ulica: Kosmiczna
SQL dane nr_domu: 99
Sesyjna klient nr_domu: 99
Sesja test

2. sesja_test.php
  1. <?php
  2.  
  3. if(!isset($_SESSION['zalogowany']))
  4. {
  5. header('Location:index.php');
  6. exit();
  7. }
  8.  
  9. echo "<br/>Sesyjna test_var: ".$_SESSION['test_var'];
  10. echo "<br/>Sesyjna id firma: ".$_SESSION['id_firma'];
  11. echo "<br/>Sesyjna klient id: ".$_SESSION['id_klient'];
  12. echo "<br/>Sesyjna zlecenie id: ".$_SESSION['id_zlecenie'];
  13.  
  14. echo "<br/>Sesyjna klient imie: ".$_SESSION['klient_imie'];
  15.  
  16. echo "<br/>Sesyjna klient nazwisko: ".$_SESSION['klient_nazwisko'];
  17.  
  18. echo "<br/>Sesyjna klient ulica: ".$_SESSION['klient_ulica'];
  19.  
  20. echo "<br/>Sesyjna klient nr_domu: ".$_SESSION['klient_nr_domu'];
  21.  
  22. echo "<br/>Sesyjna test_var: ".$_SESSION['test_var'];
  23. ?>

wynik w XAMPP:

Sesyjna test_var: 123456
Sesyjna id firma: 1
Sesyjna klient id: 6
Sesyjna zlecenie id: 7
Sesyjna klient imie: Stan
Sesyjna klient nazwisko: Gwiezdny
Sesyjna klient ulica: Kosmiczna
Sesyjna klient nr_domu: 99
Sesyjna test_var: 123456


Wynik w hostingu one.com:

Sesyjna test_var: 123456
Sesyjna id firma: 1
Sesyjna klient id:
Sesyjna zlecenie id: 7
Sesyjna klient imie:
Sesyjna klient nazwisko:
Sesyjna klient ulica:
Sesyjna klient nr_domu:
Sesyjna test_var: 123456

wychodzi na to że dane z bazy są zbyt słabe żeby się w sesji utrzymać ale przeczy temu $_SESSION['id_klient'] bo nie pochodzi z bazy tylko z $_GET['kid'] a też ginie w sesja_test.php.
nie mam pojęcia co z tym zrobić.
dublinka
Ale warunek sie nie wykonuje wiec sesje "widzi"
Gdzies robisz blad. Przeanalizuj kod krok po kroku. Sorawdzaj wartosci zmiennych.
Kriss07
Cytat(dublinka @ 30.01.2021, 22:14:54 ) *
Ale warunek sie nie wykonuje wiec sesje "widzi"
Gdzies robisz blad. Przeanalizuj kod krok po kroku. Sorawdzaj wartosci zmiennych.


Warunek się wykonuje bo zmienna $_GET['zid'] jest i jest przypisana do $_SESSION['id_zlecenie'] i ma wartość 7
tak samo jak zmienna $_GET['kid'] przypisana do $_SESSION['id_klient'] z wartością 6
obie widać w zlecenie.php ale w sesja_test.php już tylko 7 - numer zlecenia
nie ma innego kodu oprócz tego co pokazałem w tych plikach
plik zlecenie.php i podlinkowany sesja_test.php odczyt, zapis i wyświetlenie
i gubi wartości z niektórych zmiennych

to nie jest jedyny problem z tym hostingiem ale tego poprostu nie rozumiem dlatego napisałem na tym forum.
gino
Wrzuć to na inny host, jakiś darmowy i zobacz czy się wykonuje.
Możliwe jest również, że sesja nie zdążyła się zapisać albo nie zapisuje się do końca, przed przekierowaniem przeglądarki na inną podstronę (chociaż mało prawdopodobne), ale spróbuj użyć session_write_close() na koniec pliku zlecenie.php
dublinka
Cytat(Kriss07 @ 30.01.2021, 21:45:36 ) *
Warunek się wykonuje.


Mowie o tym warunku. Skoro widzisz wydrukiwane wartosci to sie nie wykonuje czyli sesja jest widoczna. Jest to w tym problemowym pliku. Testowa sesja jest widoczna ta "zalogowany" rowniez i kilka innych bo widac wartosci wiec cos zle robisz gdzies

  1. if(!isset($_SESSION['zalogowany']))
  2. {
  3. header('Location:index.php');
  4. exit();
  5. }


Miales sprawdzic co zawiera tablica $_SESSION
Kriss07
Cytat(dublinka @ 30.01.2021, 23:21:23 ) *
Mowie o tym warunku. Skoro widzisz wydrukiwane wartosci to sie nie wykonuje czyli sesja jest widoczna. Jest to w tym problemowym pliku. Testowa sesja widoczna ta "zalogowany" rowniez i kilka innych bo widac wartosci wiec cos zle robisz gdzies

  1. if(!isset($_SESSION['zalogowany']))
  2. {
  3. header('Location:index.php');
  4. exit();
  5. }

sorki myślałem że ten drugi
Cytat(dublinka @ 30.01.2021, 23:21:23 ) *
Miales sprawdzic co zawiera tablica $_SESSION

a jak ją wywołać questionmark.gif
gino
Kod
print_r($_SESSION)
viking
Pewnie nie masz tam w ogóle połączenia z bazą ale ponieważ błędów nie wyświetlasz to nic o tym nie wiesz. Wyrzuć @ włącz raportowanie błędów (w przyklejonym temacie w przedszkolu masz opis jak to zrobić).
trueblue
Autor wyświetla dane z bazy również tej na hostingu, w poście #15.
gino
Pisałem Ci wczoraj abyś na próbę zmienił hosta na jakiś darmowy dla testów, bo może coś z konfiguracją tego hosta jest nie tak.
Tutaj masz swój kod odpalony na moim serwisowym i jak zobaczysz zapewne działa:

testo kodu

Jak byś to zrobił wczoraj, nie byłoby całej niepotrzebnej dyskusji.


Nie wiem skąd to bierzesz, bo tego nigdzie w Twoim kodzie do sesji nie masz wrzucone:

Kod
$id_firma = $_SESSION['id_firma'];


edit: na stronie sesja_test.php nie ma założonego kodowania więc wyświetla ulicę z krzaczkiem
Kriss07
Cytat(gino @ 31.01.2021, 12:26:05 ) *
Pisałem Ci wczoraj abyś na próbę zmienił hosta na jakiś darmowy dla testów, bo może coś z konfiguracją tego hosta jest nie tak.
Tutaj masz swój kod odpalony na moim serwisowym i jak zobaczysz zapewne działa:

testo kodu

Jak byś to zrobił wczoraj, nie byłoby całej niepotrzebnej dyskusji.


Nie wiem skąd to bierzesz, bo tego nigdzie w Twoim kodzie do sesji nie masz wrzucone:

Kod
$id_firma = $_SESSION['id_firma'];


edit: na stronie sesja_test.php nie ma założonego kodowania więc wyświetla ulicę z krzaczkiem


Gino mój serwer testowy pokazałem w pierwszym wywołaniu i u mnie działa ale nie o to chodzi nie poto wydałem parę stówek na host gdzie mi się program sypie, jeśli to wina konfiguracji to chciałbym wiedzieć co w nim ustawić żeby działało.

dwa pliki które pokazałem to fragment większej całości a:
Kod
$id_firma = $_SESSION['id_firma'];

zapisuje przy logowaniu się, ale to chyba oczywiste.

Cytat
edit: na stronie sesja_test.php nie ma założonego kodowania więc wyświetla ulicę z krzaczkiem

mógł byś rozwinąć ?
Bo jeśli chodzi o nagłówki
<html lang="pl">
<head>
<meta charset="utf-8"/>
...
to są, tam gdzie potrzeba a tu pokazałem problem po stronie serwera.
gino
krzaczki były na moim serwerze testowym, bo nie było u mnie w nagłówku kodowania.
Gdzie leży wina konfiguracji serwera to zapytaj adminów, Twój kod wypróbowałem na 2 serwerach testowych i było ok. Jak sam napisałeś nie po to wywalasz tyle kasy, żeby to nie chodziło.
Id wiem, nie chało mi się już edytować tego posta, ale to nie ma znaczenia.
nospor
Zapewne chodzi o blad
HEADERS ALREADY SENT
i nie idzie najzwyklej w swiecie zainicjalizowac sesji temu ci nic w sesji nie pamieta.
Przeszukaj net czy forum. Pelno tego.
gino
@nospor nie do końca bo pewne dane sesyjne przesyła, aczkolwiek temat jest już sprzed pół roku więc co jest z niego aktualne nie wiadomo.
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.