Jump to content
meverone

Logowanie

Recommended Posts

W tym tutarialu postaram się pokazać wam jak napisać prosty skrypt logowania napisany w PHP/Mysql.

 

Wiec zaczynamy:

 

Tworzymy baze danych

 

CREATE TABLE user (
user_id MEDIUMINT(3) unsigned NOT NULL auto_increment,
username VARCHAR(20) NOT NULL,
access VARCHAR(10) NOT NULL,
email VARCHAR(20) NOT NULL,
haslo VARCHAR(60) NOT NULL,
data_rejstacji timestamp NOT NULL,
PRIMARY KEY (user_id)
) Type = MyISAM;

Nie będe tłumaczył poleceń sql bo juz widzialem jakis tutarial na forum. Myśle ze dacie sobie rade :)

Teraz musisz wprowadzic dane do tabeli wiec:

 

INSERT INTO user (username,access,email,haslo,data_rejstacji) VALUES ('test','root','test@com.pl',PASSWORD('test'),NOW());

 

Następnie tworzymy plki config.php

<?
$dbhost = 'localhost';
$dbuser = 'root'; // tutaj podajemy login do bazy
$dbpass = ''; // tutaj podajemy hasło do bazy
$dbname = ''; // nazwa bazy danych

$dbc = @mysql_connect($dbhost, $dbuser, $dbpass) or die ('Nie moge połaczyc sie z Mysql'); //łaczymy z baza
mysql_select_db ($dbname) or die ('Nie moge wybrać bazy'); //wybieramy baze danych
?>

W tym kroku stworzyłem połaczenie z baza danych. Teraz czas na właściwy skrypt

 

<?
ob_start();
require_once('./config.php'); // załaczamy plik config.php

function usun($data){

	GLOBAL $dbc;
  if (ini_get('magic_quotes_gpc')){
	$data = stripslashes($data);
  }
   return mysql_real_escape_string($data, $dbc);
}

Tutaj stwórzylem funkcje dzieki której mozna uzywać znaków specjalnych. Czyli funcka poprzedają…ca znaki specjalne odwrotymi ukośnikami.

 

if (isset($_POST['submit'])){

if (empty($_POST['login'])){
	$message .= '<font class="blad">Nie podałeś loginu</font><br />';
	$l = FALSE;
}else{
	$l = usun($_POST['login']);
}

if (empty($_POST['haslo'])){
	$message .= '<font class="blad">Nie podałeś hasła</font><br />';
	$h = FALSE;
}else{
	$h = usun($_POST['haslo']);
}

Główne wyrażenie które sprawdza czy otrzymano juz jakieś dane z formularza. Sprawdzane są… pola wejściowe login i haslo, jezeli te pola nic

 

nie zawieraja to $l i $h przyjmuja wartość FALSE i zostaje zwrócony błą…d.

 

if ( $l && $h ){

$query = "SELECT username, access FROM user WHERE username='$l' AND haslo=password('$h')";
$result = mysql_query($query);
	$row = mysql_fetch_array ($result, MYSQL_ASSOC);

Jeżeli obie wartości przeszły pomyślnie przez etap weryfikacji, zostanie wykonanane zapytanie które odczyta wartości z rekorku username,

 

access z rekorku które pola username i haslo zawierają… wartości wpisane przez użytkownia(przed porównaniem hasło bedzie szyfrowane funkcją…

 

PASSWORD();)

 

	if($row){
session_start();
	$_SESSION['username'] = $row['username'];
			$_SESSION['access'] = $row['access'];
	$_GET['cmd'] = 'ok';
	header ("Location: admin.php?cmd={$_GET['cmd']}");  // przekierowuje nas na jaka strone chcemy
}else{
	$message .= '<font class="blad">Błędne hasło lub login</font><br />';
}
mysql_close();
}else{
$message .= '<font class="blad">Spróbuj jeszcze raz</font>';
}
}
ob_end_flush();
?>

Jeżeli użytkownik wprowadził prawidłowe dane do zaloguje się do systemu. To tak, jeżeli zapytanie przebiegnie pomyślnie to bedzie oznaczało ze

 

zapytanie zwróci conajmniej jeden rekord( co bedzie oznaczalo ze uzytkownik i haslo zgadzaja sie z danymi z bazy danych);

 

 

*session_set_cookie_params (czas_wygasniecia, 'sciezka', 'domena'); w przeciwienstwie do setcookie(); nie uzywamy tutaj funckcji TIME();

 

Teraz czas na kod html :)

 

<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>">
<table align="center" border="0">
	<tr>
		<td align="right" class="uni_01">Login:</td>
		<td><input type="text" name="login" size="30"></td>
	</tr>
	<tr>
		<td align="right" class="uni_01">hasło:</td>
		<td><input type="text" name="haslo" size="30"></td>
	</tr>
	<tr>
		<td align="right" class="uni_01"> </td>
		<td>
	<p align="center"><input style="font-weight: bold;" type="submit" name="submit" value="loguj">
	</td></tr>
</table>
</form>

 

Teraz musimy wyswietlic gdzies bledy jezeli wystapily wiec:

<div align="center">
<? if(isset($message)){
echo $message;
  }
?>
</div>

I skrypt logowania mamy juz gotowy

 

 

Teraz jezeli chcesz zabezpieczyć dany plik haslem na sama gore dajesz

<?
ob_start();

session_start();
if($_SESSION['access'] != 'root'){
	@header ("Location:  index.php");
}

echo 'dziala:)';

ob_end_flush();
?>

 

 

Jeżeli macie jakies zastrzezenia to piszcie.

  • Like 2

Share this post


Link to post
Share on other sites

Ok, działać działa, ale stopień bezpiecześntwa jest wysoki ?

 

 

I tak suuuper tutorial :P


Atmosphere-studio.com:

Oferujemy wykonanie:


  •  
  • stron internetowych (w caÅ‚oÅ›ci lub fragmentów)
  • skryptów (php, actionscript, js, html)
  • layout'ów (grafika i/lub kodowanie)
  • banerów
  • innych wybranych grafik
  • obróbki fotografii
  • jingli (przerywnik muzyczny) np. radiowych
  • ... oraz innych prac zwiÄ…zanych z podobnÄ… tematykÄ….

Muzyk jako Tilnaaay : http://www.youtube.com/tilnaay

Share this post


Link to post
Share on other sites

jeśli chodzi o bezpieczeństwo, to skrypt jest stworzony za pomocą… sesji, więc z bezpieczeństwem, a raczej jego brakiem nie powinno być problemu Fajny skrypt, widać, żę włożyłeś w niego trochę pracy i ci nawet wyszło :)

Share this post


Link to post
Share on other sites

jeszcze jakbyś dorobił skrypt rejestracji użytkowników, z pa z opcjami banowania itd. to byłoby super.. oraz wprowadził hasło szyfrowane algorytmem md5 .. ale jest ekstra masz pomysł na następnego tutka ^

Share this post


Link to post
Share on other sites

w polu gdzie przechowujesz hasło daj VERCHAR(32) i zapisuje je jako MD5.

Dobrze zrobiłeś że nie pobierasz hasła do skrypu PHP tylko sprawdzasz je odrazu w MySQL. Poprawia bezpieczeństwo.

Spoktą…łme się jeszcze z opinia żeby zmiast np. NICKa w sesji przechowywać numer id usera gdyż skrypty szybciej działają… operują…c na liczbach niż na tekscie, bo jak wiadomo póxniej opierasz się na tej sesji pobierajac dane z bazy.

Share this post


Link to post
Share on other sites

if($row){
session_name ('NazwaSesji'); // tutaj ustawiamy nazwe sesji
session_set_cookie_params (600, '/', 'www.domena.com.pl); // opisane nizej
session_start();
	$_SESSION['username'] = $row['username'];
	$_SESSION['access'] = $row['access'];
	@header ('Location: admin.php');
}else{
	$message .= '<font class="blad">Błędne hasło lub login</font><br />';
}
mysql_close();
}else{
$message .= '<font class="blad">Spróbuj jeszcze raz</font>';
}
}
?>

 

 

Po sklejałem to do kupy i wyskakuje mi error w tej linni.

 

$_SESSION['username'] = $row['username'];

 

Może ktoś wrzucić mi gdzies gotowy plik albo skopiować tutaj ten kod w całości ?? Jestem początkującym wiec ine krzyczeć :D

Share this post


Link to post
Share on other sites

 

Tworzymy baze danych

 

CREATE TABLE user (
user_id MEDIUMINT(3) unsigned NOT NULL auto_increment,
username VARCHAR(20) NOT NULL,
access VARCHAR(10) NOT NULL,
haslo VARCHAR(60) NOT NULL,
PRIMARY KEY (user_id)
) Type = MyISAM;

Tutaj masz błąd bo powinno być Tworzymy tabelę w bazie danych :)

Share this post


Link to post
Share on other sites

to akurat mi nic nie daje bo sie domyśliłem po create table jeszcze angielski jakoś kumam :D

 

Przypuszczam że jest coś z tym formularzem. Bo kombinuje już na wszytkie sposoby ~~

 

ok teraz stanełem dalej

 

tamten błąd wystepował bo brakowało apostrofu ' tutaj

 

session_set_cookie_params (600, '/', 'www.domena.com.pl); // opisane nize

po domenie powinien byc zamkniety apostrof tak mi sie wydaje ale teraz mam taki błąd

 

 

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\czachor\login.php:2) in c:\usr\krasnal\www\czachor\login.php on line

Share this post


Link to post
Share on other sites

bo w pliku config.php przed <? i ?> nie powinoo byc zadnych spacji i enterów

 

session_set_cookie_params (600, '/', 'www.domena.com.pl); // opisane nize

tak powinien byc sory za pomylke

tam gdzie pisze www.domena.com.pl wpisze localhost i powinno chodzic dodam ze mi chodzi skrytp bez problemu na krasnalu

Share this post


Link to post
Share on other sites

Dzieki za odpowiedz a tam gdzie jest domena.com.pl miałem localhost/~czachor usunełem czachor i pomogło :D chyba to ale zresztą… nie wiem dzieki teraz już sobie dalej poradze :D bo juz reszte na moją… www mam zrobioną… tylko był problem własnie z logowaniem bo nie wiedziałem jak zrobić Wielkie THX

Share this post


Link to post
Share on other sites

a jednak mam problem jeszcze z przerobieniem skryptu lub uruchomieniem go w orginale (ale chyba on na to nie pozwala) jesli mamy w bazie kilku userow. Co nalezy wtedy dokladnie zmienic

Share this post


Link to post
Share on other sites

maja sie logowac userzy i admini tzn potem zaleznie od tgo jakie beda mieli prawa wyswietli sie im rozne menu :) admin bedzie mial dodaj news itp a user bedzie mogl dodawac tylko komentarze i zmieniac informacje w swoim profilu

Share this post


Link to post
Share on other sites

Szczerze mowiac ten skrypt byl pisany po PA ale mozna go tez przerobic dla userow

 

session_name('NazwaSesji'); // Nazwa sesji co podałes przy skrypcie logowania
session_start();
if( !isset($_SESSION['username'])){
	@header ('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .  '/index.php');
}

to dla zwyklych userow

 

a dla adminstratorow oczywiscie to dla PA

session_name('NazwaSesji'); // Nazwa sesji co podałes przy skrypcie logowania
session_start();
if( $_SESSION['access'] != 'root' ){
	@header ('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .  '/index.php');
}

nie wiem czy o takie cos ci chodzi

 

jak cos napisz na PW moze cos sie zrobi

 

skrypt ten wykorzystalem na : www.bazafilmow.yoyo.pl i chodzi bez problemu..

Share this post


Link to post
Share on other sites

k problem lezał gdzie indziej w złym dodawaniu userów i dlatego wyskakiwał bład. Skrypt odpowiedzialny za to dodają…c usera nie szyfrował jego hasła ~~ sry za kłopot

Share this post


Link to post
Share on other sites

Witam, mi jakoś to niedziała, gdy zmieniam nazwy tabel na inne to pisze "Spróbuj jeszcze raz"

 

Kod strony:

 

<?php
polacz();
echo "<title>$sitetitle -=$login[$lang]=-</title>";
$pagename = "$login[$lang]";
?>
<?php if($zalogowany == "0") { echo "<form action=\"index.php?p=login&lang=$lang&zalogowany=1\" method=\"post\">";?>
<input type="hidden" name="submit">
<?php echo "$user[$lang]";?>: <input type="text" name="login" maxlength="32"><br>
<?php echo "$pass[$lang]";?>:           <input type="password" name="u_password" maxlength="8"><br>
<input type="submit" value="Zaloguj">
</form>
<?php
}
if (isset($_POST['submit'])){

if (empty($_POST['login'])){
	echo '<font class="blad">Nie podałeś loginu</font><br />';
	$l = FALSE;
}else{
	$l = usun($_POST['login']);
}

if (empty($_POST['u_password'])){
	echo '<font class="blad">Nie podałeś hasła</font><br />';
	$h = FALSE;
}else{
	$h = usun($_POST['u_password']);
}

if ( $l && $h ){

$query = "SELECT u_username, u_access FROM user WHERE u_username='$l' AND u_password=password('$h')";
$result = mysql_query($query);
$row = mysql_fetch_array ($result, MYSQL_ASSOC);

if($row){
session_name ('jakassesja'); // tutaj ustawiamy nazwe sesji
session_set_cookie_params (600, '/', 'uzytkownik'); // opisane nizej
session_start();
	$_SESSION['u_username'] = $row['u_username'];
	$_SESSION['u_access'] = $row['u_access'];
	@header ('Location: admin.php'); // przekierowuje nas na jaka strone chcemy
}else{
	echo '<font class="blad">Błędne hasło lub login</font><br />';
}
mysql_close();
}else{
echo '<font class="blad">Spróbuj jeszcze raz</font>';
}
}
?>

 

A oto moja tabela (export):

 

CREATE TABLE `users` (
 `u_id` int(11) NOT NULL auto_increment,
 `u_name` varchar(32) NOT NULL default '',
 `u_password` varchar(40) NOT NULL default '',
 `u_email` varchar(64) NOT NULL default '',
 `u_activation_key` varchar(40) NOT NULL default '',
 `u_active` int(1) NOT NULL default '0',
 PRIMARY KEY  (`u_id`)
) TYPE=MyISAM AUTO_INCREMENT=7;

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...