20. PHP – logowanie


Login: admin

Hasło: admin

baza ->baza_cms

-- phpMyAdmin SQL Dump
-- version 5.1.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Czas generowania: 01 Mar 2022, 12:53
-- Wersja serwera: 10.4.21-MariaDB
-- Wersja PHP: 8.0.10
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Baza danych: `baza_cms`
--
-- --------------------------------------------------------
--
-- Struktura tabeli dla tabeli `users`
--
CREATE TABLE `users` (
  `id` int(6) NOT NULL,
  `login` varchar(255) NOT NULL,
  `pass` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Zrzut danych tabeli `users`
--
INSERT INTO `users` (`id`, `login`, `pass`) VALUES
(1, 'admin', '$2y$10$Y1U9pwLzteMGAwvMHMXGGe.h3zMiTR2lKqYAzBKSQtytThGHZJASW');
--
-- Indeksy dla zrzutów tabel
--
--
-- Indeksy dla tabeli `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT dla zrzuconych tabel
--
--
-- AUTO_INCREMENT dla tabeli `users`
--
ALTER TABLE `users`
  MODIFY `id` int(6) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

conn_data.php

<?php
$serwer='localhost'; //127.0.0.1  
$user='root';
$pass='';
$baza='baza_cms';
//łączenie z bazą
mysqli_report(MYSQLI_REPORT_OFF);
$db = @new mysqli($serwer, $user, $pass, $baza); //podejście obiektowe - korzystamy z klasy PHP o nazwie mysqli
conn_close.php
<?php
$db->close(); //zamykamy połączenie
?>

index.php

<?php
#login:admin
#hasło:admin

session_start();

include_once('conn_data.php');
//sprawdzamy czy się łączy w podejściu obiektowym
if ($db->connect_error) {
    die('Błąd połączenia: ' . $db->connect_error);
} else {
    if (!isset($_POST['logowanie'])) {echo 'zaloguj się<br>'; $msg='';}
    else
    {
        $msg='';
        $login=htmlspecialchars(trim($_POST['login']));
        $haslo=htmlspecialchars(trim($_POST['haslo']));
        if (empty($login) || empty($haslo))
        {
            $msg='Brak loginu lub hasła!';
        }
        else
        {
            $sql="SELECT * FROM `users` WHERE `login` = ?";
            $stmt = $db->prepare($sql);    
            $stmt->bind_param("s", $login);
            $stmt->execute();
            $wynik = $stmt->get_result();
            $ile_znaleziono = $wynik->num_rows;
           
            if ($ile_znaleziono>0) {
                $kolumna=$wynik->fetch_array();
                if(password_verify($haslo,$kolumna['pass'])){
                    $_SESSION['msg']='Jesteś zalogowany';
                    $_SESSION['witaj']=$login;
                    header("location: main.php");
                }  
                else { $msg='Podałeś błedne hasło!';}          
            }
            else { $msg='Nie ma w bazie użytkownika o takim loginie!';}        
        }      
    }  
}    
include_once('conn_close.php');
?>

<!DOCTYPE html>
<html>
<head>
    <title>Moja strona</title>
    <meta charset="UTF-8">  
</head>
<body>  
    <form method="post" action="">
        <span style="color: red;"><?=$msg;?></span>    
        <input type="text" name="login">
        <input type="password" name="haslo">
        <button type="submit" name="logowanie">Loguj
    </form>
</body>
</html>

main.php

<?php
session_start();
if($_SESSION['witaj']){
    echo 'Witaj: '.$_SESSION['witaj'].'<br>';
    if (isset($_GET['wyloguj'])) {
        session_destroy();
        header("location: index.php");
    }
    echo "<a href=\"?wyloguj\">wyloguj</a>";
}else{
    header("location: index.php");
}