Jump to content


Photo

[Resolvido] Problemas Ao Excluir Imagens Do Banco


  • Faça o login para participar
14 replies to this topic

#1 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 20/05/2010, 09:55

Bom dia pessoal!!

Estou precisando da ajuda de vocês novamente...
Seguinte, eu consigo mostrar na tela as imagens para que o usuario escolha qual excluir porem quando ele clica no link de excluir, que é um X a pagina fica em branco. E a URL muda para http://www.meusite.c...letar.php?foto=
Ja mudei muitas vezes o código e nada...
Estou postando os códigos.

Listar
-------------------------------------------------------------------------------------------
<? include "config.php" ;
	if (!isset($_SESSION)) {
  	session_start();
	}
?>
<?php
	$galeria = "SELECT * FROM brincos ORDER BY id DESC LIMIT 0,30 "; 
	$galeria = mysql_query($galeria) or die("Erro no SQL: ".mysql_error());
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
</head>
<body>
<strong>Clique no X para excluir: </strong><br><br>
 	<?php while ($array_galeria = mysql_fetch_array($galeria)) { ?>
	<td>
		<tr><a href="brincos/<? echo $array_galeria[foto];?>"><img src="brincos/<? echo $array_galeria[foto];?>" width="180" height="120"></a><a href="deletar.php?foto=<?php echo $row_cfoto_rs['foto']; ?>">X</a></tr>
	</td>
	<? } ?>
</body>
</html>


Deletar
----------------------------------------------------------------------------------------------
<?php require('config.php');
?>
<?php
if (!isset($_SESSION)) {
  session_start();
}
?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

if ((isset($_SESSION['usuario_session'])) && ($_SESSION['usuario_session'] != "")) {
  $deleteSQL = sprintf("DELETE FROM brincos WHERE Id=%s",
                       GetSQLValueString($_SESSION['usuario_session'], "text"));

  mysql_select_db("dbteste3",$bd);
  $Result1 = mysql_query($deleteSQL, $bd) or die(mysql_error());

  $deleteGoTo = "listar.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}

?>
<?php
$colname_cfoto_rs = "-1";
if (isset($_SESSION['usuario_session'])) {
  $colname_cfoto_rs = (get_magic_quotes_gpc()) ? $_SESSION['usuario_session'] : addslashes($_SESSION['usuario_session']);
}
mysql_select_db("dbteste3",$bd);
$query_cfoto_rs = sprintf("SELECT * FROM brincos WHERE Id = '%s'", $colname_cfoto_rs);
$cfoto_rs = mysql_query($query_cfoto_rs, $bd) or die(mysql_error());
$row_cfoto_rs = mysql_fetch_assoc($cfoto_rs);
$totalRows_cfoto_rs = mysql_num_rows($cfoto_rs);

?><?php
$foto = $_GET['foto'];
unlink("brincos/$foto");
?>
<?php
mysql_free_result($cfoto_rs);
?>


Grata desde já!!

#2 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 20/05/2010, 10:07

Esses dois códigos estão na mesma página?
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#3 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 20/05/2010, 10:35

Oi André,
não estão na mesma página não, a pagina listar chama a pagina deletar quando o usuário clica em X, que é um link.

#4 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 20/05/2010, 11:53

Consegui ver um problema ...

Na página de listar você está usando esta variável:

<a href="deletar.php?foto=<?php echo $row_cfoto_rs['foto']; ?>

$row_cfoto_rs

Ela só está definida na página deletar... como são páginas diferentes então a página listar 'não conhece' essa variável.

Você precisa identificar aonde está a variável que tem o id para você colocar na URL para que você possa apagá-la.

Por isso você não está recebendo nenhum valor... essa variável está vazia...

http://www.meusite.c...letar.php?foto=

Você precisa do id ali na url para excluir certo...?!
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#5 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 20/05/2010, 14:11

É verdade, tanto é que mudei essa variável agora para $array_galeria[id]; e ele esta passando o id da imagem na URL, porém ainda não esta deletando, quando consulto no banco a imagem continua la... e a pagina deletar ainda fica em branco, ela tinha que voltar para listar.php...

Tenho que mudar algo no código de deletar para ele receber esse id?
Tentei mudar algumas variáveis mas não deu certo...

#6 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 20/05/2010, 14:32

Na página delete...
você precisa recuperar... este id que está vindo da URL...
Você pode recuperá-lo assim:

$id_foto = $_GET['foto'];

Depois de recuperado você constrói a instrução SQL para apagar...

Eu só não entendi porque tem esse sprintf aí para imprimir o usuario da sessão com os brincos?

    $deleteSQL = sprintf("DELETE FROM brincos WHERE Id=%s",
                       GetSQLValueString($_SESSION['usuario_session'], "text"));

Você pode construir o delete assim:
    $deleteSQL = "DELETE FROM brincos WHERE id=" . $id_foto;
                       

Supondo que a foto seja um brinco... :unsure:

Bem ... depois é só executar...
Mas tem o detalhe do arquivo que você precisa apagar ... quando apagar o registro do banco de dados..
Então você só precisa realizar uma consulta antes... para armazenar o endereço físico da imagem... e depois utilizar esse delete...
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#7 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 20/05/2010, 15:21

Entendi...
recebi o id na pagina de deletar mas ainda não resolveu :wacko: (continua indo pra pagina em branco) e tirei os sprintf, não tinha porque mesmo.
Fiz algumas alterações no código, vou postar aqui pra vc dar uma olhada.

<?php require('config.php');
?>
<?php
if (!isset($_SESSION)) {
  session_start();
}
?>

<?php
if ((isset($_SESSION['usuario_session'])) && ($_SESSION['usuario_session'] != "")) {
	
	$id_foto = $_GET['foto'];

	mysql_select_db("dbteste3",$bd);

	$selectSQL = "SELECT * FROM brincos WHERE Id=". $id_foto;
	$Result1 = mysql_query($selectSQL, $bd) or die(mysql_error());
?>
<?php
if (isset($_SESSION['usuario_session'])) {

	mysql_select_db("dbteste3",$bd);

  	$deleteSQL = "DELETE FROM brincos WHERE id=" . $id_foto;
	$Result2 = mysql_query($deleteSQL, $bd) or die(mysql_error());

  $deleteGoTo = "listar.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header("Location: %s", $deleteGoTo);
}

?>
<?php
$foto = $_GET['foto'];
unlink("brincos/$foto");
?>


#8 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 20/05/2010, 16:13

Você viu se deletou do banco de dados...?

<?php

require('config.php');

if (!isset($_SESSION)) {
  session_start();
}

if ((isset($_SESSION['usuario_session'])) && ($_SESSION['usuario_session'] != "")) {
        
        $id_foto = $_GET['foto'];

        mysql_select_db("dbteste3",$bd);

        $selectSQL = "SELECT * FROM brincos WHERE Id=". $id_foto;
        $Result1 = mysql_query($selectSQL, $bd) or die(mysql_error());


        mysql_select_db("dbteste3",$bd);

        $deleteSQL = "DELETE FROM brincos WHERE id=" . $id_foto;

        $Result2 = mysql_query($deleteSQL, $bd) or die(mysql_error());
  
        $foto = $_GET['foto'];// para apagar a foto você precisa do caminho físico, verifique se este é o caminho mesmo?
        unlink("brincos/$foto");// a não ser que você esteja utilizando o id da imagem como nome dela na hora do upload

        header("Location: listar.php");
}
?>

Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#9 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 20/05/2010, 16:37

Então, eu consultei o banco e ainda não deletou nada...
Estou confirmando o caminho físico do unlink aqui.

#10 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 20/05/2010, 17:05

Então, eu consultei o banco e ainda não deletou nada...
Estou confirmando o caminho físico do unlink aqui.


O campo da tabela está nomeado como id mesmo?


Posta o sql da criação da tabela para verificação.
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#11 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 20/05/2010, 23:02

create table brincos(
id int (15) not null, (auto_increment)
foto varchar (50) not null,
PRIMARY KEY (id ));

Oi André,
estou conseguindo graças a vc!!
Ja esta excluindo no banco :lol:
Mas da pasta não... estava verificando o caminho como você falou:

$imagem_nome = $_GET['foto'];// para apagar a foto você precisa do caminho físico, verifique se este é o caminho mesmo?
unlink("brincos/.$imagem_nome");// a não ser que você esteja utilizando o id da imagem como nome dela na hora do upload


E o caminho é esse mesmo, devo estar errando na variavel passada como parâmetro, vou postar aqui o código que armazena a imagem na pasta:

// Gera um nome único para a imagem
        $imagem_nome = md5(uniqid(time())) . "." . $ext[1];

        // Caminho de onde a imagem ficará
        $imagem_dir = "brincos/" . $imagem_nome;

Aí tentei passar a variável $imagem_nome como parâmetro porem não deu certo pq ela não é "conhecida" no arquivo deletar, e mesmo eu declarando a mesma como no arquivo de upload não da certo.

Grata mais uma vez!

#12 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 21/05/2010, 09:08

A exclusão do arquivo deve ter o caminho relativo para o arquivo que você quer apagar... da pasta que você está tentando apagar.

Por exemplo...

Se você tem esse arquivo na raiz do site

E a pasta brincos está em um nível logo abaixo...

Então você deve ter o caminho assim: brincos/nome_da_imagem

Verifique este caminho ... e neste caso você está gerando uma id única para cada nome de imagem

então você também deve ter salvo o nome da imagem na hora do upload... certo!?
Agora é só verificar o caminho mesmo...
:click:
(y)
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#13 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 24/05/2010, 09:43

Oi André,
Mudei o código listar.php, para ele passar o nome da foto junto com o id para o código deletar.php

aí ficou assim:

<?php while ($array_galeria = mysql_fetch_array($galeria)) { ?>
	<td>
		<tr><a href="brincos/<? echo $array_galeria[foto];?>"><img src="brincos/<? echo $array_galeria[foto];?>" width="180" height="120" alt="" /></a><a href="deletar.php?foto=<?php echo $array_galeria[id]; ?>&nome=<?php echo $array_galeria[foto];?>">X</a></tr>
	</td>
	<? } ?>

onde eu acrescentei:

<b>&nome=<?php echo $array_galeria[foto];?></b>

com isso a URL fica assim:

http://www.meusite.c...52d205d59b9.JPG

e o unlink ficou assim:

$nome = $_GET['nome'];
		unlink(brincos/$nome);

Mas agora não esta apagando em lugar nenhum, nem na pasta e nem no banco, vc sabe o que pode ser?

Verifiquei o caminho da imagem e esta tudo certo, a pasta brincos esta no mesmo nível da pagina listar e deletar...

#14 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 25/05/2010, 10:11

Vamos lá... Primeiro excluindo o registro do banco:

Se você passou o id pela URL...
Então você irá recuperá-lo via GET certo?!

$id_foto = $GET['foto'];

Após recuperar o id você constrói o comando sql para apagar

$sql = "DELETE FROM brincos WHERE id=" . $id_foto;

Pronto SQL feito...

Agora se a pasta está no mesmo nível desses arquivos...
Talvez só faltem as aspas:

  $nome = $_GET['nome'];
  $caminho_imagem = 'brincos/' . $nome;
  unlink($caminho_imagem);

Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#15 caiçara_MG

caiçara_MG

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:uberaba

Posted 26/05/2010, 12:10

Hum... entendi...
agora sim esta dando certo!! :P
Muito obrigada André!!

[RESOLVIDO]




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq