Canais iMasters

MySQL + PHP + Dreamweaver

Sistema de publicação de fotos com comentários (excluir dados e foto)

No artigo de hoje, desenvolveremos a página deleta_foto.php, que tem a finalidade de excluir a referência da foto no banco de dados e eliminá-la do diretório: fotos, responsável pelo armazenamento das fotos do sistema.

Relação dos artigos desta série:

  1. Sistema de publicação de fotos com comentários (sugestões)
  2. Sistema de publicação de fotos com comentários (planejamento)
  3. Sistema de publicação de fotos com comentários (postar fotos)
  4. Sistema de publicação de fotos com comentários (alterar dados e foto)

Neste artigo também finalizaremos as páginas da área administrativa que trabalharão com as fotos. Vamos lá.

Iniciaremos abrindo ou criando a páginadeleta_foto.php da área administrativa. Com ela aberta ou criada, vamos criar um Recordset que conterá os dados do registro que será excluído do banco de dados e a referência da imagem que precisamos deletar no diretório fotos.

Para tal, siga este caminho: Painel Application > Bindings (Ctrl + F10); clique no botão de mais (+) e em seguida na opção: Recordset (Query); como exemplificado na imagem abaixo:

Localização da opção: Recorset Query

Após esse percurso, teremos o painel: Recordset, e o configuraremos como mostrado na imagem abaixo:

Painel: Recordset configurado

Explicando:

Name: o nome do nosso recordset (rsDeletaDadosFoto). Dica: utilize o prefixo: rs. Para uma melhor identificação de tudo que se trata do recordset.

Connection: escolha a conexão que criamos (connSisFotos) no artigo anterior a esse.

Table: tabela (fotos) onde se localiza os dados.

Columns: resgataremos todas as colunas da tabela.

Filter: Para termos os dados específico do registro em questão, precisamos filtrar nosso Recordset, então, vamos filtrá-lo pela coluna: foto_id, pois nela está armazenado a identificação única de cada registro; dizemos que a coluna (foto_id) precisa ser igual (=) a variável de URL foto_id. O que significa dizer, que o registro a ser exibido será aquele em que, um identificador na URL seja idêntico ao localizado na coluna foto_id.

Agora faremos uma pergunta ao administrador do sistema, tipo: Confirma a exclusão da foto: xxx? Caso, ele realmente deseja excluir os dados e a foto, basta clicar no botão (Sim) de confirmação. Além desse botão no formulário, teremos um campo do tipo hidden que armazenará a identificação (id) do registro no banco de dados.

Veja um print parcial da página no Dreamweaver:

Vamos desenvolver este formulário como mostrado na imagem acima. Primeiro a pergunta, para criá-la, basta arrastar o campo foto_titulo da tabela fotos no painel Bindings Ctrl + F10. O resultado será como o código abaixo:

Confirma a exclusão da foto: <?php echo $row_rsDeletaDadosFoto["foto_titulo"]; ?>?

Após, crie um formulário na página. Para criá-lo, vá até a aba Forms e clique na primeira opção da esquerda para a direita. Em seguida, insira um button, 12º opção da esquerda para a direita, e configure-o como exemplificado na imagem abaixo:

Insira um campo do tipo hidden, terceria opção da esquerda para a direita, e o configure como mostrado abaixo:

Para setar o value como exibido acima, proceda assim: clique botão Bind To Dynamic Source (o raiozinho) e selecione o campo foto_id do recordset (rsDeletaDadosFoto) que criamos. Veja a imagem de exemplo:

Esse campo do tipo hidden, tem duas funções; garantir que deletamos o registro correto e nos possibilita excluir o registro mediante uma confirmação.

Agora configuraremos o behavior Delete Record. Ele está disponível na aba Application, sendo a décima opção da esquerda para a direita, veja a imagem com sua localização:

Ao clicar na opção, teremos o painel Delete Record, veja ele configurado na imagem abaixo:

Explicando:

First check if variable is defined - Essa opção que nos possibilita desenvolvermos a confirmação da exclusão. Pois, o behavior (Delete Record) somente será executado se a variável foto_id existir. E como a definimos como uma variável do tipo Form Variable, sua existência é ocasionada quando o formulário é submetido, ou seja, quando o usuáiro clicar no botão Sim.

Connection - Nossa conexão (connSisFotos) ao banco de dados.

Table - Tabela (fotos) que armazena o registro que gostaríamos de deletá-lo.

Primary key column - Campo da tabela (foto_id) que armazena a chave primária da tabela.

Primary key value - Variável (foto_id) do tipo Form Variable, que contém o identificador idêntico ao armazenado no campo foto_id da tabela. Este valor é armazenado no campo do tipo hidden que criamos.

After deleting, go to: Página (index.php) que virá após a exclusão do registro.

Bom, até este momento, já deletamos o registro no banco de dados, agora, precisamos incrementar o script gerado pelo Dreamweaver para excluirmos a foto do diretório: fotos. Para realizar tal incrementação, vamos proceder assim:

1º - Passar o código do Recordset - rsDeletaDadosFoto, para cima do script de Delete Record. Observe:

2º - Agora, localize esta parte do script, veja:

E após esses códigos, acrescentaremos uma variável - $nomeFoto, que armazenará o nome da foto que desejamos excluir e a função unlink que apaga um arquivo. Veja o código incrementado:

Nota - A função unlink necessita apenas que digamos a ela o nome do arquivo, que o restante ela faz (deletar o arquivo), mas no exemplo acima, além do nome do arquivo, adicionei também o diretório (../fotos/) em que ele (arquivo) se localiza.

Pronto. Finalizamos o desenvolvimento de mais uma página.

Dica: Acrescente um botão ou link para o cancelamento da exclusão, assim, quando o administrador clicar no botão/link ele será redirecionado para a página inicial do admin por exemplo.

Aqui está a página completa: deleta_foto.html

É isso aí pessoal, espero que tenham gostado. Um abraço e até o próximo.


Comente também

15 Comentários

Hamilton Gláucio De Oliveira Júnior
Hamilton Gláucio De Oliveira Júnior

Cara agora ta dando o seguinte erro da uma maozinha ai: Warning: unlink(../fotos/gatao_kkkkk.jpg): No such file or directory in c:\arquivos de programas\apache group\apache\htdocs\foto\admin\deleta_foto.php on line 43

Warning: Cannot modify header information - headers already sent by (output started at c:\arquivos de programas\apache group\apache\htdocs\foto\admin\deleta_foto.php:2) in c:\arquivos de programas\apache group\apache\htdocs\foto\admin\deleta_foto.php on line 53
...

abraços

Moisés Benicio de Castro
Moisés Benicio de Castro

Quando deleto uma foto, gostaria de deletar os comentários referentes à ela também... Tem como explicar como isso funciona? A matéria tá show. Abraço!!

João Ricardo de Albuquerque Si
João Ricardo de Albuquerque Si

Renan, para evitar este erro: headers already sent ... faça assim: verifique os espaço antes e depois das tags do php (&lt;?php ?&gt;). Quanto ao outro erro, verifique se realmente o nome do diretório está correto, acho que vc tinha criado o diretório com o nome foto e não fotos. Verifique.

João Ricardo de Albuquerque Si
João Ricardo de Albuquerque Si

Olá Moisés,

Cara, realmente precisaremos desta funcionalidade, sinceramente eu esqueci (que vergonha). Mas, depois desenvolveremos isso tb, fique traquilo.

Maria
Maria

Pelo empenho!

Hamilton Gláucio De Oliveira Júnior
Hamilton Gláucio De Oliveira Júnior

Cara verifiquei os itens q me pediu e esta tudo certo a pasta tem o mesmo nome e o &lt;?php ?&gt; esta certinho ... o que mais pode ser? =(

abraços

Hamilton Gláucio De Oliveira Júnior
Hamilton Gláucio De Oliveira Júnior

cara agora só ta com esse erro aqui: Warning: Cannot modify header information - headers already sent by (output started at c:\arquivos de programas\apache group\apache\htdocs\foto\admin\deleta_foto.php:2) in c:\arquivos de programas\apache group\apache\htdocs\foto\admin\deleta_foto.php on line 53

é na parte do header mais nao sei o q pode estar errado me da uma ajudinha (linha 53) ...

aguardo ...

Hamilton Gláucio De Oliveira Júnior
Hamilton Gláucio De Oliveira Júnior

ai pessoal alguem me ajuda com meu erro por favorrrrrr

Fernando Rodrigo Cardoso
Fernando Rodrigo Cardoso

Bom tutorial este, na verdade eu soh precisava desta parte do remover, q eu naum conseguia configurá-lo de jeito nenhum, o resto em si ja sabia.
Gostaria que vc pudesse montar um Tutorial q ensinasse a configurar a pagina Restrita no Caso de um sistema de Login.
eu tentei utilizar um comando q eu criei pelo php..
>assim.
<?php
$usuario=$_GET['usuario'];
$senha=$_GET['senha'];
if($login !="$variavel login do sql" || $senha !="$variavel senha"){
include "login.php";
}else{
?>
<?
include "logado.php";
?>
<?
}
?>

Renato Formenton
Renato Formenton

Tem como por exemplo excluir mais de uma foto do diretório de uma vez só?

Se minha foto chamar 777a.jpg

tem como fazer excluir de uma vez
777b.jpg
777c.jpg
777d.jpg
?

Obrigado

Renato Formenton
Renato Formenton

Fernando eu uso bastante esse script, espero que ajude, até.

<?
$login=$_POST['login'];
$senha=$_POST['senha'];

$sql="SELECT login,senha FROM tabela WHERE login='$login'";
$query=mysql_query($sql);
$num=mysql_num_rows($query);
if(isset($_POST['logar'])){
if ($num<=0) {
header('Location:nao_logado.php');
}
else {
$linha=mysql_fetch_array($query);
if ($senha!=$linha[1]) {
header('Location:nao_logado.php');
}
else {
session_start();
$_SESSION['user']=$linha[0];
$_SESSION['pass']=$linha[1];
header('Location:logado.php');
}
}}
?>

Renato Formenton
Renato Formenton

esse outro aqui restrita a pagina se o usuario nao estiver logado.

Em cima de tudo no HTML vc coloca:
<?
session_start();
if (isset($_SESSION['user']) && isset($_SESSION['pass'])) {
include("conect.php");
?>

e abaixo de todo o HTML vc coloca:

<?
}
else {
header('Location:http://www.suapag.com.br');
}

?>

Nildemar Pereira
Nildemar Pereira

Tá funcionando mas quando não tem foto postada dá a seguinte mensagem: Fatal error: Call to undefined function: unlin() in C:\webmaster\excluir.php on line 108

Nildemar Pereira
Nildemar Pereira

Não tá parando na página de confirmação e tá excluindo direto.

Leandro Vieira
Leandro Vieira

A função unlin não existe, e sim unlink().

Um abraço.

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize