[Tutorial] Criando um sistema bбsico de login no site usando os dados do seu servidor!
#1

Tutorial: Criando um sistema de login com dados do servidor no site!

Muitos de vocкs talvez jб quiseram ter um UCP em seu site, como vemos em grandes servidores como o Los Katchorros e o FenixZone, porйm nгo o fazem por nгo terem a mнnima ideia de como funciona o PHP. Bom, o PHP nгo й um bixo de sete cabeзas, e na minha opiniгo, й uma das melhores linguagens para se aprender. Hoje vou fazer um tutorial meio "introduзгo" ao PHP, e espero que isso ajude aqueles que desejam se aventurar no mundo do desenvolvimento WEB a ir atrбs de mais conhecimento. Tenho certeza de que nгo vгo se arrepender!

Sem mais delongas, vamos lб:
------------------------------------------------------------------------------------------------------------------------------------------------

Preparando o ambiente

Antes de tudo, acho que nem preciso dizer que й extremamente necessбrio que vocк tenha um servidor WEB disponнvel. Seja instalado no seu PC (Pesquise por WAMP ou XAMPP) ou em uma host por ai. Й necessбrio tambйm que vocк tenha acesso а um banco de dados MySQL onde estгo os dados do seu servidor de SA-MP.

Para trabalhar com PHP, vocк irб precisar de um editor de texto. Alguns de vocкs podem inclusive utilizar um editor de texto para trabalhar com Pawn que tambйm suporta PHP. Eu recomendo utilizarem o Sublime Text 3 ou o VS Code para isso. Ou entгo, usem o Notepad++, ele tambйm й bonzinho, mesmo que nгo seja tanto quanto o Sublime Text ou VS Code.

Criaзгo do index.php

Para comeзar, vamos criar dois simples arquivos. Um que serб o index, e outro que serб um arquivo totalmente de back-end, e farб a conexгo do site com o banco de dados.
Index = Pagina inicial dos sites
Back-end = A "parte de trбs" do site. A parte que as pessoas nгo podem ver. A programaзгo em si.

Criados os dois arquivos, vamos comeзar a trabalhar no index:
PHP код:
<?php 
/* 
* Esta й a tag do PHP. 
* Ela serve para indicar ao servidor quais as partes do arquivo ele precisa processar o codigo php e quais as partes
* do arquivo sгo apenas HTML que deve ser enviado para o navegador
* A tag do php se abre com "<?php" e se fecha com "?>"
* Tudo o que estiver dentro dessas tags serб interpretado como cуdigo do php, e o que estiver fora serб interpretado como HTML
*/
/*
*Primeiro, vamos rodar o mйtodo session_start, para indicar ao php que vamos trabalhar com sessions
*Sessions sгo cookies; Dados que ficam guardados no navegador da pessoa que acessa o site;
*Diferentemente dos cookies normais, os sessions somem quando o usuбrio fecha o navegador;
*Geralmente й usado em websites com sistemas de login e registro simples, como o nosso.
*/
session_start();
//Verificamos se a session "nome" estб setada no navegador do usuбrio:
//A session "nome", no nosso site, irб determinar se o usuбrio estб logado ou nгo
//Note que usamos a tag de fechamento apуs colocarmos o if. Й sinal de que apуs a tag de fechamento, serб colocado cуdigo HTML
if(isset($_SESSION['nome'])) {?>
Apуs verificarmos se a session nome estб setada, vamos colocar o cуdigo HTML que serб exibido no site. Como eu disse, a session "nome" irб determinar se o usuбrio estб logado ou nгo. Pela lуgica, se a session nome estiver setada, significa que o usuбrio estб logado.

PHP код:
if(isset($_SESSION['nome'])) {?>
<!-- Usamos o doctype e a tag HTML para indicar que comeзamos a escrever o cуdigo HTML do site -->
<!DOCTYPE html>
<html>
<head>
    <!-- Aqui fica o title da sua pбgina. Й o nome que fica escrito na aba do navegador (http://prntscr.com/izaouk) -->
    <title>Bem vindo ao UserCP!</title>
</head>
<body>
    <!-- Usamos a tag center para indicar que o conteъdo da pagina precisa ficar centralizado -->
    <center>
     <!-- h1 = Header 1. A tag h1 й usada para criar tнtulos que ficam no cabeзalho do site -->
     <h1>Bem vindo, <?php echo $_SESSION['nome']; //O "echo" do php й semelhante ao "print" do pawn. Aqui, nуs "printaremos" o valor da session "nome" no site ?></h1>
     <br><!-- br = Break, de Line Break. Й usado para pular pra proxima linha no HTML -->
     <!-- p = Paragrafo. Usado para colocar textos no PHP -->
     <p>Seu dinheiro: R$ <?php echo $_SESSION['dinheiro']; //Aqui, vamos dar echo na session dinheiro, que terб o valor do dinheiro do player?>,00<br>
     Seu level: <?php echo $_SESSION['level']; //Ja aqui, daremos echo na session "level".?>
     <!-- Repare que usamos sempre um $ na frente de _SESSSION. $ no PHP й o sinal que representa as variaveis. -->
     </p>
    </center>
</body>
</html>
<?php 
//Caso nгo esteja setado o session "nome", isto й, caso o usuario nгo esteja logado.
} else {?>
Depois de criarmos a pagina que serб exibida quando o usuбrio estiver logado, vamos agora criar a pбgina de login, para ele inserir seus dados antes de logar:

PHP код:
} else {?>
<!DOCTYPE html>
<html>
<head>
    <title>Seu servidor - UCP</title>
</head>
<body>
    <center>
        <h1>Efetue login para continuar!</h1>
        <!-- Agora vamos criar um formulбrio que serб usado para coletar as informaзхes de login -->
        <!-- Em action, vai o nome do arquivo php que irб processar o login. Coloque login.php -->
        <!-- O method "post" й o mйtodo de envio das informaзхes. Leia mais sobre POST, GET e outros mйtodos no ****** :) -->
        <form action="login.php" method="post">
            <!-- Inputs sгo as caixas onde os usuarios do site colocarгo os dados -->
            <!-- O atributo "placeholder" й o texto que irб aparecer por padrгo nesses campos --> 
            Usuario: <input type="text" name="user" placeholder="Seu nick no servidor">
            Senha: <input type="password" name="senha" placeholder="••••••••••">
            <!-- O input do tipo submit й o botгo de "Enviar" o formulбrio. O atributo "value" й o texto exibido no botгo. -->
            <input type="submit" value="Logar">
        </form>
    </center>
</body>
</html>
<?php
}
?>
O cуdigo final do seu arquivo index.php deverб ser igual ou semelhante a esse: https://github.com/BrunnoFdc/tutoria...ster/index.php


Criando o arquivo login.php

Colocamos anteriormente em nosso formulбrio o arquivo login.php como o arquivo que iria receber e processar o login. Estб na hora de criarmos esse arquivo. O arquivo login.php vai ser inteiramente composto de cуdigo do PHP, isto й, nгo haverб diretamente HTML presente nele.
Sem mais delongas, vamos lб:

Crie o arquivo e coloque o seguinte cуdigo dentro dele. As explicaзхes sobre o cуdigo estгo em comentбrios dentro do prуprio.

PHP код:
<?php 
//Novamente, executamos o session_start. Para cada arquivo do PHP que formos trabalhar com sessions, deveremos usar o session_start
session_start();
//Verificamos se a variavel _POST estб setada
//A variavel _POST й a variavel que contйm os dados enviados via mйtodo post para a pбgina
//Sу vamos aceitar que alguйm abra o arquivo login.php se este nos enviar dados usando o mйtodo post, contendo a senha e o user do mesmo.
if(isset($_POST) && isset($_POST['user']) && isset($_POST['senha']) && (strlen($_POST['user']) > 0) && (strlen($_POST['senha']) > 0) ) {
    
//Para ficar mais fбcil, vamos declarar duas variaveis com o nome e a senha do jogador
    
$nome $_POST['user'];
    
$senha $_POST['senha'];
    
//Vamos iniciar uma conexгo com o MySQL
    
$ip "localhost";
    
$user "root";
    
$password "";
    
$db "servidor";
    
$sql = new Mysqli($ip$user$password$db);
    
//Agora, vamos fazer uma consulta no MySQL para verificar se o jogador estб ou nгo no banco de dados:
    //No php, nуs podemos inserir variaveis diretamente dentro de strings que estejam contidas por aspas duplas (" ")
    //Nгo, nгo precisaremos de format() :)
    
$consulta $sql->query("SELECT * FROM `jogadores` WHERE `Nome`='$nome'");
    
//Verificaremos se a consulta retornou algum resultado:
    
if($consulta->num_rows 0) {
        
//Vamos transformar a consulta em um array associativo, para podermos trabalhar com os resultados:
        
$result $consulta->fetch_assoc();
        
//Vamos transformar agora a senha do usuario em um hash. Eu utilizo Whirlpool para criar hashes das senhas dos usuarios. Se vocк tambйm utiliza, faзa da seguinte maneira:
        
$senha hash("whirlpool"$senha);
        
//Agora, comparamos a hash armazenada com o hash criado. Se forem diferentes, a senha estб incorreta.
        
if(strcasecmp($senha$result['Senha']) == 0) {
            
//Se a senha estiver correta, vamos setar os sessions e direcionar o usuario de volta para a index.php
                        //O "$result" contйm os dados de cada coluna da linha que foi retornada na consulta
            
$_SESSION['nome'] = $result['Nome'];
            
$_SESSION['dinheiro'] = $result['Dinheiro'];
            
$_SESSION['level'] = $result['Level'];
            
header("Location: index.php");
        } else {
            echo 
"Senha incorreta!";
        }
    } else {
        
//Se nгo retornar nenhum resultado, iremos imprimir na pagina que o usuario nгo foi encontrado
        
echo "Usuбrio nгo encontrado";
    }
} else {
    
//Caso nгo esteja setado a variavel _POST ou os campos user e senha, iremos mandar o usuario de volta para a pagina inicial
    
header("Location: index.php");
}
?>
E depois de tudo isso, se estiver tudo certo, vocк conseguirб se conectar normalmente com seu usuario e senha do servidor!



Entгo й isso. Espero que ajude alguйm a ter uma noзгozinha de como funciona o PHP, as sessions, como consultar dados do banco de dados, etc.

Repositуrio do GitHub com todo o cуdigo: https://github.com/BrunnoFdc/tutorial-login-samp

Qualquer duvida, poste ai, terei o maior prazer em ajudar!

Att.
Reply
#2

Gostei,porйm acho que um tutorial desses para alguйm que nгo tem a minнma noзгo de front-end,nem que seja o bбsico,essa pessoa vai achar um pouco confuso. Mas bom trabalho + rep.
Reply
#3

Quote:
Originally Posted by FerrariL
Посмотреть сообщение
Gostei,porйm acho que um tutorial desses para alguйm que nгo tem a minнma noзгo de front-end,nem que seja o bбsico,essa pessoa vai achar um pouco confuso. Mas bom trabalho + rep.
Pois й. Eu tentei explicar alguma coisa do front-end com comentбrios. Pode ser que nгo entendam muito bem a parte do front-end, afinal nгo й todo mundo que jб teve contato direto com HTML. Mas a gente tenta
Reply
#4

Legal, mas... SQL Injection mandou um abraзo!
Reply
#5

Quote:
Originally Posted by renatog
Посмотреть сообщение
Legal, mas... SQL Injection mandou um abraзo!
Por isso o
"[...] sistema bбsico de login [...]"

Espero que ninguйm se baseie totalmente nesse cуdigo pra fazer um UCP para seu servidor, porque realmente, tб vulnerбvel а SQL Injection.
Reply
#6

Vocк estб criando duas sessхes, sendo que deveria criar somente uma.

Esta repetindo o cabeзalho HTML no index.php, coloque o header acima da condiзгo(if)

O usuбrio consegue logar, mas ele nгo pode deslogar, sempre criarб uma sessгo nova uma em cima da outra, vocк deve destruir a sessгo quando o usuario deslogar

Por mais "bбsico" que seja, tem algumas coisas q podem ser melhoradas...

Ps:leve este comentбrio como uma crнtica construtiva
Reply
#7

Quote:
Originally Posted by MBJ
Посмотреть сообщение
Vocк estб criando duas sessхes, sendo que deveria criar somente uma.

Esta repetindo o cabeзalho HTML no index.php, coloque o header acima da condiзгo(if)

O usuбrio consegue logar, mas ele nгo pode deslogar, sempre criarб uma sessгo nova uma em cima da outra, vocк deve destruir a sessгo quando o usuario deslogar

Por mais "bбsico" que seja, tem algumas coisas q podem ser melhoradas...

Ps:leve este comentбrio como uma crнtica construtiva
Tecnicamente, eu nгo criei duas sessхes, eu criei uma sу.
session_start — Inicia uma nova sessгo ou resume uma sessгo existente

De fato eu repeti o cabeзalho. A ideia era ter colocado o nick do usuбrio no <title>, mas depois eu mudei de ideia e optei por deixar sу no h1 mesmo. Vocк tem razгo, podia ter deixado o cуdigo acima da condiзгo, mas enfim, й algo tгo simples que nem faz lб muita diferenзa.

E de fato, nгo tem como deslogar, sу se fechar o navegador, mas isso faz parte do "bбsico" mesmo. Eu podia ter criado um sistema de logoff, mas esse nгo era o intuito do tutorial.
Reply
#8

Gostei muito da sua intenзгo, parabйns.
Reply
#9

Quote:
Originally Posted by BrunnoFdc
Посмотреть сообщение
Tecnicamente, eu nгo criei duas sessхes, eu criei uma sу.
session_start — Inicia uma nova sessгo ou resume uma sessгo existente
Porйm isso gera um aviso, o que nгo й uma boa prбtica

PHP код:
Noticesession_start(): A session had already been started ignoring 
Reply
#10

Quote:
Originally Posted by HelderPT
Посмотреть сообщение
Chegou a poco tempo no forum me parece por sua dade De Join date e ja estб assim continua num bom caminho mt boa sorte !! gostei porem nao irei usar mais pode servir para alguem :like:
Na verdade eu jб to no samp hб uns 4 anos, mas nunca fui ativo aqui, e essa conta й realmente nova.
Thx
Reply
#11

Quote:
Originally Posted by renatog
Посмотреть сообщение
Legal, mas... SQL Injection mandou um abraзo!
Quote:
Originally Posted by BrunnoFdc
Посмотреть сообщение
"[...] sistema bбsico de login [...]"
Quem liga para proteзгo, quando o assunto й seguranзa?
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)