Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Refresh $_SESSION ?
Forum PHP.pl > Forum > Przedszkole
pspgor
Witam po raz 3 dzisiaj i zarazem ostatni biggrin.gif

Moim kolejnym problemem jest to, że:

index.php:
  1. echo 'Posiadasz: <font color="green">'.$_SESSION['kasa'].'$</font>.<br />';
  2. echo 'Doładuj $: <a href="doladuj.php">KLIK</a><br /><br />';


doladuj.php:
  1. if($_SESSION['logged'])
  2. {
  3. mysql_query("UPDATE users SET kasa=kasa+1 WHERE id = $_SESSION[id]");
  4. echo 'Doładowano pomyslnie! :)<br />';
  5. echo 'Powrót: <a href="#" onClick="java script:history.go(-1);">powrót</a>';
  6. // jeśli nie jest zalogowany
  7. }
  8. else
  9. {
  10. echo 'Witaj!<br />';
  11. echo '<a href="login.php">Zaloguj się</a> lub <a href="register.php">zarejestruj nowe konto</a>';
  12. }


i oczywiście javascript nam cofa do index.php, lecz naszym oczom ukazuje się ta sama wartość $ (czyt. kasa).

Dopiero ponowne przelogowanie się pomaga "zrefreshować" wartość .$_SESSION['kasa']. .

Pytanie: Jak zrobić, aby wartość .$_SESSION['kasa']. refreshowała się automatycznie po każdym wejściu w index.php?

Jakieś pomysły? biggrin.gif
Blame
Twoje rozwiązanie działa teraz jak plik wstecz w przeglądarce, dlatego zawartość się nie wyświetla. Zrób zwykłe przekierowanie za pomocą php:
  1. header('Location: index.php');

albo w java script:
[JAVASCRIPT] pobierz, plaintext
  1. window.location ="index.php";
[JAVASCRIPT] pobierz, plaintext
pspgor
Niestety nic to nie daje.
mortus
W kodzie z pliku doladuj.php masz błąd w 3 linijce. Powinno być $_SESSION['id'], a jest $_SESSION[id]. Popraw to i powinno działać tak, jak mówił kolega Blame.

Zresztą w ogóle powinno być to zapisane inaczej:
  1. mysql_query("UPDATE users SET kasa=kasa+1 WHERE id = ".$_SESSION['id']);
Blame
Zamieniłeś java script:history.go(-1); na window.location ="index.php"; i nie działa? Daj przykład na żywo, będzie prościej pomóc.
sadistic_son
Cytat(mortus @ 27.02.2011, 20:01:56 ) *
W kodzie z pliku doladuj.php masz błąd w 3 linijce. Powinno być $_SESSION['id'], a jest $_SESSION[id]. Popraw to i powinno działać tak, jak mówił kolega Blame.
Nie prawda. W tablicach asocjacyjnych stosuje się apostrof do oznaczania indexów stringowych tylko jeśli cała zmienna nie jest w cudzysłowie.

Czyli:
  1. echo 'To jest zamienna '.$zmienna['raz'].' lalala';
  2.  
  3. echo "To jest zmienna $zmienna[raz] lalala";
  4.  
  5. echo "To jest zmienne ".$zmienna['raz']." lalala";
Wszystkie 3 zapisy są poprawne.

Cytat(Blame @ 27.02.2011, 20:02:03 ) *
Zamieniłeś java script:history.go(-1); na window.location ="index.php"; i nie działa? Daj przykład na żywo, będzie prościej pomóc.
Pewnie, że nie działa bo sesja $_SESSION['kasa'] jest (za pewne) tworzona przy logowaniu i pozostaje niezmienna. Dlatego autor pisze, że tylko po logowaniu się zmienia.

Ja zrobiłbym to tak:
  1. if(isset($_SESSION['logged']))
  2. {
  3. $plus=1; //lub inna dowolna liczba
  4. mysql_query("UPDATE users SET kasa=kasa+$plus WHERE id = $_SESSION[id]");
  5. echo 'Doładowano pomyslnie! :)<br />';
  6. echo 'Powrót: <a href="#" onClick="java script:history.go(-1);">powrót</a>';
  7. // jeśli nie jest zalogowany
  8. $_SESSION['kasa']=$_SESSION['kasa']+$plus;
  9. }
  10. else
  11. {
  12. echo 'Witaj!<br />';
  13. echo '<a href="login.php">Zaloguj się</a> lub <a href="register.php">zarejestruj nowe konto</a>';
  14. }
Jednak jeszcze radziłbym trochę inaczej podejść do logowania. Domyślam się że przy logowaniu tworzysz kilka różnych sesji i do nich zapisujesz wartości z bazy, natomiast przy sprawdzaniu czy user jest zalogowany sprawdzasz czy istnieje $_SESSION['logged']. Radziłbym zapisywać dane, czyli cały wiersz z bazy danego usera w poniższy sposób:
  1. //logowanie
  2. if(!isset($_SESSION['logged']) && isset($_POST['login']) && $_POST['login']!='' && isset($_POST['przycisk_submit_z_formularza_logowania']) && isset($_POST['password']) && $_POST['password']!=''){
  3. $sql=mysql_query("SELECT * FROM users WHERE login='$_POST[login]'");
  4. $num=mysql_num_row($sql);
  5. if($num>0){
  6. $_SESSION['logged']=mysql_fetch_array($sql,MYSQL_ASSOC);
  7. }else{ echo 'nie ma takiego usera lub zle haslo';}
  8. }
  9.  
  10. if(isset(isset($_POST['przycisk_submit_z_formularza_logowania']) && (empty($_POST['login']) || empty($_POST['password']) )){
  11. echo 'Wypelnij pola login i haslo!';
  12. }
Od teraz zamiast $_SESSION['id'] uzywasz $_SESSION['logged']['id'], zamiast $_SESSION['kasa'] uzywasz $_SESSION['logged']['kasa'] itd. Ułatwi Ci to nieco życie bo posługujesz się jedną sesją, która jest tablicą. Sprawdzając czy user jest zalogowany robisz po prostu if(isset($_SESSION['logged'])){

I w celach informacyjnych sprawdź sobie co zawiera sesja po zalogowaniu:
  1. echo '<pre>'; print_r($_SESSION['logged']); echo '</pre>';
Wstaw to sobie w dowolnym miejscy w kodzie ale oczywiscie po session_start smile.gif
pspgor
sadistic_son jak zawsze niezawodny biggrin.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.