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

Wyczyszczenie sesji po odświeżeniu strony.

Object Storage Arubacloud
0 głosów
992 wizyt
pytanie zadane 25 stycznia 2017 w PHP przez nielotweb Bywalec (2,240 p.)

Witam! Robię panel użytkownika. Jest pole do zmiany nick'u, i wszystko ładnie działa. Tylko mam dwa problemy z sesjami.

Otóż gdy wpisuje do tego pola jakiś nickname, działa dobrze bo zmienia mi w bazie tak jak powinno być, i gdy zmieni ten nickname wyskakuje napis 'Pomyślnie zmieniono nickname!' i tu jest problem bo gdy odświeżę stronę to ten napis zamienia się na 'Taki nickname istnieje już w bazie' ( zabezpieczeni gdy podany nickname już istnieje ). A ja chcę usunąć tą sesję czy wyczyścić żeby po odświeżeniu nie było żadnego napisu!

Problem drugi: Gdy zmienię ten nickname, nie odświeża się on na stronie głównej panelu użytkownika, tzn. na stronie głównej mam użytkownika o nazwie. np. FORUM1 potem idę i zamieniam na nickname: FORUM2 i on się nie zmienia. Dopiero się zmieni gdy się wyloguje i znów zaloguję. Czyli jak mogę odświeżyć te sesję żeby odrazu wyświetlił się zamieniony nickname?

//Change the nickname SETTINGS
    if( isset($_POST['nickname_new']) ) {

      //If username is less than 7 or higher than 20..
      if ( (strlen($_POST['nickname_new']) < 7) || (strlen($_POST['nickname_new']) > 20) ) {
        $change_username = false;
        $_SESSION['message_nickname'] = "Twój nick jest nieprawidłowy! ( Musi mieć więcej niż 7 znaków a mniej niż 20 )";
      }

      //if the given nickname exists
      $sqlSTM = $pdo->prepare("SELECT nickname FROM users WHERE nickname = :nickname");
      $sqlSTM->bindParam(':nickname', $_POST['nickname_new']);
      $sqlSTM->execute();
      $results = $sqlSTM->fetchAll(PDO::FETCH_ASSOC);

      if( count($results) > 0 ) {
        $change_username=false;
        $_SESSION['message_nickname']="Istnieje już konto przypisane do tego nicku!";
      }

            if( $change_username == true ) {

              $sqlSTM = $pdo->prepare("UPDATE users SET nickname = :nickname WHERE id = :id");
              $sqlSTM->bindParam(':nickname', $_POST['nickname_new'], PDO::PARAM_STR);
              $sqlSTM->bindParam(':id', $_SESSION['id']);
              $sqlSTM->execute();
              $results = $sqlSTM->fetch(PDO::FETCH_ASSOC);

              $_SESSION['message_nickname'] = "Pomyślnie zmieniono nickname!";

            }

    }



?>

 

A TUTAJ KOD TYCH NAPISÓW ( ERRORÓW ) W TAGU <HTML>

  <?php  if (isset($_SESSION['message_nickname'])) {
            echo $_SESSION['message_nickname'];
            unset($_SESSION['message_nickname']);
  }?>

 

1 odpowiedź

+1 głos
odpowiedź 25 stycznia 2017 przez Bosswell Nałogowiec (36,470 p.)
wybrane 25 stycznia 2017 przez nielotweb
 
Najlepsza
Twój problem leży zapewne w tym, że formularz i skrypt php jest w jednym pliku.

Po odświeżeniu strony zmienna $_POST nadal jest ustawiona i skrypt wykonuje się drugi raz dla takich samych danych.

Po za tym, jak wyślesz pusty formularz, to również ustawisz zmienną $_POST.

Polecam Ci rozbić ten plik na 2 pliki (formularz.php, coś.php) oraz zamiast "isset()" wykorzystać "!empty()"
komentarz 25 stycznia 2017 przez nielotweb Bywalec (2,240 p.)
dobra pierwszy problem rozwiązany czyli z tymi napisami. Zrobiłem jak napisałeś dałem oddzielny plik do tego. Tylko mam jeszcze problem z tym drugim.. bo gdy zmieniam ten nickname to on się zmienia w bazie ale nie zmienia na stronie, wiesz może jak to można naprawić? Dopiero po wylogowaniu i zalogowaniu ponownie się odświeża i wyświetla.
1
komentarz 25 stycznia 2017 przez Bosswell Nałogowiec (36,470 p.)
Przy update nicku, musisz przypisać nowy nick to zmiennej sesyjnej przechowywującej nick użytkownika
komentarz 25 stycznia 2017 przez nielotweb Bywalec (2,240 p.)

nie rozumiem indecision

$_SESSION['nickname_new'] = $_POST['nickname_new'];

              $sqlSTM = $pdo->prepare("UPDATE users SET nickname = :nickname WHERE id = :id");
              $sqlSTM->bindParam(':nickname', $_SESSION['nickname_new'], PDO::PARAM_STR);
              $sqlSTM->bindParam(':id', $_SESSION['id']);
              $sqlSTM->execute();
              $results = $sqlSTM->fetch(PDO::FETCH_ASSOC);

 

Tak czy się mylę? Dałem nowy nick czyli z $_POST do zmiennej sesyjnej i wrzuciłem do bindowania.

1
komentarz 25 stycznia 2017 przez Bosswell Nałogowiec (36,470 p.)
" Gdy zmienię ten nickname, nie odświeża się on na stronie głównej panelu użytkownika"

W jaki sposób to robisz ? Zapewne wypisujesz za pomocą zmiennej $_SESSION

I tą właśnie zmienną musisz podmienić przy update nicku
komentarz 25 stycznia 2017 przez nielotweb Bywalec (2,240 p.)

Sorry, ale dalej nie ogarniam.

Nickname w tym panelu użytkownika wypisuje za pomocą zmiennej $_SESSION['nickname]

Update wygląda tak: 

              $sqlSTM = $pdo->prepare("UPDATE users SET nickname = :nickname WHERE id = :id");
              $sqlSTM->bindParam(':nickname', $_SESSION['nickname_new'], PDO::PARAM_STR);
              $sqlSTM->bindParam(':id', $_SESSION['id']);
              $sqlSTM->execute();

 

Spróbowałem tak że tamtą zmienną $_SESSION['nickname_new'] przeniosłem do panelu użytkownika i podmieniłem zamiast tej $_SESSION['nickname'] i to niby zmienia ale dużo 'braków, błędów' ma.. Wiem że to źle robię ale tamtego nie mogę pojąć :/

1
komentarz 25 stycznia 2017 przez Bosswell Nałogowiec (36,470 p.)
edycja 25 stycznia 2017 przez Bosswell

Tą część robisz tak, jak na początku miałeś.

$sqlSTM = $pdo->prepare("UPDATE users SET nickname = :nickname WHERE id = :id"); 
$sqlSTM->bindParam(':nickname', $_POST['nickname_new'], PDO::PARAM_STR);
 $sqlSTM->bindParam(':id', $_SESSION['id']);
 $sqlSTM->execute();
 $results = $sqlSTM->fetch(PDO::FETCH_ASSOC);

Ale teraz nowy nick zapisujesz do zmiennej $_SESSION['nick']

$_SESSION['nick'] = $_POST['new_nickname'];

 

1
komentarz 25 stycznia 2017 przez nielotweb Bywalec (2,240 p.)
O boże, to było takie proste i oczywiste ._. już działa! Dzięki wielkie za całą pomoc!

Na drugi raz muszę więcej pomyśleć :/ Jeszcze raz wielkie dzięki!

Podobne pytania

0 głosów
0 odpowiedzi 615 wizyt
pytanie zadane 4 marca 2017 w PHP przez Xenek Nowicjusz (140 p.)
0 głosów
1 odpowiedź 255 wizyt
0 głosów
1 odpowiedź 236 wizyt

92,555 zapytań

141,403 odpowiedzi

319,558 komentarzy

61,940 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!

...