Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php]problem z if'em
sweter
post
Post #1





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Tak wygląda fragment strony odpowiedzialny za logowanie:
Kod
if(!$_SESSION['login']){
                   echo "<form action=\"log/login.php\">
                    <table width=\"100\" border=\"0\">
                                         <tr>
                                              <td><font style=\"color:white; font-size:11px;\">Login:</font></td>
                                              <td><input type=\"text\" size=\"12\" name=\"login\" style=\"font-family:Tahoma; color:#337FBD; font-size:11px;\" /></td>
                                         </tr>
                                         <tr>
                                              <td><font style=\"color:white; font-size:11px;\">Hasło:</font></td>
                                              <td><input type=\"password\" name=\"haslo\" size=\"12\" style=\"color:#337FBD; font-size:11px;\" /></td>
                                         </tr>
                                         <tr>
                                              <td colspan=\"2\"><center><input type=\"submit\" style=\"font-family:Arial; font-size:11px;\" value=\"Zaloguj się\" /></center></td>
                                         </tr>
                                    </table>
                                   </form>";
                                   }else{
                       echo "<a href=\"log/logout.php\">Wyloguj się</a>";
                      }

Tu mam do was pytanie: czemu nawet jak użytkownik jest zalogowany nie pojawia mi się napis "Wyloguj się"?
Go to the top of the page
+Quote Post
patryczakowy
post
Post #2





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


a spróbuj tak
  1. <?php
  2. if(!isset($_SESSION['login'])){
  3. ?>
i czy na początku pliku masz session_start();
Go to the top of the page
+Quote Post
sweter
post
Post #3





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Niestety nie pomogło (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
mam na początku session_start()
Go to the top of the page
+Quote Post
patryczakowy
post
Post #4





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


To pokaż więcej kodu bo z warunkiem jest ok pewnie jakas literówka czy coś
Go to the top of the page
+Quote Post
sweter
post
Post #5





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Odwołanie do sesji wygląda tak:
Kod
session_start();
$login = $_SESSION['login'];

więc chyba nie ma mowy o literówce
Go to the top of the page
+Quote Post
decha-design
post
Post #6





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


Mam takie pytanie? Co do jest?
  1. <?php
  2. $login = $_SESSION['login'];
  3. ?>


Tutaj przypisujesz do $login wartość $_SESSION[login] ... nie odwrotnie ... a jednak wydaje mi się, żę ty tak myślisz ...

Czy $_SESSION[login] ma jakąś wartość? Wątpie ...

i pokaż WIĘCEJ KODU
Go to the top of the page
+Quote Post
patryczakowy
post
Post #7





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


nie wyświetla się "wyloguj się" ponieważ zawsze jest spełniony warunek tzn niema zmiennej sesji więdz lepiej pokaż plik login.php bo to co przesłałeś to chyba nie jest zainicjowanie sesji a jeśli jest to musi być na odwrót do zmiennej sesji zapisujesz zmienną login a nie na odwrut
Go to the top of the page
+Quote Post
sweter
post
Post #8





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Plik login.php wygląda tak:
Kod
<?php
session_start();
$_POST['$login'] = strip_tags($_POST['$login']);
$_POST['$haslo'] = strip_tags($_POST['$haslo']);
$_POST['$login'] = trim($_POST['$login']);
$_POST['$haslo'] = trim($_POST['$haslo']);
$_POST['$login'] = addslashes($_POST['$login']);
$_POST['$haslo'] = addslashes($_POST['$haslo']);
$_POST['$login'] = htmlspecialchars($_POST['$login']);
$_POST['$haslo'] = htmlspecialchars($_POST['$haslo']);
$pol = @mysql_connect("localhost","root","krasnal");
echo $login;
   if (!$pol) {
     echo "nie można się połączyć z bazą danych!";
     exit;
   }
$wyb = @mysql_select_db("mojabaza");
   if (!$wyb) {
     echo "nie można wybrać bazy danych!";
     exit;
   }
$haslo = sha1($haslo);

   $zap = "SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo='$haslo'";
   $wyn = @mysql_query($zap);
   print mysql_error();
   $ile = @mysql_num_rows($wyn);
     if ($ile=="1") {
       $tekst = "Logowanie powiodło się!
$zap";
       $przenies = "<meta http-equiv=\"Refresh\" content=\"1; strona.php\">";
       $_SESSION['login'] = $login;
       $_SESSION['haslo'] = $haslo;
       $zap = "SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo='$haslo'";
       $wyn = mysql_query($zap);
       while($wiersz = mysql_fetch_row(($wyn))){
         $img = $wiersz[3];
       }
     }else{
       $tekst = "Logowanie nie powiodło się!
$login
$haslo";
     }
    
     /*zalogowani użytkownicy*/
     $q = mysql_query('select * from zalogowani;');
if(mysql_num_rows($q)==12){
    $q = mysql_query('delete from zalogowani where login = "'.$login.'";');
    if(mysql_affected_rows($q)==0){
        $q = mysql_query('delete from zalogowani order by id ASC limit 1');
    }
}
$q = mysql_query('insert into zalogowani(login, img) VALUES("'.$login.'","'.$img.'");');
   mysql_close($pol);
  
   echo $tekst;    
?>
Go to the top of the page
+Quote Post
decha-design
post
Post #9





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


$_POST['$login']; co to w ogole jest? jak już to $_POST['login'] ... bo tamto i tak jest puste ...

Po drugie ... co Ci zwraca $login? Bo jak masz wylączone register_globals to jest puste ... poza tym, nie widzę, w pliku przypisania do $login = $_POST['login'], więc raczej jest puste ... zawsze korzystaj z $_POST[] ... nie z krótkich nazwa, czy jak to zwał ...
To samo z hasłem ...

$haslo = sha1($haslo); moim zdaniem mieszasz tutaj pustą zawartość (czyt. '') ...

Poza tym ... $ile=="1", czy jedynka musi być konwertowana na string skoro jest w int? $ile == 1, a raczej $ile > 0

Zamotałeś strasznie ten kod =)
Go to the top of the page
+Quote Post
sweter
post
Post #10





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


decha-design nie bardzo cię zrozumiałem. Poniżej jest nowy kod.
Kod
<?php
session_start();
$_POST['$login'] = strip_tags($_POST['$login']);
$_POST['$haslo'] = strip_tags($_POST['$haslo']);
$_POST['$login'] = trim($_POST['$login']);
$_POST['$haslo'] = trim($_POST['$haslo']);
$_POST['$login'] = addslashes($_POST['$login']);
$_POST['$haslo'] = addslashes($_POST['$haslo']);
$_POST['$login'] = htmlspecialchars($_POST['$login']);
$_POST['$haslo'] = htmlspecialchars($_POST['$haslo']);
$pol = @mysql_connect("localhost","root","krasnal");
   if (!$pol) {
     echo "nie można się połączyć z bazą danych!";
     exit;
   }
$wyb = @mysql_select_db("mojabaza");
   if (!$wyb) {
     echo "nie można wybrać bazy danych!";
     exit;
   }
  
$_POST['$haslo'] = sha1($_POST['$haslo']);

   $zap = 'SELECT * FROM `uzytkownicy` WHERE login="'.$_POST['$login'].'" AND haslo="'.$_POST['$haslo'].'"';
   $wyn = @mysql_query($zap);
   print mysql_error();
   $ile = @mysql_num_rows($wyn);
     if ($ile>1) {
       $tekst = "Logowanie powiodło się!
$zap";
       $przenies = "<meta http-equiv=\"Refresh\" content=\"1; strona.php\">";
       $_SESSION['login'] = $_POST['$login'];
       $_SESSION['haslo'] = $_POST['$haslo'];
     }else{
       $tekst = "Logowanie nie powiodło się!
".$_POST['$login']."
".$_POST['$haslo'];
     }
   echo $tekst;    
?>

Jednak teraz nie mogę się zalogować, bo zmienna $login jest pusta.

Ten post edytował sweter 10.01.2009, 15:46:12
Go to the top of the page
+Quote Post
decha-design
post
Post #11





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


omg ... nie $_POST['$login'] a $_POST['login']! i alternatywnie do hasła ...

a najlepiej to zrób sobie print_r($_POST); i zobacz co zwraca (IMG:http://forum.php.pl/style_emoticons/default/sleep.gif) '
Go to the top of the page
+Quote Post
sweter
post
Post #12





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


OK, uporządkowałem cały kod. Oto plik login.php:
Kod
<?php
session_start();

$login = strip_tags(trim(addslashes(htmlspecialchars($_POST['login']))));
$haslo = strip_tags(trim(addslashes(htmlspecialchars($_POST['haslo']))));

$pol = @mysql_connect("localhost","root","krasnal");
  if (!$pol) {
    echo "nie można się połączyć z bazą danych!";
    exit;
  }
$wyb = @mysql_select_db("siedlczanin");
  if (!$wyb) {
    echo "nie można wybrać bazy danych!";
    exit;
  }
  
$_POST['haslo'] = sha1($_POST['haslo']);
if($_POST['haslo']!=NULL AND $_POST['login']!=NULL){
  $zap = "SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo=$haslo";
  $wyn = @mysql_query($zap);
  print mysql_error();
  $ile = @mysql_num_rows($wyn);
    if ($ile==1) {
      $tekst = "Logowanie powiodło się!<br>$zap<br>$login";
      $_SESSION['login'] = $login;
    }else{
      $tekst = "Logowanie nie powiodło się! <br>$login<br>$haslo<br> $zap";
    }
  }
  echo $tekst;
  print_r($_POST);    
?>


Jednak dalej nie działa mi if, o którym wspomniałem na początku.
Nawet jeżeli wpisuję przed if'a "print_r($_SESSION)", to nie wyświetla mi się nic(nawet samo "Array()"!).
A może ma znaczenie to, że ten plik z if'em jest zaincludowany (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
patryczakowy
post
Post #13





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


Najpierw robisz
  1. <?php
  2. $haslo = strip_tags(trim(addslashes(htmlspecialchars($_POST['haslo']))));
  3. ?>

póżniej
  1. <?php
  2. $_POST['haslo'] = sha1($_POST['haslo']);
  3. ?>

a do bazy pytasz sieę
  1. SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo=$haslo


zamień drógi kod na
  1. <?php
  2. $haslo = sha1($_POST['haslo']);
  3. ?>

powinno pomóc poprustu inną zmieną haszujesz a inną dajesz w zapytaniu

acha i zapomniałem po shaszowaniu zmienna hasło jest stringiem więc powinno być
  1. SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo='$haslo'


zmienna w cudzysłowiu i umnie działa

Ten post edytował patryczakowy 10.01.2009, 21:32:48
Go to the top of the page
+Quote Post
sweter
post
Post #14





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Ok, już sobie poradziłem z problemem w login.php.
Jednak wracając do głównego tematu tego wątku:
zauważyłem, że problem z tą pętlą:
Kod
<?php
if(!isset($_SESSION['login'])){
?>

jest taki, że znajduje się ona w zaincludowanym pliku, a tam sesje nie sięgają. Jak to naprawić?
Go to the top of the page
+Quote Post
decha-design
post
Post #15





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


Mam takie pytanie ...

Czemu ma to slużyć?
  1. <?php
  2. $haslo = strip_tags(trim(addslashes(htmlspecialchars($_POST['haslo']))));
  3. ?>
skoro póżniej jest
  1. <?php
  2. $_POST['haslo'] = sha1($_POST['haslo']);
  3. ?>
... więc zmienna $hasło ma przypisaną wartość po przerobieniu przez te funkcje, a $_POST['haslo'] jest wymieszane przy pomocy sha1
Zapamiętaj $haslo nie równa się $_POST['haslo'] ... chyba, że przypiszesz $hasło = $_POST['haslo'] i będziesz korzystal poźniej tylko z $haslo, a nie na przemian bo tak sobie umyślałeś ...

Powinno być
  1. <?php
  2. $_POST['haslo'] = strip_tags(trim(addslashes(htmlspecialchars($_POST['haslo']))));
  3. ?>

A najlepiej zrób to w funkcji, aby nie przepisywać tego ponownie dla loginu etc.

i wtedy $_SESSION['login'] = $_POST['login'] ... i powinno działać (IMG:http://forum.php.pl/style_emoticons/default/sleep.gif) '

Ten post edytował decha-design 10.01.2009, 21:53:19
Go to the top of the page
+Quote Post
sweter
post
Post #16





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Jak już napisałem:
Cytat
Ok, już sobie poradziłem z problemem w login.php.
Jednak wracając do głównego tematu tego wątku:
zauważyłem, że problem z tą pętlą:
Kod
<?php
   if(!isset($_SESSION['login'])){
   ?>

jest taki, że znajduje się ona w zaincludowanym pliku, a tam sesje nie sięgają. Jak to naprawić?
Go to the top of the page
+Quote Post
decha-design
post
Post #17





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


ponoć print_r zwraca ci pusty wynik, tak? ...

to
  1. <?php
  2. $_SESSION['login'] = $login
  3. ?>
zamień na
  1. <?php
  2. $_SESSION['login'] = $_POST['login']
  3. ?>
... do jasnej cho%$#% ...
Go to the top of the page
+Quote Post
sweter
post
Post #18





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


jak już napisałem, ale dla większej pewności powtórzę: Z PLIKIEM LOGIN.PHP JUŻ SOBIE PORADZIŁEM.
Sesje mi działają i jest prawie cacy, bo jedynie warunek
Kod
<span class="postcolor"><?php
    if(!isset($_SESSION['login'])){
    ?></span>

nie może zostać spełniony, bo jest w zaincludowanym pliku.
Inaczej mówiąc mam sobie plik strona.php w którym jest
Kod
session_start();
$login = $_SESSION['login'];
/* Zmienna $_SESSION['login'] zawiera wartość! */

Dopiero tutaj zaczynają się problemy, bo do powyższego pliku podłączyłem za pomocą funkcji incluce_once() plik logowanie.php, w którym jest warunek if, który nie chce mi działać.
W pliku strona.php na chwilę podmieniłem zamiast funkcji include_once() if'a i okazało się , że wszystko gra!
Czyli mój problem ogranicza się do zwiększenia zasięgu zmiennej $_SESSION['login'], tak aby była dostępna w pliku logowanie.php (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
patryczakowy
post
Post #19





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


w każdym pliku możesz dać session_start(); i na pewno będzie wszędzie widoczna
Go to the top of the page
+Quote Post
decha-design
post
Post #20





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


w pliku logowanie.php daj session_start() ... również ...

Powinno pomóc, bo czasami nie wystarczy w nadrzędnym pliku ... w includowanych też muszą być

I nadal nie rozumiem tego $login = $_SESSION['login']; ... skoro nie korzystasz z $login ...
Go to the top of the page
+Quote Post
sweter
post
Post #21





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Cytat
w pliku logowanie.php daj session_start() ... również ...

Powinno pomóc, bo czasami nie wystarczy w nadrzędnym pliku ... w includowanych też muszą być

Niestety nie pomogło (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Cytat
I nadal nie rozumiem tego $login = $_SESSION['login']; ... skoro nie korzystasz z $login ...

To powinno być samo $_SESSION['login']?

Ten post edytował sweter 11.01.2009, 10:32:02
Go to the top of the page
+Quote Post
decha-design
post
Post #22





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


Czyli w includowanym pliku tablica globalna $_SESSION jest pusta, tak?

Warunek powinien byc poza tym
  1. <?php
  2. if(!empty($_SESSION['login'])) {
  3. ?>
Go to the top of the page
+Quote Post
sweter
post
Post #23





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Ale teraz, bez względu na to, czy jestem zalogowany, czy nie, ciągle mi się pojawia to co jest za else, czyli "Wyloguj się"
(IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował sweter 11.01.2009, 11:41:28
Go to the top of the page
+Quote Post
decha-design
post
Post #24





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


sorki, źle Ci podałem ... zapomniałem juz jaką masz tam strutkure tego skryptu ... usuń ! z warunku ...
Go to the top of the page
+Quote Post
sweter
post
Post #25





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


nie działa...
(IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 10:02