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 ?>">
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"] : "";
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.
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;
}
}