Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Przypisanie sesji przy logowaniu
Forum PHP.pl > Forum > Przedszkole
Croos22
Witam.

Mam problem z sesją logowania. Dokładniej rzecz mówiąc chciałem aby przy logowaniu rejestrowała się sesja z numerem id a następnie chce to wykorzystać w zapytaniu aby kod wiedział do jakiej tabeli dodać rekord.

Zapytanie wygląda tak
  1. mysql_query("UPDATE users SET kasa=kasa-'$c[cena]' WHERE user_id='.$_SESSION['user_id'].'");


Z góry chciałem podziękować każdemu kto włoży coś od siebie do tematu.

verio
A czy na pewno na początku kodu zamieszczona jest funkcja session_start()?

Później wystarczy przypisać wartość do sesji jak do każdej innej zmiennej.

  1. <?
  2.  
  3. $SESSION['user_id']=$id_usera;
  4.  
  5. //zapytanie SQL
  6. ?>
Croos22
A czy sesja będzie zachowana bo chce ją umieścić w całkiem innym pliku?

Do tego logowania chciałem przypisać sesję zalogowanego i wykorzystywać na innych podstronach.
http://wklej.org/id/411926/
Ghost_78
żeby mieć dostęp do zmiennej sesyjnej $_SESSION musisz w każdym skrypcie zacząć od session_start();
ADeM
  1. <?php
  2. session_register("zalogowany");
  3.  
  4. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  5.  
  6.  
  7.  
  8.  
  9. include ('includes/config_includes.php');
  10.  
  11. function ShowLogin($komunikat=""){
  12. echo "$komunikat<br>";
  13. echo "<form action='index.php' method=post>";
  14. echo "Login: <input type=text name=login><br>";
  15. echo "Hasło: <input type=text name=haslo><br>";
  16. echo "<input type=submit value='Zaloguj!'>";
  17. echo "</form>";
  18. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  19. }
  20.  
  21. ?>
  22. <!DOCTYPE html
  23. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  24. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  26. <head>
  27. <title>Strona główna</title>
  28. </head>
  29. <body>
  30. <?php
  31. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
  32. if($_SESSION["zalogowany"]!=1){
  33. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  34. $query = mysql_query("select * from users where user_name = '".htmlspecialchars($_POST["login"])."' AND user_password_short = '".htmlspecialchars($_POST["haslo"])."'");
  35. if(mysql_num_rows( $query )){
  36. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  37. $_SESSION["zalogowany"]=1;
  38. $results = mysql_fetch_assoc( $query );
  39. $_SESSION["user_id"] = $results[ 'user_id' ];
  40. }
  41. else echo ShowLogin("Podano złe dane!!!");
  42. }
  43. else ShowLogin();
  44. }
  45. else{
  46. ?>
  47. Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a>
  48. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  49. <?php
  50. }
  51. ?>
  52.  
  53. </body>
  54. </html>
  55. <?php mysql_close(); ?>
Croos22
Zrobiłem tak:

  1. $_SESSION["user_name"] = $results[ 'user_name' ];


A na innej podstronie dałem:
  1. echo 'Zalogowany jako '.$results[ 'user_name' ];


Nie wyświetlił się login zalogowanego. Dlaczego?
CuteOne
  1. echo 'Zalogowany jako '.$_SESSION["user_name"];
Croos22
Nadal nic chyba nie załapię tych sesji. :<

Czy aby przypisać do sesji login zalogowanego to musi być on najpierw wyciągnięty z bazy? Wydaje mi się, że w przeciwnym wypadku musiało by być przekazywane z formularza.

U mnie w 40 linii jest przypisana sesja to skąd login osoby zalogowanej miałby się tam znaleźć? Znowu jak tak zrobię:
  1. echo 'Zalogowany jako '.$_SESSION['zalogowany'];
to w przypadku osoby zalogowanej jest 1.

  1. <?php
  2. session_register("zalogowany");
  3.  
  4. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  5.  
  6.  
  7.  
  8.  
  9. include ('includes/config_includes.php');
  10.  
  11. function ShowLogin($komunikat=""){
  12. echo "$komunikat<br>";
  13. echo "<form action='index.php' method=post>";
  14. echo "Login: <input type=text name=login><br>";
  15. echo "Hasło: <input type=text name=haslo><br>";
  16. echo "<input type=submit value='Zaloguj!'>";
  17. echo "</form>";
  18. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  19. }
  20.  
  21. ?>
  22. <!DOCTYPE html
  23. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  24. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  26. <head>
  27. <title>Strona główna</title>
  28. </head>
  29. <body>
  30. <?php
  31. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
  32. if($_SESSION["zalogowany"]!=1){
  33. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  34. $query = mysql_query("select * from users where user_name = '".htmlspecialchars($_POST["login"])."' AND user_password_short = '".htmlspecialchars($_POST["haslo"])."'");
  35. if(mysql_num_rows( $query )){
  36. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  37. $_SESSION["zalogowany"]=1;
  38. $results = mysql_fetch_assoc( $query );
  39. $_SESSION["user_id"] = $results[ 'user_id' ];
  40. }
  41. else echo ShowLogin("Podano złe dane!!!");
  42. }
  43. else ShowLogin();
  44. }
  45. else{
  46. ?>
  47. Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a>
  48. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  49. <?php
  50. }
  51. ?>
  52.  
  53. </body>
  54. </html>
  55. <?php mysql_close(); ?>
Ghost_78
oczywiscie ze musisz przypisac zapis z bazy:
  1. $_SESSION["zalogowany"]=$result['nazwa_pola_z_nazwa_usera'];
Croos22
Hmm... Czyli jeśli dane muszą być wyciągnięte to czy prawidłowo mam tu w tym kodzie zrobione?

  1. <?php
  2. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
  3. if($_SESSION["zalogowany"]!=1){
  4. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  5. $query = mysql_query("select * from users where user_name = '".htmlspecialchars($_POST["login"])."' AND user_password = '".sha1(htmlspecialchars($_POST["haslo"]))."'");
  6. if(mysql_num_rows( $query )){
  7. echo header('Location: index.php');
  8. $_SESSION["zalogowany"]=1;
  9. $results = mysql_fetch_assoc( $query );
  10. $_SESSION["user_name"] = $results[ 'user_name' ]; }
  11. else echo ShowLogin("Podano złe dane!!!");
  12. }
  13. else ShowLogin();
  14. }
  15. else{
  16. ?>
Ghost_78
masz zla kolejnosc i nie potrzebne echo przed location
powinno byc tak:
  1. $_SESSION["zalogowany"]=1;
  2. $results = mysql_fetch_assoc( $query );
  3. $_SESSION["user_name"] = $results[ 'user_name' ];
  4. header('location: index.php');
CuteOne
  1. if(!$_SESSION["zalogowany"]){
  2.  
  3. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  4.  
  5. $login = mysql_real_escape_string($_POST["login"]);
  6. $pass = sha1($_POST["haslo"]);
  7.  
  8.  
  9. $query = mysql_query("SELECT * FROM users WHERE user_name = '{$login}' AND user_password = '{$pass}'");
  10.  
  11. if(mysql_num_rows( $query )) {
  12.  
  13.  
  14. $_SESSION["zalogowany"]=true;
  15. $results = mysql_fetch_assoc( $query );
  16. $_SESSION["user_name"] = $results[ 'user_name' ]; // w sesji ze względów bezpieczeństwa nie powinno przechowywać się jawnych informacji lepiej wstawić hash danej sessji
  17. header('Location: index.php');
  18. }
  19. else {
  20. echo ShowLogin("Podano złe dane!!!");
  21. }
  22. }
  23. else {
  24.  
  25. ShowLogin();
  26. }
  27. }
Croos22
Dziękuje bardzo smile.gif

Zauważyłem, że zniknęło htmlspecialchars a co zostało dodane to mysql_real_escape_string manual za dużo mi nie mówi...
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.