Agora vamos criar um mini-portal, para isso extraia a pasta RAR com os arquivos e coloque no htdocs do seu servidor. Clique Aqui para fazer o Download.
Primeiro, crie o banco de dados, no caso, o banco já está pronto nessa pasta, basta importar o arquivo SQL para o servidor.
Com o banco instalado, faremos a conexão dele com o banco. Crie na pasta do portal um arquivo db.php dentro de uma pasta (conexão). Esse é o código:
$hostname = "localhost";
$usuario = "root";
$senha = "";
$banco = "projeto_php";
$conexao = mysqli_connect($hostname, $usuario, $senha, $banco) or die ("Não foi possível estabelecer a conexão");
mysqli_set_charset($conexao, "utf8");
if(!$conexao) {
echo "Não foi possível conectar ao banco";
exit;
}
else {
echo "Conexão Realizada!";
}
mysqli_close($conexao);
Vamos abrir o arquivo "tm.html", e criaremos três arquivos PHP, lateral-direira, rodape e topo.
Recorte o espaço entre as tags header topo e nav e coloque no arquivo de topo, o que tiver entre aside, vai na lateral-direita e o que tiver entre footer, vai no rodape.
Voltando ao tm, renomeie a extensão dele para php, e no lugar de cada tag, coloque as chamadas em supertags php com include_once.
Dentro da pasta conexão, vamos criar um arquivo com o nome conexão, para fazermos uma conexão mais profissional. Veja o código acima:
function conectaSite($hostname = "localhost", $usuario = "root", $senha = "", $banco = "projeto_php") {
$connect = mysqli_connect($hostname, $usuario, $senha); // Conecta com o banco.
if(!$connect) {
die(trigger_error("Não foi possível estabelecer a conexão!"));
return false;
}
else {
$db = mysqli_select_db($connect, $banco); // Seleciona o banco.
if(!$db) {
die(trigger_error("Não foi possível selecionar o banco de dados!"));
return false;
}
else {
return $connect;
}
}
}
Também na pasta conexão, crie um arquivo para fechar, com o nome "fecha-conexao", com esse código:
function fechaConexao($connect) {
$fecha = mysqli_close($connect);
if(!$fecha) {
echo "Impossível fechar a conexão!";
return false;
}
else {
return true;
}
}
Com esses arquivos, não usaremos o db.php, que pode ser descartado.
Pra continuar, vamos criar uma pasta dentro da pasta admin, chamada funcao, e dentro dela crie um arquivo PHP com o nome funcao-inserir.
Nesse arquivo, colocaremos esse código:
include_once "../../conexao/conexao.php";
include_once "../../conexao/fecha-conexao.php";
function inserir($coluna, $valor, $tabela) {
// Verificaremos se existem arrays.
if(is_array($coluna) && is_array($valor)) {
// Verifica se tem a mesma quantidade de valores
if(count($coluna) == count($valor)) {
// Montar SQL.
$inserir = "insert into $tabela (" . implode(", ", $coluna) . ") values ('" . implode("', '", $valor) . "')";
}
else {
return false;
}
}
else {
// Montar SQL.
$inserir = "insert into $tabela ($coluna) values ('$valor')";
}
// Mostra se conectou (é outro if).
if($conexao = conectaSite()) {
// Inseriu?
if(mysqli_query($conexao, $inserir)) {
fechaConexao($conexao); // Função de outro arquivo.
return true;
}
else {
echo "Query Inválida";
return false;
}
}
else {
return false;
}
}
Na mesma pasta função, crie um PHP com o nome teste, pra testar a conexão. Esse é o código:
include "funcao-inserir.php";
inserir(array("login", "senha"), array("user2", "456"), "user"); // Função chamada.
Crie um arquivo PHP dentro da pasta admin com o nome inserir-sites, com o mesmo conteúdo do tm.php (copiar e colar), apenas mudando o título h1 para "Inserir sites relacionados".
Na tabela sites_relacionados no banco, usaremos os bancos nome e link para os formulários.
Crie, entre as tags section, logo abaixo do h1, esse formulário:
<section>
<form method="post" action="inserts/inserir-sites-processo.php">
<p><label for="cNome">Nome do Site: </label></p>
<p><input type="text" name="tNome" id="cNome"/></p>
<p><label for="cLink">Link do Site: </label></p>
<p><input type="text" name="tLink" id="cLink"/></p>
<p><button type="submit">Inserir</button></p>
</form>
</section>
Dentro da pasta admin, crie uma pasta nova com o nome inserts, com outro arquivo PHP com o nome inserir-sites-processo, que fará a ação. Veja o código:
$nome = $_REQUEST["tNome"];
$link = $_REQUEST["tLink"];
echo $nome;
echo $link;
Obviamente, o echo é só pra testar se está funcionando. Esse é o código completo:
include "../funcao/funcao-inserir.php";
$nome = $_REQUEST["tNome"];
$link = $_REQUEST["tLink"];
inserir(array("nome", "link"), array($nome, $link), "sites_relacionados");
header("location: ../inserir-sites.php?env=sucess");
Na página de retorno, podemos colocar uma mensagem indicando que foi enviado, mas sem o else, para o formulário sempre aparecer. Ela ficaria dentro do section principal, antes do formulário. Entre as supertags PHP, colocamos outro setion com a class "info-sucesso".
<?php if($env == "sucess"): ?>
<section class="info-sucesso">
<h1>Dados Enviados com Sucesso!</h1>
</section>
<?php endif; ?>
Antes do HTML, abra uma supertag PHP e coloque isso:
$env = isset($_REQUEST["env"]) ? $_REQUEST["env"] : "";
Faça o mesmo com os outras partes do site, colocando tudo na pasta Admin. Só continue a aula após isso.
Devido ao arquivo inserir-sites estar numa pasta separada, ele pode ser usado nas outras sessões do site.
Em apresentação e empresa não usaremos insert, e sim o update, que veremos mais pra frente.
Vamos fazer o de clientes, portfólio e usuários.
No cliente (um arquivo inserir-clientes.php em Admin), na pasta referente, faremos o mesmo no inserir-sites, mudando o formulário, onde colocaremos isso:
<section>
<form method="post" action="inserts/inserir-clientes-processo.php">
<p><label for="cNome">Nome: </label></p>
<p><input type="text" name="tNome" id="cNome"/></p>
<p><label for="cImg">Imagem: </label></p>
<p><input type="file" name="tImg" id="cImg"/></p>
<p><button type="submit">Inserir</button></p>
</form>
</section>
Agora vamos criar URLs amigáveis, no inserir-clientes-processo.php, temos os dados nome, URL e imagem, a url será o nome da empresa sem acento e os espaços substituído pelos tracinhos, tudo em minúscula. No exemplo, já estaremos usando uma extensão que já existe no projeto que foi baixado, numa pasta específica. Veja abaixo o código:
include "../funcao/funcao-inserir.php";
include "../../extensoes/url-amigavel.php";
$nome = $_REQUEST["tNome"];
$url = url_amigavel($nome); // Função chamada pela extensão criada.
$img = $_REQUEST["tImg"];
inserir(array("nome", "url", "imagem"), array($nome, $url, $img), "clientes");
header("location: ../inserir-clientes.php?env=sucess");
Para criar a função da url amigável, faça um arquivo com esse código, na pasta extensoes:
function url_amigavel($url) {
$retirar = preg_replace("/[`^~\"']/", null, iconv("UTF-8", "ASCII//TRANSLIT", $url));
$resul = strtolower(str_replace(" ", "-", $retirar));
return $resul;
}
Vamos no Portfólio também, da mesma forma, em Admin, criaremos um inserir-portifolio.php em Admin (com o mesmo HTML dos outros), e um arquivo de processo em Inserts, dentro do Admin.
Essas são as únicas mudanças do formulário:
<section>
<form method="post" action="inserts/inserir-portifolio-processo.php">
<p><label for="cTit">Título: </label></p>
<p><input type="text" name="tTit" id="cTit"/></p>
<p><label for="cRes">Resumo: </label></p>
<p><textarea name="tRes" id="cRes"></textarea></p>
<p><label for="cCont">Conteúdo: </label></p>
<p><textarea name="tCont" id="cCont"></textarea></p>
<p><label for="cData">Data: </label></p>
<p><input type="datetime-local" name="tData" id="cData"/></p>
<p><label for="cImg">Imagem: </label></p>
<p><input type="file" name="tImg" id="cImg"/></p>
<p><button type="submit">Inserir</button></p>
</form>
</section>
Esse é o código do inserir-portifolio-processo:
include "../funcao/funcao-inserir.php";
include "../../extensoes/url-amigavel.php";
$titulo = $_REQUEST["tTit"];
$url = url_amigavel($titulo); // Função chamada pela extensão criada.
$resumo = $_REQUEST["tRes"];
$conteudo = $_REQUEST["tCont"];
$data = $_REQUEST["tData"];
$img = $_REQUEST["tImg"];
inserir(array("titulo", "url", "resumo", "conteudo", "data", "img_destaque"), array($titulo, $url, $resumo, $conteudo, $data, $img), "portifolio");
header("location: ../inserir-portifolio.php?env=sucess");
Agora faremos o mesmo com usuários, criando o arquivo inserir-user em Admin, e inserir-user-processo em Insert, dentro de Admin.
Esse é o código do formulário, que será alterado:
<section>
<form method="post" action="inserts/inserir-user-processo.php">
<p><label for="cNome">Nome: </label></p>
<p><input type="text" name="tNome" id="cNome" required/></p>
<p><label for="cSenha">Senha: </label></p>
<p><input type="password" name="tSenha" id="cSenha" required/></p>
<p><button type="submit">Inserir</button></p>
</form>
</section>
E esse é o código da ação:
include "../funcao/funcao-inserir.php";
$login = $_REQUEST["tNome"];
$senha = $_REQUEST["tSenha"];
$cripsenha = password_hash($senha, PASSWORD_BCRYPT);
inserir(array("login", "senha"), array($login, $cripsenha), "user");
header("location: ../inserir-user.php?env=sucess");
Pode ver que, no código acima, usamos uma variável com uma função para criptografar senhas, a password_hash()
, existem outros métodos, como o md5()
e o sha1()
, mas o password_hash é o mais usado e mais seguro. Antigamente tinha o crypt
, mas ele foi depreciado.
Teste o código acima com md5 também para testar.
A diferença entre os dois métodos, é que o MD5 sempre gerará um código igual para a mesma senha, enquanto o password_hash, mesmo sendo a mesma senha, a criptografia será totalmente diferente.
Podemos usar no PHP os algoritmos de criptografia MD5 (32 caracteres), SHA1 (40 caracteres) e SHA256 (64 caracteres). Veja um exemplo abaixo:
$senhaM5 = hash("md5", $senha); // Pode também ser md5($senha);
$senhaS1 = hash("sha1", $senha); // Pode também ser sha1($senha);
$senhaS256 = hash("sha256", $senha);