Php/mysql excluir registros selecionados

7 respostas
I

oi fiz um programa que faz o seguinte--->cadastra usuario no banco de dados ,faz algumas validações ,mostra um tabela com todos os registros já cadastrados cada um com um botao radio para o usuario clicar e deletar esse registro .....só que o problema é que não ta excluindo não sei o que ta errado

alguem pode me ajudar???
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	
	<head>
		<meta charset="utf-8"/>
		<link rel="stylesheet" type="text/css" href="estilo.css" >
		
	</head>
<body>
	
	<?php
	include ("conectabanco.php");

	$nome= $_POST["nome"];
	$email= $_POST["email"];
	$senha= $_POST["senha"];
	
	$sql2= "SELECT *FROM cadastrar WHERE nome='$nome' AND email='$email' AND senha='$senha'";
	$mysql_result=mysql_query($sql2,$base);
	
	if(substr_count($email,"@")==0|| substr_count($email,".")==0){
		
		echo"<div align=center >por favor ,utilize um e-mail válido</p>";
		echo "<a href='index.html'>voltar</a></div>";
		exit;
		}
	
	$num_rows= mysql_num_rows($mysql_result);
	if($num_rows!=0){
		echo"<div align=center>cadastro duplicado,escolha outro dado" ; 
		echo "<br>"; echo "<a href='index.html'>voltar</a></div>";
		exit;
		}
	
	
	else{
				
				$sql = "INSERT INTO cadastrar(nome, email, senha) VALUE('".$nome."','".$email."','".$senha."')"; 
				$resultado = mysql_query($sql) or die (mysql_error());
		
				$sql = "SELECT * FROM cadastrar";
				$resultado = mysql_query($sql) or die (mysql_error());
				
				echo "<div align='center'><table border='1' id='cor2'>
					<thead id=cor>
						<tr width=800>
							<td width=200>REGISTRO</td>
							<td width=200>NOME</td>
							<td width=200>E-MAIL</td>
							<td width=200>SENHA</td>
							<td width=200>DELETAR</td>
						</tr>
					</head>
					</table></div>";
					$pa = 0;
				while ($linha = mysql_fetch_array($resultado)) {
					$id[] = $linha;
					$idao = $id[$pa]["id"];
					$nome = $id[$pa]["nome"];
					$email = $id[$pa]["email"];
					$senha = $id[$pa]["senha"];

					echo "<div align='center'><table border='1' id='cor2'>
					<tbody id=cor2>
						<tr width=800>
							<td width=200>$idao</td>
							<td width=200>$nome</td> 
							<td width=200>$email</td> 
							<td width=200>$senha</td>
							<td width=200><form action='excluir.php' method='post'><input type='radio' name='selection' value='$id' id=oi/></form></td>
						</tr>
					</tbody>
					</table></div>";
					
					$pa++;
					
				}
				echo"<div align=center>
				<form id ='fo' name ='for' action='excluir.php' method='pos't>
				<table border=1 id=cor2>
					<tbody id=cor2>
						<tr width=800>
							<td width=820></td>
							<td width=200><input type='submit' name='deletar' value='excluir'></td>	
						</tr>
					</tbody>
					</table>
					</form></div>";
					  echo "<p align=center><a href='index.html'>voltar</a></p>";
					
		}
							
			
	?>
	</body>
	</html>
excluir.php
<?php
include ("conectabanco.php");
                
if(isset($_POST["selection"]))
{

	$reul=mysql_query("DELETE FROM cadastrar WHERE id IN (".implode(",",$_POST["selection"]).")");
	
	
	header("refresh:0");
}
if($reul){
		echo"campos deletados com sucesso!";
		}
	else{
		echo"campos não deletados com sucesso!";
		}	
?>

7 Respostas

T

Buenas,

Eu faço geralmente assim

<td width="20" class="bt_acoes">
        	<a href="cadastra_tbaparelhos_cli.php?fk_tbcliente=<?=$sqlClienteResultFim["idtbcliente"]?>&voltarpara=lista_tbclientes.php">
            	<img src="imagens/aparelhos.png" alt="Adicionar Aparelhos" height="18"/>
            </a>
</td>

Caso não queira fazer desta forma e queira com possibilidade de múltipla exlusão acredito que deveria fazer da seguinte forma

Adicionar no evento onChange do checkBox e fazer um a ação para ir preenchendo por ajax o input com os ids separados por “,” vírgula que deseja excluir, caso o usuário desmarcar vc retira do input

Acesse: www.tiagoek.com.br

I

na verdade eu só quero excluir um registro que estiver selecionado

D

Pela estrutura de if/else para validar $reul, não dá para saber se ele não foi criado por não ter sido executada a query ou se foi pelo fato de isset($_POST[“selection”]) ter sido falso.
Eu alteraria para:

<?php  
    include ("conectabanco.php");  
                      
    if(isset($_POST["selection"]))  
    {  
      
        $reul=mysql_query("DELETE FROM cadastrar WHERE id IN (".implode(",",$_POST["selection"]).")");
//aqui eu adicionaria um or die(mysql_error()); só para constar...  
          
    if($reul){  
            echo"campos deletados com sucesso!";  
            }  
        else{  
            echo"campos não deletados com sucesso!";  
            }     
          
        header("refresh:0");  
    }else{
echo "Nenhum registro selecionado!";
//ou qualquer mensagem mais adequada
}
    ?>
I

É uma boa ideia drsmachado, só que meu problema está na hora de reconhecer a variavel por meio post que não está sendo reconhecida quando tento exclui aparece uma msg erro assim

Warning: implode() [function.implode]: Invalid arguments passed in C:\xampp\htdocs\imprimeDados\excluir.php on line 17 campos não deletados com sucesso! Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\imprimeDados\excluir.php:10) in C:\xampp\htdocs\imprimeDados\excluir.php on line 27

D

Me parece que o PHP está se perdendo quando você usa apenas as aspas duplas…

$reul=mysql_query("DELETE FROM cadastrar WHERE id IN (".implode(",",$_POST["selection"]).")");

Eu faria isso:

$reul=mysql_query("DELETE FROM cadastrar WHERE id IN (".implode(',',$_POST['selection']).")");

Outra coisa, já verificou o que está sendo passado como valor em $_POST[‘selection’]? Caso o valor dentro desse parâmetro (ou seja, o valor de $id) não contenha a vírgula, o implode não surtirá efeito…

I

como assim? na hora de passar o valor uso virgula? onde? eu to fazendo assim

como seria ?

D

Esquece, eu confundi implode com explode. Pressa, desde semrpe, quando misturada à miopia, fazendo você errar a resposta.

Os ids são as chaves primárias?
Se são, por que você precisa utilizar o IN ao invés do “=”?
Aí você dispensa o implode que pode estar gerando sujeira no parâmetro.

Criado 13 de setembro de 2011
Ultima resposta 29 de set. de 2011
Respostas 7
Participantes 3