Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> czy takie sposób jest dobry?
john_doe
post
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


Witajcie,
napisałem dziś logowanie. Napiszcie czy jest ok? Ogólnie działa ale, że działa to nie wszystko. Co byście zmienili? Co robię źle i bez sensu? czy idea jest oki? Czy idzie ten kod jakoś obejść i wejść mimo logowania na stronę?

poniżej kod z komentarzem

  1. <?php
  2.        
  3.    include ('db/conection.php');  // łącze się z db za pomocą PDO
  4.    
  5.    include('querries/confQuerries.php');  // tutaj plik z zapytaniami SQL
  6.    
  7.    
  8.    $howMany = $dbh -> query($COUNT_LOGIN_USERS);     // tutaj zapytanie count(*) where $_POST['login']
  9.        
  10.    foreach( $howMany as $k )
  11.    {
  12.    
  13.        $count = $k[0];
  14.    
  15.    }
  16.    
  17.    
  18.    if ( $count == 1 )  // jeśli zapytanie zwróciło jeden wiersz
  19.    {
  20.                foreach ( $dbh -> query( $SELECT_USER ) as $row ) // wybieram wszystkie dane usera where $_POST['login']
  21.                {
  22.                    if ( $_POST['login'] == $row[1] && $_POST['pass'] == $row[2] )  // jeśli wpisany login odpowiada loginowi w bazie i wpisane haslo odpowiada temu z bazy przypisuje wynik zapytania do sesji
  23.                    {
  24.                        $_SESSION['id']       = $row[0];
  25.                        $_SESSION['login']    = $row[1];
  26.                        $_SESSION['pass']     = $row[2];
  27.                        $_SESSION['name']     = $row[3];
  28.                        $_SESSION['surname']  = $row[4];
  29.                        $_SESSION['nickname'] = $row[5];
  30.                        $_SESSION['level']    = $row[6];
  31.                        $_SESSION['xlid']     = $row[7];
  32.                        $_SESSION['region']   = $row[8];
  33.                        $_SESSION['logIn']    = 1;
  34.                        
  35.                        $output = getdate();
  36.                        
  37.                        $loginAim = $output[year] . '-' . $output[mon] . '-' . $output[mday] . ', ' . $output[hours] . ':' . $output[minutes] . ':' . $output[seconds];
  38.                        
  39.                        include('querries/confQuerries.php');
  40.                        
  41.                        if ( $_SESSION['xlid'] != 5555555 ) // nie loguje ADMINA
  42.                        {
  43.                            $dbh -> query( $INSERT_LOGGED_USER ); // log kto i kiedy sie zalogował
  44.                                
  45.                            foreach( $dbh -> query( $SELECT_LAST_INSERT_ID_PER_USER ) as $row )
  46.                            {
  47.                                $_SESSION['sessionIdLogger'] = $row[0];
  48.                            }
  49.        
  50.                        }    
  51.                            
  52.                        header( 'Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/') . '/' . mainView.'.'.php ); // jesli wszystko ok to kieruje na stronę jakąś tam dostępną po zalogowaniu poprawnym
  53.                        exit;
  54.                    }else
  55.                        {
  56.                            header( 'Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/') . '/' . index.'.'.php ); // jeśli coś nie tak to kieruje na stronę logowania
  57.                            exit;
  58.                        }
  59.                    
  60.                }
  61.    
  62.    }else header( 'Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/') . '/' . index.'..php );
  63.    
  64.    
  65. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Po co najpierw pobierasz ilość rekordów dla login = xxx, a dopiero potem dane dla login = xxx? Odrazu pobierz wszystkie dane - jak nic nie zwrócić, to znaczy, że takiego użytkownika nie ma.
Weź sobie utwórz jakąś stałą, która będzie zawierała adres strony czy coś takiego, bo każdorazowe klepanie w header() tego, to jakaś masakra. Dodatkowo dobrze by było, żebyś po header() dodał:
  1. <?php
  2. die('Przekierowanie na adres: TUTAJ ADRES JAKO LINK');
  3. ?>
Obiekt spod $dbh mógłby obsługiwać metody getRows() - zwraca wiele rekodrów, getRow() - zwraca jeden, getField() - zwraca pierwszą kolumnę z pierwszego rekordu. Albo lepiej przejdź na PDO.
Brak filtracji danych.
Nie stosuj numerycznych indeksów w tablicy zwracanej przez bazę danych. Raz, że jest to kompletnie niezrozumiałe, dwa, że w przypadku zmiany kolejności kolumn w bazie skrypt się sypie.
Chyba łatwiej będzie:
  1. <?php
  2. $loginAim = date('Y-m-d H:i:s');
  3. ?>
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(Crozin @ 26.05.2009, 21:13:13 ) *
Obiekt spod $dbh mógłby obsługiwać metody getRows() - zwraca wiele rekodrów, getRow() - zwraca jeden, getField() - zwraca pierwszą kolumnę z pierwszego rekordu. Albo lepiej przejdź na PDO.
Brak filtracji danych.


Przecież pisał, że PDO używa. Co do filtracji ja już o tym pisałem.
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 15:07