The Night Shadow
8.03.2006, 15:49:09
Stworzyłem skrypt logowania. Ciekaw jestem jak go widzicie i co ewentualnie moznaby poprawić. Znajduje się w nim dużo komentarzy, które powinny pomóc. Tak więc pytanie. Co jest źle, tudziez mogłoby być lepiej, jak zmienić i przede wszystkim po co? :- )
Pozdrawiam... :- )
<?php
$mysql_host = '***';
$mysql_login = '***';
$mysql_haslo = '***';
$mysql_baza = '***';
if ($zakonczenie=='koniec')
{
// USUWANIE SESJI JEŚLI W ADRESIE STRONY POJAWIŁA SI ZMIENNA "LOGIN" RÓWNA "KONIEC"
}
if ($_SESSION['zalogowany']<>'tak')
{
// JEŻELI UŻYTKOWNIK JEST ZALOGOWANY
if ($nlogin<>'')
{
// JEŻELI PODANO LOGIN Z FORMULARZA KODOWANIE HASŁA
if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
{
// ŁĄCZENIE Z BAZĄ DANYCH MYSQL I SPRAWDZANIE KOLEJNYCH WŁAŚCIWOŚCI PODANYCH W FOR
MULARZU DANYCH
$sprawdzanie_loginu = mysql_query("SELECT login FROM logowanie WHERE login='$nlogin'"); {
// GENEROWANIE BŁDU JEŚLI LOGIN NIE ISTNIEJE W BAZIE DANYCH
$blad++;
$wykrytoblad = "Użytkownik <b>$nlogin</b> nie istnieje...";
}
else
{
// JEŻELI W BAZIE ISTNIEJE JEDEN PODANY PRZEZ UŻYTKOWNIKA W FORMULARZU LOGIN SPRAW
DZANIE POPRAWNOŚCI WPISANEGO HASŁA
$sprawdzanie_hasla = mysql_query("SELECT login, haslo FROM logowanie WHERE (login='$nlogin' and haslo='$nhaslo')"); {
// GENEROWANIE BŁDU JEŚLI PODANE HASŁO NIE JEST POPRAWNE
$blad++;
$wykrytoblad = 'Podałeś błędne hasło...';
}
else
{
// JEŚLI HASŁO PODANE ZOSTAŁO W FORMULARZU PRAWIDŁOWO
$sprawdzanie_statusu = mysql_query("SELECT * FROM logowanie WHERE (login='$nlogin' and status=5)"); {
$blad++;
$wykrytoblad = 'Twoje konto nie zostało przez Ciebie aktywowane...';
}
}
}
else
{
// GENEROWANIE BŁDU JEŚLI W BAZIE ZNALEZIONO DWA IDENTYCZNE LOGINY
$blad++;
$wykrytoblad = 'BŁĄD KRYTYCZNY - w bazie danych znajdują się co najmniej dwa identyczne loginy! Skontaktuj się z
administratorem i powiadom o zaistniałym fakcie...';
}
if ($blad==0)
{
// JEŻELI NIE WYKRYTO ŻADNYCH BŁDÓW TWORZENIE SESJI. WSZYSTKIE DANE Z TABELI LOGOW
ANIE SĄ UŻYTE, PONIEWAŻ BDĄ POTRZEBNE W SKRYPTACH NA INNYCH STRONACH
$_SESSION["zalogowany"] = 'tak';
$_SESSION["id"] = $dane["id"];
$_SESSION["login"] = $dane["login"];
$_SESSION["imie"] = $dane["imie"];
$_SESSION["email"] = $dane["email"];
$_SESSION["gadu"] = $dane["gadu"];
$_SESSION["tlen"] = $dane["tlen"];
$_SESSION["skype"] = $dane["skype"];
$_SESSION["www"] = $dane["www"];
$_SESSION["pytanie"] = $dane["pytanie"];
$_SESSION["odpowiedz"] = $dane["odpowiedz"];
$_SESSION["dataurodzenia_dzien"] = $dane["dataurodzenia_dzien"];
$_SESSION["dataurodzenia_miesiac"] = $dane["dataurodzenia_miesiac"];
$_SESSION["dataurodzenia_rok"] = $dane["dataurodzenia_rok"];
$_SESSION["ranga"] = $dane["ranga"];
$adresip = $_SERVER['REMOTE_ADDR'];
$hostuzytkownika = gethostbyaddr($_SERVER['REMOTE_ADDR']);
// DODAWANIE DATY LOGOWANIA DO TABELI DATYLOGOWAŃ
$dodanie_daty_logowania = mysql_query("INSERT INTO datylogowan SET datylogowan_id_uzytkownika='".$_SESSION["id"]."', datylogowan_data='$ndata'");
// AKTUALIZACJA TABELI LOGOWANIE. NADPISYWANIE OSTATNIEGO IP, HOST I DATY LOGOWANI
A
$aktualizacja_danych = mysql_query("UPDATE logowanie SET ostatnie_logowanie='$ndata', ostatnie_ip='$adresip', ostatni_host='$hostuzytkownika' WHERE id='".$_SESSION["id"]."'");
$sprwadzanie_listy_ip = mysql_query("SELECT * FROM adresyip WHERE (adresyip_ip='$adresip' and adresyip_id_uzytkownika='".$_SESSION["id"]."')"); {
// JEŻELI AKTALNEGO ADRESU IP NIE MA W TABELI ADRESÓW IP DOPISYWANIE GO DO LISTY
$dodawanie_adresu_ip = mysql_query("INSERT INTO adresyip SET adresyip_id_uzytkownika='".$_SESSION["id"]."', adresyip_ip='$adresip', adresyip_host='$hostuzytkownika'"); }
}
}
else
{
?>
<span>
<center>
Nie można połączyć się z bazą - spróbuj ponownie za chwilę...
</center>
</span>
<?php
}
}
else
{
?>
<span>
<center>
Nie można połączyć się z serwerem MySQL - spróbuj ponownie za chwilę...
</center>
</span>
<?php
}
}
}
?>
Z góry wielkie dzięki :- )
nospor
8.03.2006, 15:53:13
<?php
?>
Chyba miales na mysli addslashes()

i jezeli tak to juz lepiej mysql_escape_string()
The Night Shadow
8.03.2006, 16:02:24
czyli mysql_escape_string() podstawić zamiast stripslashes czy tak?
nospor
8.03.2006, 16:04:52
No chyba wyraznie napisalem

Poczytaj se:
http://forum.php.pl/index.php?showtopic=23258ps: dobrze ze usunoles poprzedniego posta...
The Night Shadow
8.03.2006, 16:09:11
No tak... :- ) A czy coś jeszcze? Generalnie zastanawiam sie czy naprawdę tak istotne jest psanie $costam a $cosTam Itp... to w sumie drobiazgi są, ale... ;- )
Zastanawiam się nad jeszcze jedną kwestią... istnieje możliwość includowania pliku *.ini lub *.php z wartościami zmiennych takimi jak np nazwa hosta... czy to dość silnie wpływa na wydajność?
...lub
mysql_real_escape_stringA tak z ciekawosci, po co Ci tyle danych w sesji? To tylko logowanie
The Night Shadow
8.03.2006, 16:15:30
Tak, to tylko logowanie, ale zaraz na następnej stonie pojawia się monit w przypadku gdy użytkownik ma urodziny. Myślę, że dana w sesji będzie mnie uciążliwa niż dodatkowe zapytanie. Pozostałe dane również są potrzebne... :- )
Nospor... "usunołeś" a powinno być usunąłeś ;- ppp :- )
no dobrze, ale to tylko jeden element, a co z reszta? Na kazdej stronie bedziesz wykorzystywal informacje o nr. gg, tlen, www, itd. usera? Nie to, zebym sie czepial, czy cos... ot, poprostu zwykla ciekawosc.
Swoja droga po co date rozbijasz na dni, miesiace, lata?
The Night Shadow
8.03.2006, 16:27:29
Ponieważ w formularzu stworzyłem pola dzień miesiąc rok... :- )
A co do informacji o GG to pojawiają się rzeczywiście dość często na kolejnych podstronach... :- )
Ale w związku z nimi... czy to wpływa w jakiś sposób negatywnie na strukturę strony (czy rzeczywiście powinienm uciec się do dodatkowego zapytania o dane. Wtedy potrzebny byłby tylko ID RANGA i ewentualnie LOGIN)?
Jezeli przy kazdym logowaniu bedziesz mnie meczyl formularzem z taka iloscia pol do wypelnienia to... chyba wiecej Cie nie odwiedze

Dajesz do oceny skrypt logowania, a do niego nie sa Ci potrzebne te wszystkie dane.
Chyba ze mowimy o jakiejs rejstracji usera, a nie logowaniu.
The Night Shadow
8.03.2006, 16:45:02
Ale widzę, że nie przeczytałeś uważnie skryptu. Z formularza pobierane są dwie dane. Login i hasło. reszta pochodzi z bazy danych, która to wypełniona została nimi podczas rejestracji tudzież edycji profilu.
Cytat(The Night Shadow @ 2006-03-08 16:45:02)
Ale widzę, że nie przeczytałeś uważnie skryptu. Z formularza pobierane są dwie dane. Login i hasło. reszta pochodzi z bazy danych, która to wypełniona została nimi podczas rejestracji tudzież edycji profilu.
zapisujesz te dane nie wiem w jakim celu w sesji

pewnie dla tego zeby np zapisywac je przy roznych miejsach (komentarze, i temu podobne). a co bedzie jak user zmieni nr gg? pozamieniasz wszytko? lepiej poprostu id usera i po tym wyciagac to co trzeba gdzie trzeba;)
The Night Shadow
8.03.2006, 17:03:13
I tak też się dzieje... :- ) Do komentarzy i czego tam jeszcze chcieć dopisywane jest jedynie id żytkownika ip host i data... bo one są niezmienne... A sesje... pytałem i pytam po raz kolejny czy szybciej w sesji, czy zapytaniem... ;- )
Czy sesja bardzo obciąża przechodzenie miedzy stronami, bo mam wrażenie, że nie, a skoro nie (wydaje się to być szybszym od kolejnego zapytania skoro i tak login i id jest pobierany przy okazji tworzenia sesji) to czemu by tego nie używać? :- )
acztery
8.03.2006, 17:22:39
a nie lepiej w sesji trzymac tylko id_usera i opcjonalnie nazwe usera
No, mi chodzilo tylko o celowosc trzymania tylu danych w sesji, cala reszta to proba dociekania
The Night Shadow
8.03.2006, 17:48:02
No więc odpowiadam... stwierdziłem, że to MOŻE (choć nie musi) być szybsze... ;- ) A te dane dość często są tam wyświetlane... ;- )
Przynajmniej w wersji finalnej bo na serwerze znajduje się beta
Cytat(The Night Shadow @ 2006-03-08 17:27:29)
Ponieważ w formularzu stworzyłem pola dzień miesiąc rok... :- )
Lepiej użyć pola date w bazie danych ;] Operacje na dacie... m.in wyciaganie osób które mają w danym dniu urodziny bedzie dzialalo lepiej i szybciej... ;]
EDIT...
a dam jeszcze zapytanie SQL co mi tam =)
SELECT user_id,YEAR(CURDATE())-YEAR(user_birthday) AS user_age
FROM moja_tabelka
WHERE MONTH(user_birthday)=MONTH(CURDATE()) AND DAYOFMONTH(user_birthday)=DAYOFMONTH(CURDATE())
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.