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 5

    Mini Portal PHP - Upload de Arquivos

    Para realizar o upload de arquivos, precisaremos usar um código específico, que entrará na inserir-portfolio-processo.php, no lugar do $img $_REQUEST[], descrito abaixo:

    
    $up["pasta"] = "../../img/"; // Pasta de Destino, não esqueça da última barra.
    $up["tamanho"] = 1024 * 1024 * 2; // Tamanho limite em bytes (no caso 2 MB).
    $up["extensoes"] = array("jpg", "jpeg", "png", "gif"); // Formatos permitidos.
    $up["renomeia"] = true; // Muda o nome da imagem enviada, útil pra evitar conflitos de nomes.
    
    $extensao = strtolower(end(explode(".", $_FILES["tImg"]["name"]))); // Pega a extensão do arquivo.
    
    // O condicional abaixo mostra erro no caso do arquivo estiver em formato errado:
    
    // No código abaixo, deverá estar com "idêntico":
    if(array_search($extensao, $up["extensoes"]) === false){
        header("location: ../inserir-portifolio.php?env=erro-extensao");
        exit; // O Exit termina a execução do script.
    }
    else if($up["tamanho"] < $_FILES["tImg"]["size"]) {
        header("location: ../inserir-portifolio.php?env=erro-tamanho");
        exit;   
    }
    else if($up["renomeia"] == true){
        switch($_FILES["tImg"]["type"]) {
            case "image/gif":
                $tipo = ".gif";
                break;
            case "image/png":
                $tipo = ".png";
                break;
            default:
                $tipo = ".jpeg";
                break;
        }
        $nome_final = time() . $tipo;  // Pega o horário atual e coloca no arquivo. A variável tipo converte os tipos.
    }
    else {
        $nome_final = $_FILES["tImg"]["name"];
    }
    
    // Outra condição, que fará o upload.
        
    if(move_uploaded_file($_FILES["tImg"]["tmp_name"], $up["pasta"] . $nome_final)) {
        // Pega o arquivo, faz o upload, o move pega os nomes e tipos temporários, e vai jogar na pasta com o nome final.
        // Fica vazio mesmo.
    }
    else {
        header("location: ../inserir-portifolio.php?env=erro-imagem");
        exit;       
    }
    
    

    PS: Como a variável $img foi suprimida, no array da função inserir, devemos substituir ela pelo $nome_final, no caso.

    No formulário HTML, além do action, temos que colocar o parâmetro enctype="multipart/form-data" para upar arquivos.

    Na página HTML do portfólio, coloque entre isso, logo abaixo do primeiro ENDIF:

    
    <?php if($env == "erro-extensao"): ?>
    <section class="info">
        <h1>Só Envie Imagens com Extensões jpg, jpeg, png ou gif!</h1>
    </section>
    <?php endif; ?>
    <?php if($env == "erro-tamanho"): ?>
    <section class="info">
        <h1>Só Envie Imagens com até 2 MB!</h1>
    </section>
    <?php endif; ?>
    <?php if($env == "erro-imagem"): ?>
    <section class="info">
        <h1>Não foi Possível Enviar o Arquivo!</h1>
    </section>
    <?php endif; ?>    
    
    

    Com isso, os arquivos serão guardados numa pasta, já convertidos em JPEG, caso não sejam nos formatos PNG e GIF, e os nomes irão para o banco de dados.

    PS: Não esqueça de criar a pasta img na raiz do site.

    Mini Portal PHP - Funções para Atualizar Dados no Banco MySQL

    Na pasta função, dentro de admin, salve um novo arquivo igual ao funcao-inserir, com o nome funcao-atualizar, mas com algumas diferenças, como podem ver:

    
    include_once "../../conexao/conexao.php";
    include_once "../../conexao/fecha-conexao.php";
    
    function atualizar($coluna, $valor, $tabela, $where) { // Muda a função e tem uma nova variável.
        // Verificaremos se existem arrays.
        if(is_array($coluna) && is_array($valor)) {
            // Verifica se tem a mesma quantidade de valores
            if(count($coluna) == count($valor)) {
                $valor_coluna = NULL; // Muda, colocando mais uma variável.
    
                // Muda adicionando uma estrutura FOR:
    
                for($i = 0; $i < count($coluna); $i++) {
                    $valor_coluna .= "{$coluna[$i]} = '{$valor[$i]}',";
                }
    
                // Tirando a vírgula da última posição:
        
                $valor_coluna = substr($valor_coluna, 0, -1);
                
                // Montar SQL (Muda também).
                $atualizar = "update $tabela set $valor_coluna $where";
                // Muda a forma de montar SQL.
            }
            else {
                return false;
            }
        }
        else {
            // Montar SQL (Muda também).
            $atualizar = "update $tabela set $coluna = '$valor' $where";
        }
    
        // Mostra se conectou (é outro if).
    
        if($conexao = conectaSite()) {
            // Atualizou?
            if(mysqli_query($conexao, $atualizar)) { // Mudar variável
                fechaConexao($conexao); // Função de outro arquivo.
                return true;
            }
            else {
                echo "Query Inválida";
                return false;
            }
        }
        else {
            return false;
        }
    }
    
    

    Lembrando que a Empresa seria "criada" pelo update, ou seja, o campo vai ter que ser criado previamente, o $where seria referente ao ID do banco de dados.

    Vamos fazer um teste no teste.php, com esse código, para ver se funciona, se ele vai modificar o registro previamente criado na tabela empresa:

    
    include "funcao-atualizar.php";
    
    atualizar(array("nome", "fone", "email"), array("PontoCom", "33333-3333", "contato@ponto.com"), "empresa", "where id = 1");
    
    

    Tente executar mudando os dados dos campos.

    Mini Portal PHP - Funções para Consultas no Banco MySQL

    Dentro da pasta função, em admin, crie um novo PHP com o nome funcao-select.php, sem HTML. Veja abaixo:

    
    include_once "../../conexao/conexao.php";
    include_once "../../conexao/fecha-conexao.php";
    
    function select($tabela, $coluna = "*", $where = NULL, $ordem = NULL, $limite = NULL) {
        // Adicionado SQL pra consulta:
        
        $sql = "select $coluna from $tabela $where $ordem $limite";
        
        
        if($conexao = conectaSite()) {
            // Conseguiu consultar?
            if($query = mysqli_query($conexao, $sql)) {
                // Encontrou algo?
                if(mysqli_num_rows($query) > 0) {
                    $res_totais = array();
                    
                    while($res = mysqli_fetch_assoc($query)) {
                        $res_totais[] = $res;
                    }
                    // Fecha conexão.
                    fechaConexao($conexao);
                    
                    return $res_totais;
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }
    }
    
    

    Para fazer o teste, poste isso:

    
    include "funcao-select.php";
    
    $consulta = select("sites_relacionados", "*", "where id < 10", "order by id asc", "limit 3");
    // Se quiser, tire ou mude algumas partes, mas deixe "sites_relacionados".
    
    if($consulta == true) {
        for($i = 0; $i < count($consulta); $i++) {
            echo $consulta[$i]["id"] . "<br/>";
            echo $consulta[$i]["nome"] . "<br/>";
            echo $consulta[$i]["link"] . "<br/><br/>";   
        }
    }
    else {
        echo "Nenhum Resultado na Consulta";
    }
    
    

    Mini Portal PHP - Prática da Função de Consulta (Select)

    Pegue a página tm.php, e copie ela em outro PHP na pasta Admin, com o nome sites-relacionados, e muda o nome do h1 para Sites Relacionados.

    Antes do HTML, coloque isso entre a supertag PHP:

    
    include "funcao/funcao-select.php";
    
    $consulta = select("sites_relacionados", "*", NULL, "order by nome asc");
    
    

    PS: Para funcionar, volte no arquivo funcao-select.php e retire o caminho de volta de uma das pastas pra não dar erro, de modo que ele fique assim:

    
    include_once "../conexao/conexao.php";
    include_once "../conexao/fecha-conexao.php";
    
    

    Voltando ao sites-relacionados, crie uma estrutura DIV assim, com blocos PHP:

    
    <div class="tabela">
        <div class="linha">
            <div class="coluna">Nº</div>
            <div class="coluna">Título</div>
            <div class="coluna">Link</div>
            <div class="coluna">Editar/Excluir</div>
        </div>
        <div class="linha">
            <div class="coluna"><?php echo $i + 1 ?></div>
            <div class="coluna"><?php echo $consulta[$i]["nome"] ?></div>
            <div class="coluna"><?php echo $consulta[$i]["link"] ?></div>
            <div class="coluna"><?php ?></div>
        </div>
    </div>
    
    

    PS: Não confunda o Nº da tabela com a ID do banco.

    Você agora colocará entre as duas tags div, antes do segundo class linha, você coloca uma estrutura de repetição:

    
    if($consulta == true) {
        for($i = 0; $i < count($consulta); $i++) {
    
    

    E após o segundo div, você abre um bloco PHP apenas para fechar as duas chaves (sobre o for e o if) e colocar o else.

    
        }
    }
    else {
        echo "Nenhum Dado Encontrado!";
    }
    
    

    PS: Para os sites não invadirem o espaço, vá no arquivo CSS e adicione overflow: hidden em div.coluna

    No último DIV de class coluna, faremos os botões de editar e excluir, dessa forma, com blocos PHP para passar os parâmetros pela URL:

    
    <div class="coluna"><a href="editar-sites.php?id=<?php echo $consulta[$i]['id'] ?>">Editar</a></div>
    
    

    Faça o mesmo com o excluir e em outras partes do site.