System logowania php - mały problem

0

Witam, po kliknięciu przycisku zalogowania włącza się po prostu biała strona w pliku LOGIN.PHP. Oto kody plików, będę wdzięczny za pomoc.

login.php

<?php
    session_start(); // rozpoczęcie sesji
     
    if (!isset($_SESSION['login'])) { // dostęp dla niezalogowanego użytkownika
     
        if ($_POST['login-form']) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
     
            include 'connection.php'; // połączenie się z bazą danych
            $tabela = 'lista'; // zdefiniowanie tabeli MySQL
     
            $login = $_POST["login"];
            $haslo = $_POST["haslo"];
     
            $haslo = md5($haslo); // szyfrowanie podanego hasła
     
            $wynik=mysql_query("SELECT * FROM $tabela WHERE
           nick='$login' and haslo='$haslo' and status=0");
     
            // jeżeli użytkownik zarejestrował się, a nie aktywował swojego konta, to wyświetla się komunikat
            if (mysql_num_rows($wynik) == 1) {
                $informacja = mysql_fetch_array($wynik);
                echo '<p>Nie aktywowałeś jeszcze swojego konta. Aby to zrobić, wejdź w swoją skrzynkę odbiorczą, a następnie znajdź wiadmość z linkiem aktywacyjnym i aktywuj swoje konto</p>';
                exit;
            }
     
            // jeżeli wszystko jest dobrze, użytkownik się loguje
            $wynik=mysql_query("SELECT * FROM $tabela WHERE
           nick='$login' and haslo='$haslo' and status=1");
     
            if (mysql_num_rows($wynik) == 1) {
                $informacja = mysql_fetch_array($wynik);
                $_SESSION["login"] = $informacja["login"];
                header('Location: tajne.php ');
            } else {
                echo '<p>Zostały wprowadzone nieprawidłowe dane</p>';
            }
		}
	}
?>

Tabela 'lista' w MySQL

user image

A tutaj formularz logowania:

<form name="login-form" class="login-form" action="login.php" method="post">

	<!--HEADER-->
    <div class="header">
    <!--TITLE--><h1>Logowanie</h1><!--END TITLE-->
    <!--DESCRIPTION--><span>Wpisz adres email i hasło, aby przejść do panelu użytkownika.</span><!--END DESCRIPTION-->
    </div>
    <!--END HEADER-->

	<!--CONTENT-->
    <div class="content">
	<!--USERNAME--><input name="login" type="text" class="input username" value="Nick" onfocus="this.value=''" /><!--END USERNAME-->
    <!--PASSWORD--><input name="haslo" type="password" class="input password" value="Hasło" onfocus="this.value=''" /><!--END PASSWORD-->
    </div>
    <!--END CONTENT-->

    <!--FOOTER-->
    <div class="footer">
    <!--LOGIN BUTTON--><input type="submit" name="submit" value="Login" class="button" /><!--END LOGIN BUTTON-->
    </div>
    <!--END FOOTER-->

</form>

Jeśli potrzebne są jeszcze inne dane to prosze napisać.
Zaznaczam, że jestem poczatkujący w PHP

zamiana znacznika <code class="ini"> na <code class="html"> - fp

0
  1. Co jest w tajne.php, connection.php
  2. Podatne na SQL Injection
  3. Brak optymalizacji, po co wykonywać 2 zapytania jak można jedno.
  4. Korzystaj z modułu MySQLi mysql jest przestarzały!
  5. Oducz się nazywanie zmiennych polskimi słowami, wyobraź sobie kod pisany przez Rosjanina zachowującego się jak ty.
  6. Sprawdź konfiguracje PHP pod kątem wyświetlania błędów, bo możesz mieć je całkowicie wyłączone.
0

connection.php

<?php
function connection() {
        // host
        $mysql_host = "localhost";
        // user
        $mysql_user = "*******";
        // hasło
        $mysql_pass = "*******";
        // nazwa bazy
        $mysql_db = "********";
        // nawiązujemy połączenie z serwerem MySQL
        @mysql_connect($mysql_host, $mysql_user, $mysql_pass)
        or die('Brak połączenia z serwerem MySQL.');
		  mysql_query("set names 'utf8'");
        // łączymy się z bazą danych
        @mysql_select_db($mysql_db)
        or die('Błąd wyboru bazy danych.');
}

?>

tajne.php

<?php include("connection.php");
$nick = $_SESSION['login'];
$haslo = $_SESSION['haslo'];
    if ((empty($nick)) AND (empty($haslo))) {
echo '<br>Nie byłeś zalogowany albo zostałeś wylogowany<br><a href="index.php">Strona Główna</a><br>';
exit;
}
$user = mysql_fetch_array(mysql_query("SELECT * FROM lista WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
    if (empty($user[id]) OR !isset($user[id])) {
echo '<br>Nieprawidłowe logowanie.<br>';
exit;
}
// tresc dla zalogowanego uzytkownika
echo 'Witaj '.$user[login].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';
?>
  1. Jak można się przed tym zabezpieczyć?
  2. Przepraszam, jestem początkujący, możesz mnie jakoś naprowadzić?
  3. Co do MySQLi to nie wiem czy jest sens się w to bawić, skoro to i tak nie będzie zbyt zaawansowana aplikacja internetowa.
  4. Tutaj masz rację, poprawię się.
  5. Jak to zrobić? Jeszcze raz zaznaczam, że dopiero zaczynam z PHP, aczkolwiek parę malych projektów bez MySQL mam za soba. Teraz uczę się MySQL i są już problemy..

Dziekuję

0
  1. http://pl.wikipedia.org/wiki/SQL_injection
  2. Jest sens bo to PODSTAWA!
  3. Plik php.ini znajdź error_reporting i ustaw na E_ALL | E_STRICT
  4. Tak mniej-więcej to powinno wyglądać.
$query=mysql_query("SELECT * FROM $tableUsers WHERE login='$login' AND haslo='$pass'")or die(mysql_error());
   $r=mysql_fetch_array($query);
   if($r['id']<0){
    echo 'Błędne dane logowania';
   }else if($r['status']==0){
    echo 'Nie aktywowano konta';
....

Ogół:
Co do reszty to polecam Ci zacząć od nowa wszystko bo zrobiłeś masę podstawowych błędów a prościej będzie napisać od nowa niż poprawiać to...
Bark inicjacji connection(), w tabeli nie ma pola status, brak inicjacji sesji w tajne.php, i wiele innych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1