Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MySQL]Nie mogę uruchomić sesji
Fakebook
post 23.03.2014, 13:32:10
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Witam

Utknałem tym razem w momencie gdy chcę zalogować się do bazy danych.

Plik loginform.inc.php zawiera formularz i sprawdza poprawność danych (i działa poprawnie, bo po podaniu odpowiedniego hasła i loginu wyświetla się właściwy rząd w tabeli), natomiast za diabła nie wiem dlaczego nie mogę odpalić sesji. Kod ma wg opisu albo wyswietlic 'You are logged in' po podaniu poprawnych danych, albo wyswietlic ponownie formularz logowania, i wygląda tak:
  1.  
  2. require 'connect.inc.php';
  3.  
  4. if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) {
  5. echo 'You are logged in';
  6. } else {
  7.  
  8. include 'loginform.inc.php';
  9. }

a tu jeszcze fragment pliku loginform.inc.php z przypisanym id sesji:
  1. if ($query_num_rows==1) {
  2. $user_id = mysql_result($query_run, 0, 'id');
  3. $_SESSION['user_id'] = $user_id;
  4. header('Location: index.php');

Rezultat jest taki, że wpisanie odpowiedniego loginu i hasła wyświetla ponownie formularz logowania, a nie komunikat 'you are logged in'.

Troche eksperymentowalem, wywaliłem loginform.inc.php poza warunek if:
  1. $current_file = $_SERVER['SCRIPT_NAME'];
  2.  
  3. require 'connect.inc.php';
  4.  
  5. include 'loginform.inc.php';
  6.  
  7. if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) {
  8. echo 'You are logged in';
  9. } else {
  10. echo 'try again';
  11. }

I zadzialalo, tzn po zalogowaniu sie dostaje prawidlowy komunikat.

Z tym ze w tutorialu jest tak jak w pierwszym przykładzie, i nie mam pojęcia dlaczego na filmiku działało a u mnie nie. Tutorial jest z 2011 roku, czy jest możliwość że zmieniła się struktura php i dlatego u mnie nie zadziałało?

Pozdrawiam
Powód edycji: [Kshyhoo]: Przypominam o używaniu bb-code
Go to the top of the page
+Quote Post
Kshyhoo
post 23.03.2014, 13:57:05
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pomyśl logicznie, Twój warunek: jeżeli istnieje $_SESSION['user_id'] i jest "pusta" $_SESSION['user_id'] to zalogowany a jak nie, to dołącz plik, gdzie te dane wrzucam...


--------------------
Go to the top of the page
+Quote Post
Fakebook
post 23.03.2014, 14:22:03
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(Kshyhoo @ 23.03.2014, 13:57:05 ) *
Pomyśl logicznie, Twój warunek: jeżeli istnieje $_SESSION['user_id'] i jest "pusta" $_SESSION['user_id'] to zalogowany a jak nie, to dołącz plik, gdzie te dane wrzucam...



tam jest !empty, czyli NIE jest pusta
Go to the top of the page
+Quote Post
Kshyhoo
post 23.03.2014, 14:27:22
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No tak, miało być "nie pusta".


--------------------
Go to the top of the page
+Quote Post
Fakebook
post 23.03.2014, 14:44:15
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Dzięki, ale to są chyba warunki które się nie wykluczają, zresztą też próbowałem wcześniej (w akcie depseracji probowalem wszystkiego smile.gif ) i tez nie zadzialalo. Dla pewnosci teraz ununałem !empty i efekt taki sam jak poprzednio niestety, czyli nie wyswietla sie komunikat ze jestem zalogowany, ani tez 'try again'.:

  1. <?php
  2. $current_file = $_SERVER['SCRIPT_NAME'];
  3.  
  4. require 'connect.inc.php';
  5.  
  6. if (isset($_SESSION['user_id'])) {
  7. echo 'You are logged in';
  8. } else {
  9. echo 'try again';
  10. include 'loginform.inc.php';
  11. }
  12. ?>
Go to the top of the page
+Quote Post
Damonsson
post 23.03.2014, 14:52:59
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Warunek jest dobry, nie słuchaj głupot. Musiałbyś pokazać więcej kodu. Ale skoro przeniosłeś include i działa, to w czym jeszcze problem?
Go to the top of the page
+Quote Post
trueblue
post 23.03.2014, 14:59:00
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A gdzie wyłączasz buforowanie rozpoczęte poprzez ob_start();?


--------------------
Go to the top of the page
+Quote Post
Fakebook
post 23.03.2014, 16:32:24
Post #8





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(Damonsson @ 23.03.2014, 14:52:59 ) *
Warunek jest dobry, nie słuchaj głupot. Musiałbyś pokazać więcej kodu. Ale skoro przeniosłeś include i działa, to w czym jeszcze problem?


Problem w tym że chciałbym aby formularz zniknął po zalogowaniu, to po 1., po drugie chciałbym zrozumieć dlaczego, skoro obydwa warunki są dobre, nie wyświetla mi się głupie echo (w procesie uczenia staram się zrozumieć jak coś działa, a nie napisać kod i modlić się żeby się udało jak nie ręką to młotkiem)

Nie wiem czy to pomoże, ale kod formularza wygląda tak (kod index.php był wklejony w całości w pierwszym poście)

  1. <?php
  2.  
  3. if (isset($_POST['username']) && isset($_POST['password'])) {
  4.  
  5. $username = $_POST['username'];
  6. $password = $_POST['password'];
  7.  
  8. $password_md5 = md5($password);
  9.  
  10. if (!empty($username) && !empty($password)) {
  11.  
  12.  
  13. $query = "SELECT `id` FROM `users (135)` WHERE `username`='$username' AND `password`='$password_md5'";
  14.  
  15. if ($query_run = mysql_query($query)) {
  16. $query_num_rows = mysql_num_rows($query_run);
  17.  
  18. if ($query_num_rows == 0) {
  19. echo 'Invalid username or password';
  20. } else if ($query_num_rows==1) {
  21. $user_id = mysql_result($query_run, 0, 'id');
  22. $_SESSION['user_id'] = $user_id;
  23. header('Location: index.php');
  24.  
  25. }
  26.  
  27. }
  28.  
  29. } else {
  30. echo 'You must type in username and password';
  31. }
  32.  
  33. }
  34.  
  35. ?>
  36.  
  37. <form action="index.php" ?>" method="POST">
  38. Username:
  39. <input type="text" name="username"><br>
  40. Password:
  41. <input type="password" name="password"><br>
  42. <input type="submit" name="submit" value="Log In">
  43.  
  44. </form>




Cytat(trueblue @ 23.03.2014, 14:59:00 ) *
A gdzie wyłączasz buforowanie rozpoczęte poprzez ob_start();?


Najprawdopodobniej nie wyłączam, szczerze mówiąc nie rozumiem jeszcze działania tej funkcji i do czego służy, dodałem ją gdyż tak mówił tutorial


Ten post edytował Fakebook 23.03.2014, 16:34:36
Go to the top of the page
+Quote Post
trueblue
post 23.03.2014, 17:06:23
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(Fakebook @ 23.03.2014, 16:32:24 ) *
Najprawdopodobniej nie wyłączam, szczerze mówiąc nie rozumiem jeszcze działania tej funkcji i do czego służy, dodałem ją gdyż tak mówił tutorial

Na początek zakomentuj ob_clean, lub dodaj w linii 5: ob_end_clean();


--------------------
Go to the top of the page
+Quote Post
Fakebook
post 23.03.2014, 19:49:40
Post #10





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(trueblue @ 23.03.2014, 17:06:23 ) *
Na początek zakomentuj ob_clean, lub dodaj w linii 5: ob_end_clean();


Niestety bez zmian
Go to the top of the page
+Quote Post
ZaXaZ
post 24.03.2014, 00:06:33
Post #11





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


wymień
  1. <form action="index.php" ?>" method="POST">
  2. <!--na-->
  3. <form action="index.php" method="POST">

oraz
Kod
$query = "SELECT `id` FROM `users (135)`
#na
$query = "SELECT `id` FROM `users`


poza tym za FROM powinna być tabela a nie kolumna tabeli.

Ten post edytował ZaXaZ 24.03.2014, 00:07:19


--------------------
Go to the top of the page
+Quote Post
Fakebook
post 24.03.2014, 16:42:04
Post #12





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(ZaXaZ @ 24.03.2014, 00:06:33 ) *
wymień
  1. <form action="index.php" ?>" method="POST">
  2. <!--na-->
  3. <form action="index.php" method="POST">


nadal bez zmian niestety, nadal to echo ' You are logged on' sie nie wyswietla, za to formularz non stop jest widoczny.

A co do tabeli, to "users (135)" to jej nazwa w bazie danych (łącznie z tym (135) właśnie)
Go to the top of the page
+Quote Post
trueblue
post 24.03.2014, 16:55:35
Post #13





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Zakomentuj ob_start(); i wrzuć przed linią 6 (w pierwszym przykładzie na stronie).
  1. print_r($_SESSION);

Pokaż co się wydrukowało.

Ten post edytował trueblue 24.03.2014, 16:56:11


--------------------
Go to the top of the page
+Quote Post
Fakebook
post 24.03.2014, 18:12:43
Post #14





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(trueblue @ 24.03.2014, 16:55:35 ) *
Pokaż co się wydrukowało.


Kompletnie nic, jak wkleilem to samo w loginform.inc.php to wyswietlil sie prawidlowo Array ( [user_id] => 1 ), ale print_r($_SESSION); w kodzie index.php nie wyswietliło absolutnie nic
Go to the top of the page
+Quote Post
com
post 24.03.2014, 18:16:43
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no a gdzie session_start(); w index?
Go to the top of the page
+Quote Post
Fakebook
post 24.03.2014, 18:20:39
Post #16





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


  1. <?php
  2.  
  3. require 'connect.inc.php';
  4. print_r($_SESSION);
  5.  
  6. if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) { // jesli sesja zostala ustanowiona, odpalamy ponizszy kod
  7. echo 'You are logged in';
  8. } else {
  9. include 'loginform.inc.php';
  10. }
  11. ?>


Stan pliku na chwilę obecną
Go to the top of the page
+Quote Post
Dyktus
post 24.03.2014, 18:25:38
Post #17





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 8.08.2011
Skąd: Poznań

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


Ja widzę session_start() na początku.

Spróbuj zrobić coś takiego
  1. <?php
  2. echo 'debug 1';
  3. require 'connect.inc.php';
  4. echo 'debug 2';
  5. print_r($_SESSION);
  6.  
  7. echo 'debug 3';
  8. if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) { // jesli sesja zostala ustanowiona, odpalamy ponizszy kod
  9. echo 'You are logged in';
  10. echo 'debug Prawdy';
  11. } else {
  12. echo 'debug Fałszu przed includem';
  13. include 'loginform.inc.php';
  14. echo 'debug Fałszu';
  15. }
  16.  
  17. echo 'debug 4';
  18. ?>


I powiedz który debug będzie ostatni. Przecież instrukcja warunkowa powinna działać tak, że wykona jedno lub drugie. To pozwoli wyszukać nam w której linijce może być problem smile.gif bo kod wygląda poprawnie.

Jeszcze pytanie czy korzystasz z serwera jakiegoś czy może localhost ?

A samego if-a proponuję zrobić tak:
  1. if ( (isset($_SESSION['user_id']) && (!empty($_SESSION['user_id']) ) {

Przynajmniej dopiero taki zapis zawsze u mnie poprawnie działał.

Ten post edytował Dyktus 24.03.2014, 18:27:39
Go to the top of the page
+Quote Post
Fakebook
post 25.03.2014, 08:43:37
Post #18





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(Dyktus @ 24.03.2014, 18:25:38 ) *
Jeszcze pytanie czy korzystasz z serwera jakiegoś czy może localhost ?

Jest to hosting na godaddy

Jako pierwszy pojawia sie debug1, potem wyswietla sie formularz, a pod spodem (jako ostatnie), cytuję: "debug FaĹlszudebug 4" (czyli dwa ostatnie, debug fałszu i debug 4)

Co jest ciekawe natomiast, to jesli nie wpisze hasła albo loginu wcale, po pojawia sie error z formularza ze musze wpisac dane (tak mialo byc, jest ok), jesli wpisze dane niepoprawne, rownież pojawia się poprawny komunikat błędu (niewłaściwy login lub hasło), jeśli natomiast wpiszę hasło poprawne, to pojawiają się te debugi które wypisałem powyżej, NATOMIAST jeśli teraz odświeżę ekran, znika wszystko oprócz 'debug1'

Ten post edytował Fakebook 25.03.2014, 09:17:41
Go to the top of the page
+Quote Post
Dyktus
post 25.03.2014, 17:55:49
Post #19





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 8.08.2011
Skąd: Poznań

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


Spróbuj na samym początku swojego kodu podać coś takiego smile.gif zobaczymy czy coś wyświetli.
Wygląda na to jakby był problem przy require

  1. ini_set('display_errors','1');


except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include only emits a warning
Może wyprodukuje jakiś błąd.

Dodam od siebie, że mam aktualnie podobny problem. W moim systemie logowania tworzy sesje, ale jak przejdę do podstrony swojego serwisu to sesja znika :| gdy zaloguje się poprawnie wszystko jest już w porządku.
Go to the top of the page
+Quote Post
Fakebook
post 26.03.2014, 01:14:13
Post #20





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.03.2014

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


Cytat(Dyktus @ 25.03.2014, 17:55:49 ) *
Spróbuj na samym początku swojego kodu podać coś takiego smile.gif zobaczymy czy coś wyświetli.
Wygląda na to jakby był problem przy require



Dyktus, wielkie dzięki, problem rozwiązany!

Wkleiłem ten kod od błędu, i wyświetliło się coś takiego: 'Warning: session_start(): Cannot send session cache limiter (...)'

Pół godziny googlowania i okazało się że problem leży po stronie godaddy, a dokładniej formy kodu który może strawić.

Na początku pliku, jeszcze przed znacznikiem <?php, opisuję w komentarzach co dany plik zawiera i co robi. Okazało się że godaddy nie może tego strawić, więc usunąłem wszystkie komentarze spoza znaczników <?php /> i zadziałało jak magia, natychmiast.

Gdybyś mi nie polecił wkleić tego kodu to bym jeszcze się długo z tym dziadostwem męczył, wielkie dzięki!

Pozdrawiam
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 22.07.2025 - 12:35