Ir para conteúdo

POWERED BY:

Arquivado

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

Nick-pc

Mensagem de erro ao tenta apagar Valores por seleção

Recommended Posts

Tenho o seguite código na página "registros_delete.php":

 

<?php

foreach($_POST['checkbox'] as $checks)
{
   $sql = "delete from tabela where id = $checks";
   $exe = mysql_query($sql);
}
?>

E na outra página tenho uma tabela com uma área repetitiva com o seguinte tag ao ldao do id e nome dos campos criados pelo formulário:

 

<input type="checkbox" name="checkbox" id="checkbox" />

 

e o botão apagar:

 

<form id="form1" name="form1" method="post" action="registros_delete.php">

<input type="submit" name="Submit" id="Submit" value="Apagar" />

</form>

 

Quando vou tentar apagar aparece na nova página a menssagem de erro:

Warning: Invalid argument supplied for foreach() in /home/a6977514/public_html/admin/registros_delete.php on line 3

 

Como resolvo isso e outra dúvida é como posso deixar uma menssagem de validação para os checkboxs que impedi de deixar sem selecionar nenhum campo de seleção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro do foreach é claro. O argumento passado para o foreach é inválido, ou seja, não é um array. Para evitar isto, antes de fazer o foreach, verifique se a variável é um array, utilizando a função is_array.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

if(is_array($_POST['checkbox'])

{

foreach($_POST['checkbox'] as $checks)

{

$sql = "delete from tabela where id = $checks";

$exe = mysql_query($sql);

}

}

else

{

$sql = "delete from tabela where id = ".$_POST['checkbox'];

$exe = mysql_query($sql);

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode me dar um exemplo?

 

 

O name do checkbox tem que ser o mesmo para todos, o que vai mudar é o valor dele <input type="checkbox" name="checkbox" value="mamao">, <input type="checkbox" name="checkbox" value="banana">... ... para que ele se torne um array é necessário que possua mais de um valor após isso você pega o valor referente aos checkbox selecionados da seguinte forma:

 

$checks = $_POST['checkbox'];

 

Lembrando que ele só será um array se houver mais de um checkbox marcado... para deletar das duas formas você deve verificar se é um array ou não com um condicional e utilizar o is_array($checks)...

 

Acho que é isso...

 

Grande abraço, até...

 

O exemplo acima está dizendo tudo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro que está dando após tentar apagar:

 

Parse error: syntax error, unexpected '{' in /home/.../.../.../registros_delete.php on line 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eh que faltou um parenteses.

Desculpa o erro foi meu:

if(is_array($_POST['checkbox'])) // aqui faltou.
{

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora está dando os seguintes erros:

 

Warning: mysql_query() [function.mysql-query]: Access denied for user 'nobody'@'localhost' (using password: NO) in /home/.../.../.../registros_delete.php on line 21

 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/.../.../.../registros_delete.php on line 21

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quer que eu traduza os erros para você ? ¬¬

Erro1: mysql_query() [function.mysql-query]: Access denied for user 'nobody'@'localhost' (using password: NO) in /home/a6977514/public_html/admin/registros_delete.php on line 21

 

Acesso Negado para o Usuário Nobody

 

Erro2: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/a6977514/public_html/admin/registros_delete.php on line 21

 

Um link para conexão não pode ser estabelecido

 

Verique seu usuário e senha para conectar no banco no seu PHP:

mysql_connect()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora não tem nenhum erro, mas o registro não está sendo exluido. Eu mando apagar e é direcionado para a página de exclusão em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quer apagar diversos registros de uma vez, não vejo vantagem em mandar os IDs em um array pra depois fazer uma requisição em cada loop.

 

Que tal você gravar os IDs em uma string separando cada ID por vírgula e em registros_delete.php colocar:

 

$sql = "delete from tabela where id IN ($checks");

$exe = mysql_query($sql);

Assim não precisa de Array nem loop, e apaga todos os registros de uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quer apagar diversos registros de uma vez, não vejo vantagem em mandar os IDs em um array pra depois fazer uma requisição em cada loop.

 

Que tal você gravar os IDs em uma string separando cada ID por vírgula e em registros_delete.php colocar:

 

$sql = "delete from tabela where id IN ($checks");

$exe = mysql_query($sql);

Assim não precisa de Array nem loop, e apaga todos os registros de uma vez.

 

Você sabe como faço para receber uma menssagem caso nenhum checkbox estiver marcado e dar um exemplo do caso que você citou de não usar array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Viu Nick, continua de onde você estava, esta forma que o Tarilonte falou já está resolvida aqui:

<?php
if(is_array($_POST['checkbox']))
{
   foreach($_POST['checkbox'] as $checks) 
   {
      $sql = "delete from tabela where id = $checks";
      $exe = mysql_query($sql);
   }
}
else
{
      $sql = "delete from tabela where id = ".$_POST['checkbox'];
      $exe = mysql_query($sql);
}
?>

Se você quer verificar se algum checkbox foi checado ou não. Ou você faz em javascript ou faz assim antes desse if:

if($_POST['checkbox'] == "")
{
   echo "Você não selecionou nenhum checkbox";
}
else
{
   if(is_array($_POST['checkbox']))
   {
      foreach($_POST['checkbox'] as $checks) 
      {
         $sql = "delete from tabela where id = $checks";
         $exe = mysql_query($sql);
      }
   }
   else
   {
       $sql = "delete from tabela where id = ".$_POST['checkbox'];
       $exe = mysql_query($sql);
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está apagando e nem funcionado a menssagem caso nenhum checkbox esteja desmarcado, só aparece uma pagina com "Você não selecionou nenhum checkbox".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste como você gera o HTML do formulário, onde você cria os checkbox.

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.