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 6

    Mini Portal PHP - Consulta via URL Parameters em Formulários

    Vamos pegar o arquivo inserir-sites.php e copiar ele na mesma pasta, com o nome de editar-sites.php, mudando as partes "inserir" para "editar" (incluindo o action), o botão para atualizar, e remova o section referente à "dados gravados", isso vai no cabeçalho:

    
    include "funcao/funcao-select.php";
    
    $id = isset($_REQUEST["id"]) ? $_REQUEST["id"] : "";
    
    $consulta = select("sites_relacionados", "*", "where id = '$id'", "order by nome asc");
    
    

    E coloque o formulário entre esses blocos PHP, dessa forma:

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

    E após o final do formulário, 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!";
    }
    
    

    E no campo nome do site, coloque um value com esse valor:

    
    value="<?php echo $consulta[$i]["nome"] ?>"
    
    

    Faça o mesmo acima com o link.

    E dentro do formulário, crie um input type hidden com o value, dessa forma:

    
    <input type="hidden" name="tId" id="cId" value="<?php echo $id ?>">
    
    

    Mini Portal PHP - Prática da Função Atualizar

    Voltando ao editar-sites.php, mudamos o action para update/editar-sites-processo.php, e obviamente, criamos uma pasta update em admin, e dentro dela um arquivo editar-sites-processo.

    Nesse arquivo, faremos um arquivo assim:

    
    include "../funcao/funcao-atualizar.php";
    
    $nome = $_REQUEST["tNome"];
    $link = $_REQUEST["tLink"];
    $idF = $_REQUEST["tId"];
    
    echo $nome;
    echo $link;
    echo $idF;
    
    

    Agora removeremos os echo e colocaremos a chamada da função no lugar:

    
    atualizar(array("nome", "link"), array($nome, $link), "sites_relacionados", "where id = $idF");
    
    header("location: ../sites-relacionados.php?env=sucess");
    
    

    Agora, em sites-relacionados.php, vamos dar um tratamento de parâmetros. Coloque isso logo abaixo do section class centro:

    
    <?php if($env == "sucess"): ?>
    <section class="info-sucesso">
         <h1>Edição Concluída com Sucesso!</h1>
    </section>
    <?php endif; ?>
    
    

    E no começo do PHP, antes dos includes, coloque isso:

    
    $env = isset($_REQUEST["env"]) ? $_REQUEST["env"] : "";
    
    

    Mini Portal PHP - Atualização de Imagens

    Primeiro, vamos deixar pronto a página portifolio.php (quase igual à página de sites relacionados) e a opção editar numa chamada editar-portifolio, fazendo da mesma forma anterior, mudando o action e colocando o hidden também. Preste atenção nos nomes dos bancos, nos campos da função select e nos echos dos values.

    Para isso, usaremos um arquivos com esses códigos, com o nome de editar-portifolio-processo, dentro de update, com isso:

    
    // Carrega as funções e extenções.
    
    include "../funcao/funcao-atualizar.php";
    include "../funcao/funcao-select2.php"; // Outro arquivo, quase igual, só sem os includes.
    include "../../extensoes/url-amigavel.php";
    
    // Resgata os valores do formulário
    
    $titulo = $_REQUEST["tTit"];
    $url = url_amigavel($titulo);
    $resumo = $_REQUEST["tRes"];
    $conteudo = $_REQUEST["tCont"];
    $data = $_REQUEST["tData"];
    $idF = $_REQUEST["tId"];
    
    // Verifica se o campo imagem foi selecionado
    
    if($_FILES["tImg"]["name"] == false) {
        // Caso negativo, atualiza os dados sem atualizar o campo img_destaque
        atualizar(array("titulo", "url", "resumo", "conteudo", "data"), array($titulo, $url, $resumo, $conteudo, $data), "portifolio", "where id = $idF");
        
        // Retorna a página portfólio com a informação de atualização.
        header("location: ../portifolio.php?env=sucess");
    }
    else {
        // Se o campo img retornar valor ele faz o upload da imagem.
        
        //Cria um array com as definições da pasta, tamanho, extensões que a imagem deve conter.
        // Também habilita e desabilita a renomeiação do arquivo.
        
        $up["pasta"] = "../../img/"; // Não esqueça da barra.
        $up["tamanho"] = 1024 * 1024 * 2;
        $up["extensoes"] = array("jpg", "jpeg", "png", "gif");
        $up["renomeia"] = true;
        
        // Verifica se a extensão do arquivo é permitida.
        
        $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: ../editar-portifolio.php?env=erro-extensao");
            exit; // O Exit termina a execução do script.
        }
        else if($up["tamanho"] < $_FILES["tImg"]["size"]) {
            header("location: ../editar-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: ../editar-portifolio.php?env=erro-imagem");
            exit;       
        }
        
        // Depois do upload ele faz uma consulta para selecionar o campo img_destaque para excluir a imagem antiga.
        
        $consulta = select("portifolio", "img_destaque", "where id = '$idF'");
        
        // Verifica se consegue encontrar o campo
        
        if($consulta == true) {
            // Caso positivo monta a matriz e resgata o resultado.
            for($i = 0; $i < count($consulta); $i++) {
                $excluir_img = $consulta[$i]["img_destaque"];
            }
            // Exclui a imagem antiga do diretório
            unlink("../../img/$excluir_img");
        }
        
        // Faz a atualização dos campos e do include do nome da imagem no banco.
        
        atualizar(array("titulo", "url", "resumo", "conteudo", "data", "img_destaque"), array($titulo, $url, $resumo, $conteudo, $data, $nome_final), "portifolio", "where id = $idF");
        
        // Retorna a página Portifólio com a informação da atualoização.
        
        header("location: ../portifolio.php?env=sucess");
    }
    
    

    Note que teremos um novo select, chamado funcao-select2, quase igual ao outro, apenas sem os dois includes (para não haver conflitos).

    Na edição, ele poderá perder o link da imagem, caso não seja upado uma nova, para que ele só troque a imagem quando ela for upada.

    Mini Portal PHP - Função para Excluir Dados do Banco MySQL

    Abra o projeto na pasta admin, em funções, copie o arquivo funcao-inserir e salva com o nome funcao-deleta, com eses códigos:

    
    include_once "../../conexao/conexao.php";
    include_once "../../conexao/fecha-conexao.php";
    
    function deleta($tabela, $where = NULL) {
        // Montar SQL
    
        $delete = "delete from $tabela $where";
    
        if($conexao = conectaSite()) {
            // Deletou?
            if(mysqli_query($conexao, $delete)) {
                fechaConexao($conexao); // Função de outro arquivo.
                return true;
            }
            else {
                echo "Query Inválida";
                return false;
            }
        }
        else {
            return false;
        }
    }