
W tym poradniku pokaże jak stworzyć prostą rejestrację oraz logowanie do niej.
Komentarze znajdą się poniżej każdego skryptu
A więc zacznijmy od napisania skryptów php
config.php
- Kod: Zaznacz wszystko
$db=new mysqli("localhost","user","haslo","baza");
if(mysqli_connect_errno()!=0)
{
die("Chwilowy błąd proszę spróbować za chwilę,jeśli błąd się powtarza proszę skontaktować się z Administratorem strony");
}
Komentarza do pliku config.php
- Kod: Zaznacz wszystko
$db=new mysqli("localhost","user","haslo","baza");
Kod ten nie robi nic innego jak łączy się z bazą danych poprzez mysqli (jest to klasa do MYSQL) dostępny od PHP5
rejestracja.php
- Kod: Zaznacz wszystko
<?php
include("config.php");
if(isset($_POST['login']) && isset($_POST['pass']) && isset($_POST['repass']) && isset($_POST['mail']) && isset($_POST['remail']))
{
if($_POST['pass']==$_POST['repass'] && $_POST['mail']==$_POST['remail'] && is_email($_POST['mai']) && strlen($_POST['login'])>3 && strlen($_POST['login'])<30 )
{
$login=htmlspecialchars($_POST['login']);
$pass=md5($_POST['pass'].$login);
$mail=htmlspecialchars($_POST['mail']);
if(!$db->query("SELECT id FROM users WHERE login='$login'")
{
$db->query("INSERT INTO users(id,login,pass,mail) VALUES ('','$login','$pass','$mail')")
echo "Twoja rejestracja zakończyła się powodzeniem, możesz się już zalogować<br/><br/><br/>";
}
else
echo "Przykro mi ale taki login jest już zajęty<br/><br/>";
}
else
echo "Podane hasła lub e mail'e nie są takie same lub e-mail jest niepoprawny bądź login ma więcej niż 30 znaków lub ma mniej niż 3 znaki<br/><br/>";
}
$db->close();
?>
<html>
<body>
Formularz Rejestracyjny:<br/>
<form action="" method="post">
Login(min 3 znaki, max 30 znaków):<br/>
<input type="text" name="login" /><br/>
Hasło:<br/>
<input type="password" name="pass" /><br/>
Powtórz hasło:<br/>
<input type="password" name="repass" /><br/>
E-Mail:<br/>
<input type="text" name="mail" /><br/>
Powtórz E-Mail:<br/>
<input type="text" name="remail" /><br/><br/>
<input type="submit" value="Rejestruj" />
</form>
</body>
</html>
Komentarze do rejestracja.php:
Formularza do rejestracji nie będę tłumaczył zajmę się tylko php,
- Kod: Zaznacz wszystko
include("config.php");
Kod ten dodaje cofnig.php do aktualnego pliku
- Kod: Zaznacz wszystko
if(isset($_POST['login']) && isset($_POST['pass']) && isset($_POST['repass']) && isset($_POST['mail']) && isset($_POST['remail']))
IF (a dokładniej funkcja isset() ) ten sprawdza czy istnieją takie zmienne (czyli czy formularz został wysłany), zmienną jest nawet pusty ciąg.
- Kod: Zaznacz wszystko
if($_POST['pass']==$_POST['repass'] && $_POST['mail']==$_POST['remail'] && is_email($_POST['mai']) && strlen($_POST['login'])>2 && strlen($_POST['login'])<31 )
Dopiero ten IF sprawdza poprawność wprowadzonych danych, to jest sprawdza czy hasła są takie same oraz czy e maile są takie same
Następnie jest wywoływana funkcja (is_mail() ) która sprawdza poprawność maila, a na koniec sprawdzane jest czy login ma więcej znaków niż 2 i mniej niż 31 (czyli przedział od 3 do 30).
- Kod: Zaznacz wszystko
$login=htmlspecialchars($_POST['login']);
Przypisanie danych z POST do zmiennej oraz zmiana specjalnych znaków (takich jak < > itp).
- Kod: Zaznacz wszystko
$pass=md5($_POST['pass'].$login);
Zakodowanie hasła za pomocą funkcji md5 (hasło ma dodane tak zwane salt, w tym wypadku jest to login)
- Kod: Zaznacz wszystko
if(!$db->query("SELECT id FROM users WHERE login='$login'")
Ten IF sprawdza czy nie istnieje taki login w bazie
- Kod: Zaznacz wszystko
$db->query("INSERT INTO users(id,login,pass,mail) VALUES ('','$login','$pass','$mail')");
Dodanie wpisu do Bazy danych
- Kod: Zaznacz wszystko
$db->close();
Zamyka połączenie z bazą
Teraz zajmiemy się plikiem login.php
login.php
- Kod: Zaznacz wszystko
<?php
session_start();
include("config.php");
if(isset($_POST['login']) && isset($_POST['pass']))
{
$login=htmlspecialchars($_POST['login']);
$pass=md5($_POST['pass'].$login);
if($db->query("SELECT id,login FROM users WHERE login='$login'")
{
while($row = $this->result->fetch_object())
{
$_SESSION['login']=$row->login;
$_SESSION['id']=$row->id;
}
}
else
echo "Przykro mi ale taki login jest już zajęty<br/><br/>";
}
$db->close();
?>
<html>
<body>
Formularz Logowania:<br/>
<form action="" method="post">
Login:<br/>
<input type="text" name="login" /><br/>
Hasło:<br/>
<input type="password" name="pass" /><br/>
<input type="submit" value="Loguj" />
</form>
</body>
</html>
Komentarz do pliku login.php
Napiszę tutaj tylko komentarz do tego co nie wystąpiło wcześniej
- Kod: Zaznacz wszystko
session_start();
session_start jak sama nazwa mówi zaczyna sesję (nadaje unikalny kod dla sesji który jest zapisywany w katalog tmp (domyślnie)) stworzona sesja jest aktualnie pusta lecz dzięki temu możemy na niej operować, następne wywołanie tej komendy pozwoli podtrzymać aktualną sesję.
Funkcja ta musi być wywoływana na samym początku pliku (druga linijka, gdyż pierwsza to <? lub <?php)
- Kod: Zaznacz wszystko
while($row = $this->result->fetch_object())
linijka ta pobiera dane z bazy poprzez mysqli a wynik zwraca w postaci obiekty (odwołujemy się do niego za pomocą ->)
- Kod: Zaznacz wszystko
$_SESSION['login']=$row->login;
$_SESSION['id']=$row->id;
Zapisane sesji o nazwie login i id a w nich przechowywane jest login oraz id użytkownika.
Na końcu przedstawiam tabele users (polecenie do stworzenia tabeli)
- Kod: Zaznacz wszystko
CREATE TABLE `users` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`login` VARCHAR( 31 ) NOT NULL ,
`pass` VARCHAR( 33 ) NOT NULL ,
`mail` VARCHAR( 200 ) NOT NULL
);
Pozdrawiam,
Matx132
Pochwały przyznane za posta: 6