Можели логин система

СИСТЕМА С БАЗА ДАННИ.



СИСТЕМАТА НЕ Е ТЕСТВАНА ... СЪТВОРИХ Е НА ЕДИН ПЪТ. ЗА ТОВА СА ВЪЗМОЖНИ ГРЕШКИ, НО ЩЕ ДА СА ДРЕБНИ И ЛЕСНО ОТСТРАНИМИ.

СИСТЕМАТА Е МАКСИМАЛНО ОПРОСТЕНА, ВЪВЕДЕНИ СА ОСНОВНИ ЗАЩИТИ ПРОТИВ SQL INJECTION И XSS.


РАЗГЛЕДАЙТЕ КОДА ХУБАВО !



РЕГИСТРАЦИЯ С БАЗА ДАННИ:


НАПРАВЕТЕ ФАЙЛ register.php


[sql]

Направи базза данни с име " weblogin "

В нея таблица с име " tablelogin "

В нея 3 полета "id " " ime " и " "pass".

Това изглежда така:

1. weblogin
1.1 tablelogin
1.2 id, ime, pass

Сега на ID в базата данни му задаваш auto_increment или a_I трябва да пише при създаване на полето. Всъщо така му слагаш " primary index ".

На полето " ime " слагаш varchar с стойност 80.
На полето " pass " слагаш varchar с стойност 80.



Записваш и мисля, че си готов.

[/sql]



PHP:
session_start();
if($_SESSION['logged']==true) {
header('Location: index.php');
exit;
}
else {
if(isset($_POST['submit']) {

$error=array();

$name=htmlspecialchars(addslashes($_POST['user']));
$pass=md5($_PSOT['pass']);
$passr=md5($_PSOT['passr']);

if(strlen($name)<1) {
 $error['1']=true;
} 

if(strlen($pass)<1) {
 $error['2']=true;
} 

if(strlen($passr)<1){
  $error['3']=true;
}

if($pass!=$passr){
  $error['4']=true;
}

$conn=mysql_connect("localhost","my_name","my_password");
  if($conn){
    $inrow=mysql_query("SELECT ime FROM weblogin.tablelogin WHERE ime='$name'");
if($inrow) {

    if(mysql_num_rows($inrow['ime'])>0)
     $error['5']=true;
mysql_close();
  }
}

if($error[]>0){
  if($error['1']==true){echo"Кратко име<br>";}
  if($error['2']==true){echo"Кратка парола<br>";}
  if($error['3']==true){echo"Кратка парола<br>";}
  if($error['4']==true){echo"Паролите не са еднакви<br>";}
 if($error['5']==true){echo"Името е заето<br>";}
}
else {
  $con=mysql_connect("localhost","my_name","my_password");
  if($con){
    $inrow=mysql_query("INSERT INTO weblogin.tablelogin (ime, pass) VALUES ('$name', '$pass') ");
  if($inrow){
     mysql_close();
   header('Location: index.php');
   exit;
}
    
       }

    }
}



?>

<action="register.php" method="POST">
Username: <input type="text" name="user" />
Password: <input type="password" name="pass" />
Password2: <input type="password" name="passr" />
<input type="submit" value="Submit" />
</form>
<?php } ?>



ФОРМА ЗА ЛОГИН:

НАПРАВЕТЕ ФАЙЛ login.php


PHP:
session_start();
if($_SESSION['logged']==true) {


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

$name=htmlspecialchars(addslashes($_POST['user']));
$pass=md5($_POST['pass']);

$con=mysql_connect("localhost","my_name","my_password");
  if($con){
    $inrow=mysql_query("SELECT ime,pass FROM weblogin.tablelogin WHERE ime='$name' AND pass='$pass' ");
if($inrow) {

    if(mysql_num_rows($inrow['ime'])==1 && mysql_num_rows( $inrow['pass'])==1) {
mysql_close();
    $_SESSION['logged']=true;
     header('Location: index.php');
    exit;
  }
else {echo 'Грешно име или парола';}
 }
}

}





?>

<action="login.php" method="POST">
Username: <input type="text" name="user" />
Password: <input type="password" name="pass" />
<input type="submit" value="Submit" />
</form>
<?php } ?>

Главен файл.

НАПРАВЕТЕ ФАЙЛ index.php


PHP:
session_start();

if($_SESSION['logged']==true) {
 echo 'Влязохте успешно в системата.';
echo '<a href='#'>Моят профил</a>';
}
else {
echo 'моля логнете се за да използвате сайта.';
}
 
@eddyy93 какво е това чудо бе ? Направо се чудех коя глупост по-напред да гледам.
Как ще затваряш първо mysql линка, че след това ще се мъчиш да викаш други функции?

Не виждам да е защитен от нищо :X
 
Редактирано е. Защитено е. htmlspecialchars and addslashes and md5 има. Още в началото като на променливите се присвоява $_POST.
 
eddyy93 каза:
Редактирано е. Защитено е. htmlspecialchars and addslashes and md5 има. Още в началото като на променливите се присвоява $_POST.

Значи си защитен ? Добре.
 
Не, писал съм :

Код:
ВЪВЕДЕНИ СА ОСНОВНИ ЗАЩИТИ ПРОТИВ SQL INJECTION И XSS.

Той вече да си прави някакви регулярни изрази и при име да се въвеждат само букви и числа и това е. При password си има md5, за това там няма значение какво ще въведе потребитела.
 
В заявката не виждам нищо грешно ...

но num_rows трябва да стане:

PHP:
if(mysql_num_rows($inrow)>0) {

}

А сега видях на формата за логин и регистър трябва на sumbit бутона да се сложи

name="submit"
 
Това нещо:

if($error[]>0)

трябва да е:

if(count($error)>0)


СЪЩО ПРИ БАЗАТА ДАННИ " id " ТРЯБВА ДА ГО НАПРАВИШ INT(50)
 

Back
Горе