Aprenda PHP Intermediário

  • Página Inicial
  • Contato!
  • Tudo sobre PHP Intermediário Parte 1!
  • Tudo sobre PHP Intermediário Parte 2!
  • Tudo sobre PHP Intermediário Parte 3!
  • Tudo sobre PHP Intermediário Parte 4!
  • Tudo sobre PHP Intermediário Parte 5!
  • Tudo sobre PHP Intermediário Parte 6!
  • Tudo sobre PHP Intermediário Parte 7!
  • Tudo sobre PHP Intermediário Parte 4

    Mini Portal PHP - Conhecendo e Conectando com o Banco de Dados

    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);
    
    

    Mini Portal PHP - Funções para conexão e desconexão com o MySQL

    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.

    Mini Portal PHP - Funções para inserir dados no banco MySQL

    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.
    
    

    Mini Portal PHP - Utilizando a Funções Inserir

    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.

    Mini Portal PHP - Criptografia de senhas e Url amigáveis

    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);