• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odświeżanie sesji, istnieje coś takiego?

Object Storage Arubacloud
+5 głosów
1,117 wizyt
pytanie zadane 7 kwietnia 2015 w PHP przez HaKIM Szeryf (87,590 p.)
edycja 7 kwietnia 2015 przez HaKIM

Hej. Mam pytanie. Stowrzyłem sobie stronkę, mam tam coś takiego jak "punkty". Po kliknięciu skrypt działa poprawnie i dodaje mi je lecz sesja nie odnawia się i zostaje ta stara, z punktami 0. Mógłby ktoś podać kod na odnowienie sesji, coś w tym stylu. Po to abym nie musiał wylogowywać się i znów zalogować aby ujrzeć rezultaty.

Oto kod: 

<?php

  session_start();

  require_once "db_connect.php";

  $connection = @new mysqli($cos, $cusik, $cosik, $coskowaty);

  if ($connect->connect_errno!=0)
  {
    echo "Error: ".$connect->connect_errno;
  }
  else
  {
    $email_user = $_SESSION['email'];

    $search = $connection->Query("SELECT * FROM `uzytkownicy`");
    $add = $connection->Query("UPDATE `uzytkownicy` SET punkty=punkty+5  WHERE email='$email_user';");

    $search->free_result();

    header("Location: ../subpages/loggedon.php");

  }
  $connection->close();
?>

https://www.youtube.com/watch?v=vFRSiuiO7-M&feature=youtu.be

Dobra, pokombinowałem i się udało. Dziękuję wszystkim za odpowiedź. Jako że trza walczyć z własnym ego nie powiem że zachowam kod dla siebie a udostępniam go wam i daje rozwiązanie. 

<?php

  session_start();

  require_once "db_connect.php";

  $connection = @new mysqli($host, $user, $password, $db_name);

  if ($connection->connect_errno!=0)
  {
    echo "Error: ".$connection->connect_errno;
  }
  else
  {
    $email_user = $_SESSION['email'];

    $search = $connection->Query("SELECT * FROM `uzytkownicy`");
    $add = $connection->Query("UPDATE `uzytkownicy` SET punkty=punkty+5  WHERE email='$email_user';");

     $how_many_users = $search->num_rows;
      if($how_many_users>=0)
       {

        $wiersz = $search->fetch_assoc();

        $_SESSION['punkty'] = $wiersz['punkty'];

   
        $search->free_result();

        header("Location: ../subpages/loggedon.php");
       }

  }
  $connection->close();
?>

Chodzi tu o to że pobiera sesje przy logowaniu, oraz za każdym razem kiedy jest klikany guzik "Wykonałem". W ten sposób nie trzeba wszędzie dawać kodu z pobieraniem tego. Dzięki jeszcze raz za sugestie, bo to z nich złożyłem pomysł. 

2 odpowiedzi

+2 głosów
odpowiedź 7 kwietnia 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 7 kwietnia 2015 przez HaKIM
 
Najlepsza

Z tego co zrozumiałem to problem nie leży po stronie sesji. Przy wykonaniu np. takiego czegoś:

$_SESSION['punkty']=100;

Wartość tej zmiennej natychmiast zmienia się na 100. Jednak żeby to wyświetlić należy przeładować stronę lub jakoś inaczej pobrać aktualną wartość. W jaki sposób masz zrobione wyświetlanie punktów i jak działa ten skrypt, który dodaje punkty (czy to jest przez JavaScript)?

komentarz 7 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Dobra, wytłumaczę naprościej jak umiem.

Loguje się w pliku "Zalogujsie.php", tam, jeżeli uda Ci się zalogować, są pobierane do sesji dane z bazy danych. Potem robię session_start(); i daje to na każdej stronie, logiczne. Potem w punkty.php, gdzie się je dodaje tę sesję przechowuje, sposobem session_start(); i ją aktualizuję. Kod na górze. Potem header wracam na loggedon.php i tam jest znów session_start(); ale nie aktualizują się punkty.
komentarz 7 kwietnia 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
A co się stanie gdybyś wcisnął przycisk "Wykonałem" a następnie odświeżył stronę (F5)? Wartość zmieni się czy pozostanie nadal taka sama?
komentarz 7 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Tak, taka sama. Muszę wyjść aby się zaktualizowało. Na górze jest link do filmu, jak to wygląda.
komentarz 7 kwietnia 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)

Dobra już chyba rozumiem.

"jeżeli uda Ci się zalogować, są pobierane do sesji dane z bazy danych" czyli ilość punktów pobierana jest tylko przy zalogowaniu? Jeśli tak to nic dziwnego, że nie pokazuje zmienionej ilości bo pobrana ona została po zalogowaniu i już nie jest więcej sprawdzana do kolejnego zalogowania. Nawet więc jeśli wartość zostanie zmieniona w bazie nie jest już więcej pobierana.

Czyli tak rozwiązania są dwa: albo trzeba zmieniać ilość punktów także w sesji (czyli tam gdzie masz skrypt dodający punkty do bazy dać jeszcze np. $_SESSION['punkty']+=5; ) albo trzeba przy każdym wczytaniu strony odczytywać ilość punktów z bazy danych.

komentarz 7 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Wezmę rozwiązanie drugie, zobaczę jak pójdzie...
+1 głos
odpowiedź 7 kwietnia 2015 przez Bartosz Płóciennik Dyskutant (8,510 p.)
edycja 7 kwietnia 2015 przez Bartosz Płóciennik

Nie lepiej za kązdym razem pobierać i aktualizować punkty w bazie?

A co się stanie gdy użytkownik po prostu wyjdzie ze strony? - punkty przepadną bo ich nie zapiszesz

Sesje są fajne do trzymania nazwy uzytkownika, jego statusu, adresu email ale punkty zmieniałbym od razu w bazie aby nie było później problemów z zagubionymi punktami :)

A niestety z użytkownikami jest tak, że trzeba tworzyć rozwiązania dla "idiotów" - bo często zdarza się, że mega super zabezpieczysz program ale i tak użytkownik go "wywali".


Aktualizacja po obejrzeniu filmiku:

Co do sesji mówisz, że się Tobie nadpisują tak? No to proponuje prosty warunek:

session_start();

if(isset($_SESSION['punkty'])) {
    $_SESSION['punkty'] +=  5;
} else {
    $_SESSION['punkty'] = 0;
}

Sprawdzamy czy zmienna istnieje, jeśli tak dodajemy do niej 5 punktów. W tej chwili działa to u Ciebie tak, że gdy użytkownik się zaloguje tworzona jest zmienna $_SESSION['punkty']. Gdy użytkownik kliknie przycisk zrobiłem - skrypt ponownie jest wykonywany przez serwer a jako, że Twoja zmienna zawiera przypisanie to za każdym razem ta wartość jest przypisywana ze stałą wartością.

To jest tylko przykład jak byś mógł to rozwiązać ale nadal surgeuję używaż bazy tzn pobierać i aktualizować za każdym razem aby nie było problemów :P

komentarz 7 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Proszę. Jest i kod.
komentarz 7 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Tak robię, ale chodzi mi o to że sesje się nie nadpisują. Zaraz dam filmik. :)
komentarz 7 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
" // użytkownik nie ma punktów dlatego utworzę taką zmienną" - Jak nie ma to wyświetla się 0. Jest to logiczne. : D

Podobne pytania

0 głosów
0 odpowiedzi 129 wizyt
0 głosów
3 odpowiedzi 552 wizyt
0 głosów
1 odpowiedź 1,926 wizyt

92,632 zapytań

141,501 odpowiedzi

319,880 komentarzy

62,013 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...