Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Danilo Nicoletti

[Resolvido] Deletar Arquivos com Checkbox

Recommended Posts

Ola membros do imasters sou novo no forum to postando minha primeira duvida, mas creio ser a duvida de muitos fanaticos por php..

 

tenho um sistema de cadastro de informações e fotos.

Ex: "cadastro a informação e a foto"

Antes conseguia revomer a informação e a foto, mas isso um por um

agora to tentando colocar um checkbox... para poder apagar tudo ao mesmo tempo !!

 

ele chega a apagar a impormação e a foto nao apaga

se alguem puder me ajudar agradeço

 

segue o codigo

 

Nome: exclusao2.php

<?php require_once('../Connections/login.php'); ?>
<?php require_once('Connections/Login.php');?>
<?php $cn = mysql_connect('localhost','root','12345678');
mysql_select_db('login', $cn); ?>
<?php
if (!isset($_SESSION)) {
 session_start();

}

?>
<?php

if ((isset($_GET['id'])) && ($_GET['id'] != "")) {
 $deleteSQL = sprintf("DELETE FROM foto_calendario WHERE id=%s",
                      GetSQLValueString($_GET['id'], "int"));

 mysql_select_db($database_Login, $Login);
 $Result1 = mysql_query($deleteSQL, $Login) or die(mysql_error());

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

?>
<?php
mysql_select_db($database_Login, $Login);
$query_cfoto_rs = "SELECT * FROM foto_calendario WHERE classe = '".$_GET['classe']."' AND foto = '".$_GET['foto']."'  ORDER BY foto ASC";
$cfoto_rs = mysql_query($query_cfoto_rs, $Login) or die(mysql_error());
$row_cfoto_rs = mysql_fetch_assoc($cfoto_rs);
$totalRows_cfoto_rs = mysql_num_rows($cfoto_rs);

?>
<?php 
$deleteGoTo = "cad_fotos.php";
unlink  ('pequenas/'.$_GET['classe'].'/'.$_GET['foto'].'');

if(isset($_POST['deletar']) && is_array($_POST['deletar'])) {
   // para cada id de produto na lista
   foreach($_POST['deletar'] as $id) {
       // remove o determinado produto
       mysql_query("delete from foto_calendario where id = ".(int)$id);
   }
header(sprintf("Location: %s", $deleteGoTo));
}
?>
<?php
mysql_free_result($cfoto_rs);
?>

esse é o form do cadastro

<form name="remover" action="exclusao2.php" method="post">
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">

   <tr bgcolor="#999999" class="style11">
     <td height="34" colspan="4" bgcolor="#FFFFFF" >
       <div align="center">
         <img src="images/bercario.gif" width="639" height="27" />
       </div>
     </td>
   </tr>
 <tr bgcolor="#999999" class="style11">
   <td width="6%" height="26" ><div align="center">Dia</div></td>
     <td width="43%" ><div align="center">Turma</div></td>
     <td width="44%" ><div align="center">Nome da Foto</div></td>
     <td width="7%" > </td>
   </tr>
   <?php do { ?>
   <tr bgcolor="<?php echo ($ac_sw1++%2==0)?"#DBDBDB":"#FFFFFF"; ?>" onmouseout="this.style.backgroundColor=''" onmouseover="this.style.backgroundColor=''" class="style11">
     <td height="27" >
       <div align="center">
          <?php echo $row_bercario['dia_mes']; ?> - <?php echo $row_bercario['dia_semana']; ?>
       </div>
     </td>
     <td>
       <div align="center">
         <?php echo $row_bercario['classe']; ?>
       </div>
     </td>
     <td width="44%" >
       <div align="center">
         <?php echo $row_bercario['foto']; ?>
       </div>
     </td>
     <td>
        <div align="center">
           <input type="checkbox" name="deletar[]" value="<?php echo $row_bercario['id'] ?>" />
        </div>
     </td>
  </tr>
       <?php } while ($row_bercario = mysql_fetch_assoc($bercario)); ?>
  <tr class="style11">
     <td height="15" > </td>
     <td> </td>
     <td> </td>
     <td> </td>
  </tr>
  <tr>
    <td height="37" colspan="5" align="center">
      <input type="submit" name="acao" value="Remover" /> 
    </td>
  </tr>
</table>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem esse jeito


<input type="checkbox" name="foto[]" value="<?php echo $row_bercario['foto'] ?>" />
$fotos = $_POST['foto'];

for($i =0; $i<count($fotos);$i++){
query delet
unlink('caminho/$fotos[$i]');
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja um exemplo de como excluir múltiplos dados:

 

http://forum.imasters.com.br/index.php?/topic/289419-selecionando-multiplos-registros-para-exclusao/

 

Dê uma estudada e adapte ao seu script.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Alaerte, mas isso já esta feito

 

eu consigo deletar todos os registros via checkbox mas meu problema esta aki

 

$deleteGoTo = "cad_fotos.php";unlink ('pequenas/'.$_GET['classe'].'/'.$_GET['foto'].'');

 

preciso deletar o registro mas o arquivo pertencente a ele e com o checkbox

só consigo deletar o registro

 

;)

 

Se Existir uma Função que possa apagar todo os arquivos de uma vez

e deixa soh o Registro para q eu possa depois apagalos

 

tambem sera bem vida!!!

 

Mais uma vez Obrigado !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... vamos lá...

 

Habilite todas as mensagens de erro.

 

<?php
ini_set('display_errors', 1); 
error_reporting(E_ALL);
?>

Tente executar novamente. Veja se aparece algum erro.

 

Veja também o manual para a correta utilização da função unlink.

http://br.php.net/unlink

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode verificar se o caminho para a foto esta certo.

e tambem tenta colocar o unlink ('pequenas/'.$_GET['classe'].'/'.$_GET['foto'].''); dentro do foreach, so que voce tem que apagar a foto antes de apagar o registro.

 

tenta ai, pode ser que de certo.

 

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

matias

 

o erro é esse

 

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\apache2triad\htdocs\horizonte\exclusao2.php:6) in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 12

 

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\apache2triad\htdocs\horizonte\exclusao2.php:6) in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 12

Notice: Undefined index: classe in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 37

Notice: Undefined index: foto in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 37

Notice: Undefined index: classe in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 38

Notice: Undefined index: foto in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 38

Warning: unlink(pequenas//): Permission denied in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at C:\apache2triad\htdocs\horizonte\exclusao2.php:6) in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 54

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teu código tá estranho... Olha só.

 

<?php require_once('../Connections/login.php'); // aqui você inclui uma conexão?>
<?php require_once('Connections/Login.php'); // aqui você inclui outra conexão?>
<?php $cn = mysql_connect('localhost','root','12345678');// aqui você conecta de novo??????
mysql_select_db('login', $cn); ?>

Sobre os erros.

 

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\apache2triad\htdocs\horizonte\exclusao2.php:6) in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 12

 

http://forum.imasters.com.br/index.php?/topic/342563-dicas-para-uso-de-variaveis-de-sessao/

 

Notice: Undefined index: classe in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 37

Notice: Undefined index: foto in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 37

Notice: Undefined index: classe in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 38

Notice: Undefined index: foto in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 38

 

Você está tentando usar variáveis que não existem. Veja o que tem nas linhas ali descritas.

 

Warning: unlink(pequenas//): Permission denied in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 38

 

Veja a foto que está tentando excluir... está tudo em branco... ou seja, não pegou as variáveis. Veja de onde elas vem e se estão corretas.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na Verdade é assim

<?php
// arquivo deletar.php
// conexao
$cn = mysql_connect('localhost','root','12345678');
mysql_select_db('login', $cn);
// se tiver uma lista para remoção
if(isset($_POST['deletar']) && is_array($_POST['deletar'])) {
   // para cada id de produto na lista
   foreach($_POST['deletar'] as $id) {
       // remove o determinado produto
       mysql_query("delete from foto_calendario where id = ".(int)$id);
   }
}
// redireciona para a página de produtos
header("Location: cad_calendario.php");
?>

esse codigo deleta os checkbox sem o arquivo

<?php require_once('../Connections/login.php'); ?>
<?php require_once('Connections/Login.php'); ?>
<?php
if (!isset($_SESSION)) {
 session_start();

}

?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($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($_GET['id'])) && ($_GET['id'] != "")) {
 $deleteSQL = sprintf("DELETE FROM foto_calendario WHERE id=%s",
                      GetSQLValueString($_GET['id'], "int"));

 mysql_select_db($database_Login, $Login);
 $Result1 = mysql_query($deleteSQL, $Login) or die(mysql_error());

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


?>
<?php
mysql_select_db($database_Login, $Login);
$query_cfoto_rs = "SELECT * FROM foto_calendario WHERE classe = '".$_GET['classe']."' AND foto = '".$_GET['foto']."'  ORDER BY foto ASC";
$cfoto_rs = mysql_query($query_cfoto_rs, $Login) or die(mysql_error());
$row_cfoto_rs = mysql_fetch_assoc($cfoto_rs);
$totalRows_cfoto_rs = mysql_num_rows($cfoto_rs);


?>
<?php 
$deleteGoTo = "cad_fotos.php";
unlink  ('pequenas/'.$_GET['classe'].'/'.$_GET['foto'].'');
header(sprintf("Location: %s", $deleteGoTo));
?>

<?php
mysql_free_result($cfoto_rs);

?>

esse codigo deleta o arquivo

 

 

ai eu só tentei junta os dois ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... mas e aí? Corrigiu o que eu falei no post anterior?

 

Carlos Eduardo

 

Obs: Quando postar códigos, utilize o BBCode [ c o d e ] (segundo botão da direita para esquerda, logo em cima) para postar os códigos. Facilita a leitura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\apache2triad\htdocs\horizonte\exclusao2.php:6) in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 10 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\apache2triad\htdocs\horizonte\exclusao2.php:6) in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 10 Notice: Undefined variable: database_Login in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 32 Notice: Undefined variable: Login in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 32 Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 32 Notice: Undefined index: classe in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 33 Notice: Undefined index: foto in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 33 Notice: Undefined variable: Login in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 35 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\apache2triad\htdocs\horizonte\exclusao2.php on line 35

 

As Linhas

 

6 - <?php $cn = mysql_connect('localhost','root','12345678');

10 - session_start();

32 e 33 - mysql_select_db($database_Login, $Login);

$query_cfoto_rs = "SELECT * FROM foto_calendario WHERE classe = '".$_GET['classe']."' AND foto = '".$_GET['foto']."' ORDER BY foto ASC";

35 - $cfoto_rs = mysql_query($query_cfoto_rs, $Login) or die(mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, leia os erros, tente entender o que eles dizem e tente solucionar sozinho.

Leia também o tópico que eu te passei antes, sobre como trabalhar com session.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Diaaaa

 

Carlos Descobri o erro, mas nao seri como arrumar

=D

 

 

a session nao ia funcionar mesmo pois antes eu pegava o $_GET pelo aref

"<a href="deletar.php?classe=<?php echo $row_mini['classe']; ?>&foto=<?php echo $row_mini['foto']?>&id=<?php echo $row_mini['id']; ?>">"

 

Agora ele usa um Form

<form name="remover" action="exclusao2.php" method="post">

 

como eu faço pra pegar a variavel pelo form

 

E Obrigado pela paciencia... sou novo em php e no forum tbm

Vlwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você pega uma variável que vem da url, como por exemplo.

 

www.site.com.br/index.php?classe=pagina&foto=1&id=99

 

Você usa $_GET['classe']... certo?

 

Para pegar dados de formulário, depende do método utilizado (pode ser POST ou GET). Caso seja GET, você pega igual, mas as informações vão ficar disponíveis na URL. Caso seja POST, você usa... $_POST['nome_do_campo_do_formulario'].

 

http://br.php.net/manual/pt_BR/reserved.variables.post.php

http://br.php.net/manual/pt_BR/reserved.variables.get.php

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso Mesmo usava esse processo

 

mas desculpa a minha ignorancia

 

<input type="checkbox" name="deletar[]" value="<?php echo $row_bercario['id'] ?>" />

 

o nome do campo do formulario seria esse em neguito

pra puxar a informação do $row_bercario['id']

 

se eu estiver certo

 

como faz pra pegar mais de uma iformação

 

Cara que Burro que eu Sou =P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você passa o valor desta forma no formulário, você recebe como um array. Coloque este código no início do script da página que recebe os dados do formulário.

 

<?php
echo '<pre>';
print_r($_POST);
die();

Vai exibir um array de tudo que foi enviado. Faça isto apenas para debug, para entender como o PHP envia estas informações. Depois você tira este código, OK?

 

Poderia te dar o código pronto, mas aí você não vai entender o que está fazendo, por isto estou te mostrando assim.

 

Se tiver mais alguma dúvida, pode perguntar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw Carlos.... é que nao quero ser chato tbm =P

 

ele imprimiu esse codigo

Array
(
    [deletar] => Array
        (
            [0] => 357
            [1] => 358
        )

    [acao] => Remover
)

 

To tentando entende rsrs.. mas ta dificil

 

Sabe o que to axando estranho tbm ... ele pede pra deletar 2x do banco de dados

if(isset($_POST['deletar']) && is_array($_POST['deletar'])) {
   foreach($_POST['deletar'] as $id) {
       mysql_query("delete from foto_calendario where id = ".(int)$id);
   }

e AKI

if ((isset($_POST['id'])) && ($_POST['id'] != "")) {
 $deleteSQL = sprintf("DELETE FROM foto_calendario WHERE id=%s",
                      GetSQLValueString($_POST['id'], "int"));

e se eu tirar qualquer um dos dois nao dela o resgistro

Compartilhar este post


Link para o post
Compartilhar em outros sites

O segundo não deve funcionar, a não ser que tenha outra parte do formulário que tenha o nome de $_POST['id'].

 

Agora vamos explicar o código.

 

Array
(
    [deletar] => Array
        (
            [0] => 357
            [1] => 358
        )

    [acao] => Remover
)

Isto significa que você tem um array no post. Para acessar, utilize $_POST['deletar'][0] ou [1]... e assim vai. Outra forma de acessar é utilizando laço de repetição (como por exemplo o foreach que está sendo utilizado ali em cima).

http://br.php.net/manual/pt_BR/control-structures.foreach.php

 

O primeiro código é o correto. Vou explicar ele.

 

// aqui você testa se está setado $_POST['deletar'] e testa se é um array
if(isset($_POST['deletar']) && is_array($_POST['deletar'])) {
    // aqui você começa o laço.
    // o que quer dizer... para cada $_POST['deletar'], que dentro da função vai ser chamado de $id, faça...
    foreach($_POST['deletar'] as $id) {
        // aqui você executa a query.
        // neste exemplo, a $id vai ter, na primeira iteração, o valor de 372
        // na segunda iteração, vai ter valor de 358
        // quando você coloca (int), você está dizendo que $id tem que ser um inteiro. Se não for, terá valor 0
        mysql_query("delete from foto_calendario where id = ".(int)$id);
    }

Leia os comentários dentro do seu código.

http://br.php.net/isset

http://br.php.net/is_array

http://br.php.net/manual/pt_BR/book.array.php

 

Se mesmo com este primeiro código não estiver funcionando, pode ser que esteja gerando algum erro no mysql. Para isto, troque esta linha.

 

       mysql_query("delete from foto_calendario where id = ".(int)$id);

 

Por esta

 

       mysql_query("delete from foto_calendario where id = ".(int)$id) or die(mysql_error());

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.