Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sesja w logowaniu
Forum PHP.pl > Forum > Przedszkole
Raven1122
Dobra, rozwiazalem juz moj problem, lecz teraz nastapil drugi ^^
Otóż po zalogowaniu gdy odświeżę strone wylogowywuje mnie. Dlaczego?
Kod:
  1. <?php
  2. if(isset($_POST['login']) && isset($_POST['pass'])){
  3. $login = trim($_POST['login']);
  4. $password = trim($_POST['pass']);
  5.  
  6. @mysql_connect('lxxx', 'xxx', 'xxx') or die(mysql_error());
  7.  
  8.  
  9. if($login != '' && $pass != ''){
  10. }
  11. else {
  12. echo("Uzupelnij wszystkie pola");
  13. }
  14.  
  15. $sql = "SELECT password FROM emes_users WHERE username = '$login'";
  16. $query = mysql_query($sql) or die(mysql_error());
  17. $row = mysql_fetch_array($query);
  18.  
  19. if($pass == $row['password']){
  20. $_SESION['auth'] = 1;
  21.  
  22. }
  23.  
  24.  
  25. else {
  26. $_SESSION['auth'] = 0;
  27. exit();
  28. }
  29. }
  30. else {
  31. echo("Niepowodzenie");
  32. exit();
  33. }
  34. if($_SESSION['auth'] = 1){
  35. ?>


Odzwiezam

ktos pomoze?
plej
może daj session_start(); na poczatku skryptu a cie nie wyloguje : ))
gorden
1. Twój kod narażony na sql injection, użyj mysql_real_escape_string
2. linijki 10-14, użyj empty a nie taki bullshit
3. session_start użyj na początku pliku zaraz po <?php
4. linijki 28-29 nie deklaruj sesji zastąp to czymś w stylu exit('Zły login lub hasło')
5. linijka 36, = to nie jest operator porówniania, raczę o tym przeczytać
6. radziłbym zrobić config i require'ować go na początku plików, które korzystają z baz danych

w jednym z tych punktów kryje się rozwiązanie Twojego problemu, radze poczytać o:
-sesjach
-operatorach
-funkcjach baz danych
Raven1122
zrobilem session_start na poczatku i dalej wylogowywuje ;/
john_doe
tam gdzieś masz coś takiego smile.gif

  1. $_SESION['auth'] = 1;


literówka
Raven1122
Jeszcze mam takie pytanie. Co tutaj jest zle?:
  1. $question = mysql_real_escape_string(htmlspecialchars($_POST['question']));

bo przez to skrypt pokazuje mi tkai komunikat:
  1. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'xxx'@'localhost' (using password: NO) in /home/xxx/public_html/php/ask.php on line 3
  2.  
  3. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/emes/public_html/php/ask.php on line 3
  4. Podaj pytanie


No i tu caly kod:
  1. <?php
  2. if(isset($_POST['question'])){
  3. $question = mysql_real_escape_string(htmlspecialchars($_POST['question']));
  4. if($question != ''){
  5. include("../functions.php");
  6. connect();
  7.  
  8. $sql = "INSERT INTO xxx(id, title, answer, name)
  9. VALUES (0, '$question', 'Pytanie oczekuje na odpowiedź', '$question')";
  10.  
  11. $query = mysql_query($sql) or die("Nie udało sie dodać pytania");
  12.  
  13. header("Location:http://xxx/faq.php");
  14. }
  15. else{
  16. echo("Podaj pytanie");
  17. }
  18. }
  19.  
  20. else {
  21. echo("Nie udaolo się dodać pytania");
  22. }
  23. ?>


odswiezam
gorden
najpierw połącz się z bazą danych może? mówiłem, zaraz po rozpoczęciu kodu zadeklaruj sesję i zaincluduj configa, wywołaj też te funkcje connect
Raven1122
dzieki za pomoc smile.gif

gorden jeszcze co do tych pktow to:

  1. <?php
  2. if(isset($_POST['login']) && isset($_POST['pass'])){
  3. include("../functions.php");
  4. connect();
  5. $login = mysql_real_escape_string($_POST['login']);
  6. $password = mysql_real_escape_string($_POST['pass']);
  7.  
  8. if(!empty($login) && !empty($password)){
  9. }
  10. else {
  11. echo("Uzupelnij wszystkie pola");
  12. }
  13.  
  14. $sql = "SELECT password FROM emes_users WHERE username = '$login'";
  15. $query = mysql_query($sql) or die(mysql_error());
  16. $row = mysql_fetch_array($query);
  17.  
  18. if($pass == $row['password']){
  19. $_SESION['auth'] = 1;
  20.  
  21. }
  22.  
  23.  
  24. else {
  25. exit('Zły Login lub Hasło');
  26. }
  27. }
  28. else {
  29. echo("Niepowodzenie");
  30. exit();
  31. }
  32. if($_SESSION['auth'] == 1){
  33. ?>


I po otworzeniu tego plik jest:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/emes/public_html/admin/board.php:1) in /home/emes/public_html/admin/board.php on line 2
Niepowodzenie

Tylko ze nie widze tam nigdzie zadnego znaku html itd.

z session start juz rozwiazane, ale wykonalem wszystkie pkt co mowiles i dalej nie dziala ;/ po odswiezeniu samo wylogowywuje
gorden
linia 20, usuń session_start
linia 21, masz literówkę SESION zamiast SESSION

polecam Ci print_r oraz var_dump do tego typu problemów.
Raven1122
zaraz mnie trafi haha.gif mam juz wszystko:
  1. <?php
  2. if(isset($_SESSION['auth'])){
  3. include("../functions.php");
  4. connect();
  5. $login = mysql_real_escape_string($_POST['login']);
  6. $password = mysql_real_escape_string($_POST['pass']);
  7. if(empty($login) && empty($password)){
  8. exit("Uzupełnij wszystkie pola");
  9. }
  10.  
  11. else{
  12. $sql = "SELECT password FROM emes_users WHERE username = '$login'";
  13. $query = mysql_query('$sql') or die("Nie można odnależć danych");
  14. $row = mysql_fetch_array('$query');
  15. }
  16.  
  17. if($password == $row['password']){
  18. $_SESSION['auth'] = 1;
  19. }
  20. else {
  21. exit("Podano złe hasło lub login");
  22. }
  23. }
  24. if($_SESSION['auth'] == 1){
  25. ?>

a dalej po odswiezeniu wylogowywuje ;/
gorden
banalne rozwiązanie. zobacz na warunek w linii 3. sprawdzasz czy istnieje sesja przed jej zainicjowaniem. dodaj za linią 19 jakieś echo z informacją o zalogowaniu, a zobaczysz, że się nie wyświetli. zamiast session w warunku daj coś z post

ps. linia 8, nie && tylko ||
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.