Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Panel administratora


Rekomendowane odpowiedzi

Opublikowano

To znowu ja !

Tym razem z tutorialem ! :>

Co przedstawie/naucze w tym tutorialu ?

1. Co to jest pole ENUM i w czym można je wykorzystać

2. System newsów

3. Dodawanie/usuwanie administratora/bana

---------------------------------------------------

Zaczynamy !

Tworzymy plik connection.php

W nim nawiązujemy połączenie z bazą danych oraz jej wyborem.

Ten plik będzie includowany

 

<?php
mysql_connect("localhost","root","");
mysql_select_db("Twoja_baza_danych");
?>

mysql_connect - Przyjmuje 3 argumenty.

1. Argument : Z jakim serwerem ma się połączyć

2. Argument : Z jakim użytkownikiem

3. Argument : Hasło (Opcjonalnie,nie wymagane na localhost'cie)

mysql_select_db - Przyjmuje 1 argument

1. Argument : Z jaką baza danych pracujemy

include - przyjmuje 1 argument

Na mój rozum. Dołaczamy plik.

--------------------------------------------------

login.php

 

<?php
session_start();
include("connection.php");
ob_start();
if (($_POST['login']!='') && ($_POST['haslo'])!=''){

$login=$_POST['login'];
$haslo=md5($_POST['haslo']);


$wynik=mysql_query("SELECT * FROM users WHERE login='$login' LIMIT 1");
if (mysql_num_rows($wynik)===1){
$dane=mysql_fetch_assoc($wynik);
if (md5($haslo)===$dane['password']){
$_SESSION['id']=$dane['id'];
$_SESSION['login']=$dane['login'];
header('Location: start.php');
}
else {
echo '<BR>bledne haslo';
}

}
else {
echo '<br>nie istnieje takie konto';
}


}
?>

 

 

Przyznaje się bez bicia. Logowanie jest skopiowane od użytkownika KarerPL. Takie logowanie jest dla mnie najlepsze ze wzgledów:

1. Przypisuje ID i Login

2. Łatwe w edycji

3. Proste

Bnmbb znany również jako kongo ,uczył mnie ,że nie warto tracić czas na sesje.

---------------------------------------------

Pole typu "Enum"w mysql.

Na mój rozum. To pole może mieć kilka stałych wartości czyli np. Tylko TAK i NIE.

Wykorzystać mozemy do :

Admina i banowania,akceptowania zgłoszeń itp.

Pewnie można do większej ilości rzeczy ,ale ja mogę o tym nie wiedzieć.

Jeżeli dodajemy do mysql to :

Nazwa pola,Typ pola Enum,Wartość :

'TAK','NIE',...

Możemy tak ustalać ilość wartosci.

-------------------------------------------

A teraz praktyka.

Mamy łączenie się z bazą danych oraz logowanie.

Tworzymy plik start.php

 

<?php
session_start(); // przedłużamy sesje
ob_start(); // włączamy bufor przekierowujacy
include("connection.php"); // dodajemy plik związany z połączeniem
// teraz pobierzemy dane czy posiada admina.
$danes = mysql_query("SELECT `admin` FROM `Users` WHERE login='$_SESSION[login]'");
$dane= mysql_fetch_array($danes);
/*
Pierwsze zapytanie $danes ,wypisujemy informacje o adminie gdzie login to zmienna globalna sesyjna $_SESSION
Drugie zapytanie pobiera tablice
*/
if($dane['admin']=="TAK") // sprawdzamy czy ma admina
{
echo '<a href="panel.php">Panel Admina </a> '; // jeśli ma admina ,to pokazuje mi link do panelu.
}
else {
echo ' Nie masz admina';
}
?>

Teraz panel.php

 

 

<?php
session_start();
ob_start();
include("connection.php"); // podstawowe bufory i wczytanie connecta
$daness = mysql_query("SELECT `admin` FROM `Users` WHERE login='$_SESSION[login]'");
$danes = mysql_fetch_array($daness); // pobieramy informacje czy posiada admina
if($danes['admin']=="TAK") // sprawdzamy czy osoba ma admina.to jest coś w stylu zabezpieczenia
{
echo 'Co chcesz robić ? </br> ';
echo '<a href="panel.php?zbanuj"> Zbanuj gracza ! </a> </br>';
echo '<a href="panel.php?odbanuj"> Odbanuj gracza ! </a> </br>';
echo '<a href="panel.php?dodaj"> Dodaj newsa ! </a> </br>';
echo '<a href="panel.php?usun"> Usuń newsa ! </a> </br>';
echo '<a href="panel.php?admin"> Dodaj admina ! </a> </br>';
echo '<a href="panel.php?usunadmina"> Usun admina ! </a> </br>'; // odpowiednie akcje. Zamiast tworzyć nowe pliki i zajmować sobie miejsce lepiej wszystko mieć w jednym pliku , co nie  ?
if(isset($_GET['zbanuj'])) // i teraz zabawa z getem. To coś co banuje
{
$gracz = $_POST['gracz']; // pobieramy informacje o graczu z input'a
echo '<form name="input" action="" method="post">
Login: <input type="text" size="50" name="login" /><br>
<input type="submit" value="Zbanuj !" />
</form>';
mysql_query("UPDATE `users` SET ban='TAK' WHERE login='$gracz'");
} // wykonujemy zapytanie które zamienia pole BAN domyślnie NIE na TAK
if(isset($_GET['odbanuj'])) // Jeśli zostało wciśnięte odbanuj to wykonuje akcje
{
$kto = $_POST['kto'];
echo
' <form name="input" action="" method="post">
login: <input type="text" size="50" name="login" /><br>
<input type="submit" value="Odbanuj !" />
</form>';

mysql_query("UPDATE `users` SET ban='NIE' WHERE login='$kto'"); // zapytanie które zamienia ban TAK na ban NIE

}
if(isset($_GET['dodaj'])) // system newsów
{
$tytul = $_POST['tytul']; // pobieramy tytul
$tresc = $_POST['tresc']; // pobieramy tresc
$data = date("Y-m-d"); // pobieramy date
$autor = $_SESSION['login']; // pobieramy login
$ip = $_SERVER['REMOTE_ADDR']; // pobieramy ip
echo ' <form name="input" action="" method="post">
Tytul: <input type="text" size="50" name="tytul" /><br>
Tresc: <input type="text" name="tresc" /><br>
<input type="submit" value="Dodaj newsa !" />
</form>';
mysql_query("INSERT INTO `newsy` (`id`,`tytul`,`tresc`,`data`,`autor`,`ip`)
VALUES (``,`$tytul`,`$tresc`,`$data`,`$autor`,`$ip`"); // Dodajemy wszystkie pola.

}
if(isset($_GET['usun'])) // usuwanie newsów
{
$id = $_POST['id'];
echo 'Pamietaj ! usuwasz po id !';
echo ' <form name="input" action="" method="post">
login: <input type="text" name="id" /><br>
<input type="submit" value="Usun newsa skurwielu :<" />
</form>';
mysql_query("DELETE FROM `newsy` WHERE `id`='$id'"); // zapytanie które usuwa newsa

}
if(isset($_GET['admin'])) // dodawanie adminów
{
$admin = $_POST['admin'];
echo ' <form name="input" action="" method="post">
Login: <input type="text" name="admin" /><br>
<input type="submit" value="Dodaj admina !" />
</form>';
mysql_query("UPDATE `users` SET `admin`='TAK' WHERE `login`='$admin'"); // zamiana domyślnie admin NIE na TAK

}
if(isset($_GET['usunadmina'])) // usuwa admina
{
$usunadmina = $_POST['usunadmina'];
echo ' <form name="input" action="" method="post">
login: <input type="text" name="usunadmina" /><br>
<input type="submit" value="Usun Admina" />
</form>';
mysql_query("UPDATE `users` SET `admin`='NIE' WHERE `login`='$usunadmina'"); // zapytanie któe usuwa admina. Zmienia z TAK na NIE

}
}
else {
header("Location: start.php"); // Jeżeli nie ma admina przekierowuje na start.php
}

?>

 

Okay. Dodaje bany ,newsy .

Teraz pora na sprawdzanie czy ma bana.

Wchodzimy jeszcze raz do pliku start.php i dodajemy

 

<?php
session_start(); // przedłużamy sesje
ob_start(); // włączamy bufor przekierowujacy
include("connection.php"); // dodajemy plik związany z połączeniem
$sprawdzz = mysql_query("SELECT `ban` FROM `users` WHERE `id`='$_SESSION[id]");
$sprawdz = mysql_fetch_array($sprawdzz); // sprawdza czy ma bana
if($sprawdz['ban']='TAK')
{
header("Location: logout.php");
}
else {
// teraz pobierzemy dane czy posiada admina.
$danes = mysql_query("SELECT `admin` FROM `Users` WHERE login='$_SESSION[login]'");
$dane= mysql_fetch_array($danes);
/*
Pierwsze zapytanie $danes ,wypisujemy informacje o adminie gdzie login to zmienna globalna sesyjna $_SESSION
Drugie zapytanie pobiera tablice
*/
if($dane['admin']=="TAK") // sprawdzamy czy ma admina
{
echo '<a href="panel.php">Panel Admina </a> '; // jeśli ma admina ,to pokazuje mi link do panelu.
}
else {
echo ' Nie masz admina';
}
}
?>

if($sprawdz['ban']='TAK') = sprawdzamy czy ma bana jeśli ma ,to za pomocą header'a przekierowuje do wylogowania.

--------------------------------

Dump z PMA

 

 

-- phpMyAdmin SQL Dump

-- version 2.11.4

-- http://www.phpmyadmin.net

--

-- Host: localhost

-- Czas wygenerowania: 09 Cze 2012, 16:21

-- Wersja serwera: 5.0.45

-- Wersja PHP: 5.2.5

 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

 

--

-- Baza danych: `gra`

--

 

-- --------------------------------------------------------

 

--

-- Struktura tabeli dla `newsy`

--

 

CREATE TABLE `newsy` (

`id` int(11) NOT NULL auto_increment,

`tytul` varchar(255) NOT NULL,

`tresc` text NOT NULL,

`data` varchar(50) NOT NULL,

`autor` varchar(16) NOT NULL,

`ip` varchar(32) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;

 

--

-- Zrzut danych tabeli `newsy`

--

 

 

-- --------------------------------------------------------

 

--

-- Struktura tabeli dla `users`

--

 

CREATE TABLE `users` (

`id` int(11) NOT NULL auto_increment,

`login` char(16) NOT NULL,

`password` char(32) NOT NULL,

`email` char(100) NOT NULL,

`ip` int(11) NOT NULL,

`data` varchar(100) NOT NULL,

`admin` enum('TAK','NIE') NOT NULL default 'NIE',

`ban` enum('TAK','NIE') NOT NULL default 'NIE',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=3 ;

 

--

-- Zrzut danych tabeli `users`

--

 

INSERT INTO `users` (`id`, `login`, `password`, `email`, `ip`, `data`, `admin`, `ban`) VALUES

(1, 'amedos', 'ca58c06e0e3a4eb3a212071287b2e940', 'amedos', 0, 'amedos', 'TAK', 'NIE'),

(2, 'sodema', 'd9a01409f46412b5c7dda99e6d3c0764', 'sodema', 0, 'sodema', 'NIE', 'NIE');

 

 

I to na tyle.

jeżeli jakiś kod nie zadziała,piszcie tutaj. Postaram się poprawić.

Przyjmuje zlecenia dot. web masterki.

while(!$success){
....try();
}

 

Opublikowano

if (($_POST['login']!='') && ($_POST['haslo'])!=''){

$login=$_POST['login'];
$haslo=$_POST['haslo'];


$wynik=mysql_query("SELECT * FROM users WHERE login='$login' LIMIT 1");

!!!!!!!!!!!!!!!!!!!!

Opublikowano

Póki co piszę grę na localhoście,więc nie wiem po co mam zabezpieczać ;)

O czym napisać następny tutorial ?

Przyjmuje zlecenia dot. web masterki.

while(!$success){
....try();
}

 

Opublikowano
Tym razem z tutorialem ! :>

Co przedstawie/naucze w tym tutorialu ?

Póki co piszę grę na localhoście,więc nie wiem po co mam zabezpieczać ;)

Jeżeli coś robisz to rób to przynajmniej przyzwoicie, "tutoriali" do tyłka jak i dziurawych silników w internecie są tysiące.. : )

Opublikowano

Źle zrozumiałeś.

Piszę gre na localhoście,ale to co zrobię dzielę się tym z Wami.

Oczywiście jeżeli takiego czegoś nie było na mpc.

Przyjmuje zlecenia dot. web masterki.

while(!$success){
....try();
}

 

Opublikowano

Ale jak to ma się do tego, że wrzuciłeś tutorial z dziurawym kodem? Chciałeś pokazać możliwości tego? Przykład działania? Bez sensu.

Wrzuć tam chociaż jakieś podstawy + solenie hasła (

 $cos = md5('mójsupertajnystring'.$cos.'98ukjasd94');

).

Opublikowano

Widze Scolari, strasznie się czepiasz. Na co komu dodawać niepotrzebne stringi skoro i tak hasła zakodowanego 2 razy NIE DA się odkodować -.-?

 

Także polecam zrobić taką zmienną:

 

$haslo = md5(sha1($_POST['haslo']));

 

Praktycznie nie da się złamać tego hasła ;) Ale nie jestem pewien.

Opublikowano

Widze Scolari, strasznie się czepiasz. Na co komu dodawać niepotrzebne stringi skoro i tak hasła zakodowanego 2 razy NIE DA się odkodować -.-?

Poczytaj dlaczego niemiecka Enigma została złamana, o ile mnie pamięć nie myli jednym z powodów było przeświadczenie niemieckich techników, że znacznie lepiej powtórzyć dwukrotnie kompresję niż wykonać ją jeden raz. Czysty hash znacznie zwiększa szansę wykorzystania RainbowTables - sól (o ile nie zostanie wykradnięta) zwiększa bezpieczeństwo. Dodatkowo, sam MD5 jest stratny - zagnieżdanie jakiegokolwiek hasha jest nieopłacalne, gdyż zwiększa stratę informacji a co za tym idzie zwiększa szansę na kolizję.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...