Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z przypisaniem sesji do zmiennej.
Croos22
post 5.01.2011, 16:01:46
Post #1





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Witam.
Mam problem z przypisaniem nazwy użytkownika zalogowanego w sesji do zmiennej. Dodawałem to tak $_SESSION['user_name'] = $nazwa;
A na innej stronie w celu sprawdzenia czy sesja istnieje robiłem tak:
<?php
session_start();

echo 'Zalogowany jest ' .$nazwa;
?>

A tu mam kod z logowaniem (Nie jestem autorem tego kodu):

  1. <?php
  2. session_register("zalogowany");
  3.  
  4. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  5.  
  6. mysql_connect("localhost", "root", "")or die("Nie można nawiązać połączenia z bazą");
  7. mysql_select_db("test")or die("Wystąpił błąd podczas wybierania bazy danych");
  8.  
  9. function ShowLogin($komunikat=""){
  10. echo "$komunikat<br>";
  11. echo "<form action='index.php' method=post>";
  12. echo "Login: <input type=text name=login><br>";
  13. echo "Hasło: <input type=text name=haslo><br>";
  14. echo "<input type=submit value='Zaloguj!'>";
  15. echo "</form>";
  16. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  17. }
  18.  
  19. ?>
  20. <!DOCTYPE html
  21. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  22. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  23. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  24. <head>
  25. <title>Strona główna</title>
  26. </head>
  27. <body>
  28. <?php
  29. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
  30. if($_SESSION["zalogowany"]!=1){
  31. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  32. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
  33. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  34. $_SESSION["zalogowany"]=1;
  35. }
  36. else echo ShowLogin("Podano złe dane!!!");
  37. }
  38. else ShowLogin();
  39. }
  40. else{
  41. ?>
  42. Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a>
  43. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  44. <?php
  45. }
  46. ?>
  47.  
  48. </body>
  49. </html>
  50. <?php mysql_close(); ?>
  51.  
  52.  
  53.  
Go to the top of the page
+Quote Post
sadistic_son
post 5.01.2011, 16:30:35
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Znak równości nie jest, tak jak w matematyce naprzemienny. Oznacza to, że to:
  1. $a=$b;
nie jest równoznaczne z tym:
  1. $b=$a;
. Tak więc jeśli chcesz przypisać wartość z sesji do zmiennej musisz to zrobić na odwrót czyli:
  1. $nazwa=$_SESSION['user_name'];


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
Croos22
post 5.01.2011, 21:14:36
Post #3





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Dzięki sadistic_son za informację ale to nadal nie chce mi chodzić a daję na innej stronie na samym początku session_start(); a potem w echo zmienną w moim przypadku $nazwa.

W takim razie tutaj musi być coś nieprawidłowo zrobione (35 linia):

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


Ten post edytował Croos22 5.01.2011, 21:22:36
Go to the top of the page
+Quote Post
ZuyPan
post 5.01.2011, 21:22:19
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

Ostrzeżenie: (0%)
-----


Zmienne nie są pamiętane między plikami tak jak sesje. W Twoim przypadku nazwę użytkownika na innej podstronie odczytasz np. tak:
  1. <?php
  2. if ($_SESSION['zalogowany'] == '1'){
  3. echo 'Witaj <b>'.$_SESSION['user_name'].'</b>.';
  4. }
  5. ?>


--------------------
Blog
Go to the top of the page
+Quote Post
Croos22
post 5.01.2011, 21:31:58
Post #5





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Irytowało mnie to trochę tak sama zmienna bez żadnego przypisania na innej stronie. Tylko, że mi to niestety nie pomogło i tak. Na pewno mam teraz dobrze w logowaniu?
Go to the top of the page
+Quote Post
daros17
post 5.01.2011, 21:58:01
Post #6





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


spróbuj tak

  1. $connection = mysql_query("select * from users WHERE user_name = '($_POST["login"])' AND user_password = '($_POST["haslo"])'") or die (mysql_error());
  2. while ($connection && $rekord = mysql_fetch_assoc($connection)) {
  3. $_SESSION['user_name']= $rekord['user_name'];
  4. $_SESSION['user_password'] = $rekord['user_password'];
  5. echo 'Witaj '.$_SESSION['user_name'];
  6. }


Ten post edytował daros17 5.01.2011, 22:05:56
Go to the top of the page
+Quote Post
ZuyPan
post 5.01.2011, 22:02:10
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

Ostrzeżenie: (0%)
-----


No jasne, że jest źle brakuje Ci przypisania wartości do zmiennej trzymającej nazwę użytkownika. Brakuje Ci konkretnie takiej linijki:
  1. $_SESSION['user_name'] = $_POST['login'];

chodź login lepiej pobrać z mysql, ale Ty nie masz pobrania danych z bazy więc wykorzystajmy to co wpisał użytkownik jako login.
Poprawny kod:

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


--------------------
Blog
Go to the top of the page
+Quote Post
Croos22
post 5.01.2011, 22:28:05
Post #8





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Bardzo ale to bardzo dziękuje tylko, że pomyślałem sobie jak ja to wrzucę w zapytanie w WERE spacje i inne znaki. W jaki sposób zrobić aby user_id wrzucić do sesji sprawia mi to kłopot ponieważ chyba się nie da wrzucić tam gdzie jest sprawdzenie loginu i hasła.
Go to the top of the page
+Quote Post
daros17
post 5.01.2011, 22:33:50
Post #9





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze Cie zrozumiałem, ale wówczas również pobierasz dane z bazy i przypisujesz do sesji
Go to the top of the page
+Quote Post
Croos22
post 5.01.2011, 22:41:24
Post #10





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Ale w jaki sposób. Przecież nie tak:

  1. $_SESSION['user_name'] = $_POST['login'];


W tym przypadku do $_SESSION['user_name'] przypisane jest to co wpisane w formularzu a w przypadku id?
Go to the top of the page
+Quote Post
daros17
post 5.01.2011, 23:07:38
Post #11





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


tak, a jeśli chcesz z bazy pobrać id użytkownika to musisz pobrać dane z bazy za pomocą pętli np tak jak podałem Ci wyżej
przeczytaj również to
function.mysql-fetch-assoc

Ten post edytował daros17 5.01.2011, 23:08:04
Go to the top of the page
+Quote Post
ZuyPan
post 5.01.2011, 23:31:55
Post #12





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

Ostrzeżenie: (0%)
-----


A po co pętla? Pętli używa się np. przy newsach gdzie jest ich kilka a tu pobieramy dane jednego użytkownika więc pętli nie potrzeba.


--------------------
Blog
Go to the top of the page
+Quote Post
daros17
post 5.01.2011, 23:39:13
Post #13





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


Przecież oprócz id użytkownika pewnie będzie chciał pobrać login oraz jego hasło więc pętla jest jak najbardziej potrzebna
Go to the top of the page
+Quote Post
ZuyPan
post 5.01.2011, 23:46:44
Post #14





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

Ostrzeżenie: (0%)
-----


A to dziwne, bo ja nigdy nie dawałem pętli w takich sytuacjach. Oto moje przykładowe logowanie w którym gdy pobieram dane z mysql owej pętli nie używam:
  1. <?php
  2. include ('config.php');
  3.  
  4. if ($_SESSION['zalogowano'] != '1'){
  5.  
  6. if ($_POST['username']){
  7. $username = addslashes(htmlspecialchars($_POST['username']));
  8. $username_b = 1;
  9. }else{
  10. $username_b = 0;
  11. $error .= '<font color="red">Proszę wpisać nazwę użytkownika!</font><br>';
  12. }
  13.  
  14. if ($_POST['password']){
  15. $password = addslashes(htmlspecialchars($_POST['password']));
  16. $password_b = 1;
  17. }else{
  18. $password_b = 0;
  19. $error .= '<font color="red">Proszę wpisać haslo!</font><br>';
  20. }
  21.  
  22. if ($username_b == 1 && $password_b == 1){
  23.  
  24. $query_a = "SELECT * FROM account WHERE login='$username' AND password = PASSWORD('$password')";
  25. $query_b = mysql_query($query_a);
  26. if (mysql_num_rows($query_b) == 1){
  27. $rekord = mysql_fetch_assoc($query_b);
  28. $account = 1;
  29. }else{
  30. $account = 0;
  31. $error .= '<font color="red">Wpisane dane nie pasują do żadnego użytkownika!</font><br>';
  32. }
  33.  
  34. if ($account == 1){
  35.  
  36. $_SESSION['zalogowano'] = 1;
  37. $_SESSION['login'] = $rekord['login'];
  38. $_SESSION['account_id'] = $rekord['id'];
  39. ?>
  40. <meta http-equiv="refresh" content="0; url=index.php">
  41. <?php
  42.  
  43. }
  44.  
  45. }
  46.  
  47. }else{
  48. $error .= '<font color="red">Jesteś już zalogowany!</font><br><a href="wyloguj.php"> Wyloguj! </a>';
  49. }
  50. echo $error;
  51. ?>


Taki kod zawsze mi działał bez pętli.

Ten post edytował ZuyPan 5.01.2011, 23:47:48


--------------------
Blog
Go to the top of the page
+Quote Post
sadistic_son
post 5.01.2011, 23:54:16
Post #15





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


ZuyPan ma rację. Ale oprócz tego to jeśli nadal chcesz pobrać tylko samo id, lub po prostu jedną wartość z tabeli bez zadnej petli itp i zapisac je do sesji to uzyj mysql_result:
  1. $sql=mysql_query("SELECT id FROM tabela WHERE login='$_POST[login]' AND password='$_POST[password]' LIMIT 1");
  2. $num=mysql_num_rows($sql);
  3. if($num>0){
  4. $_SESSION['login_id']=mysql_result($sql,0);
  5. }else{
  6. echo'podane haslo lub login sa bledne!';
  7. }


Ten post edytował sadistic_son 5.01.2011, 23:55:53


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
daros17
post 5.01.2011, 23:58:00
Post #16





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


Można zrobić tak jak pokazałeś w kodzie, który umieściłeś, ale również można użyć pętli i efekt jest ten sam winksmiley.jpg
Go to the top of the page
+Quote Post
sadistic_son
post 6.01.2011, 00:04:15
Post #17





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Owszem, efekt jest ten sam i przy prostej bazie, z mala iloscia rekordow nie zrobi to roznicy. Ale przy poteznej bazie moga byc opoznienia. Moj sposob jest po prostu optymalniejszy moim zdaniem. Oczywiscie caly czas zakladajac ze mowimy o 1 wartosci z bazy. Bo jesli o wielu, np login, id itp. to zamiast mysql_result nalezy uzyc np mysql_fetch_array.

Ten post edytował sadistic_son 6.01.2011, 00:06:05


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 09:42