Logo Hardware.com.br
Goj1
Goj1 Membro Senior Registrado
415 Mensagens 5 Curtidas

[Resolvido] PHP e MySQL, exclusão de dados.

#1 Por Goj1 06/08/2012 - 12:48
Boa tarde pessoal!

Estou criando um site para testar meus conhecimentos e fiz um formulário de exclusão como vou citar no código abaixo.

O problema é que quando clico no botão Excluir não exclui o valor do banco e aparece uma mensagem de variável (idmural) não definida na linda 96, mas a mensagem de "Deletado com sucesso" aparece.

Testei uma coisa, quando eu removo o $_POST[idmural] pelo número do id no banco, dá certo. O que eu estou fazendo de errado?
Vejam o código:


<!DOCTYPE html>
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="estilo.css">
<?php
include("../connections/connection.php&quot;
$sql = mysql_select_db($database_Connection)
or die("Erro ao conectar ao banco de dados, contate o administrador!&quot;
?>

</head>
<body id="bodypainel">
<div id="sair">
<a href="<?php echo $logoutAction ?>">Sair</a>
</div>
<div id="logopainel" > <img src="painel2.png" /> </div>
<div id="painel">
<?php
if (isset($_POST['apagar']) && $_POST['apagar'] == "excluir&quot{
$deleta = mysql_query("DELETE FROM mural WHERE idmural = '$_POST[idmural]'&quot; <----------Linda 96
if ($deleta == 1) {
echo "Deletado com sucesso!";
} else {
echo "Erro ao deletar!";
}
}
?>
<form id="form1" name="form1" mathod="post" action="" enctype="mulpart/form-data">
<table border="0" align="center">
<tr>
<td id="titulo" colspan="2">Cadastrar Novo Mural</td>
</tr>
<tr>
<td>Título</td>
<td><input id="campo" type="text" name="titulo" size="62" placeholder="Título do novo mural"></td>
</tr>
<tr>
<td>Texto</td>
<td></td>
</tr>
</table>
</form>
</div>
<!--Painel-->

<div id="painel">
<?php
$sql = "SELECT idmural, titulo FROM mural ORDER BY data DESC, idmural DESC";
$resultado = mysql_query($sql) or die(mysql_error());
if (@mysql_num_rows($resultado) == 0) {
echo "Nenhum registro encontrado!";
}
?>
<form id="form2" name="form2" method="post" action="" enctype="">
<table align="center">
<tr>
<td><select>

<?php
while ($linha = mysql_fetch_array($resultado)) {
$idmural = $linha[0];
$titulo = $linha[1];
?>

<?php
}
?>
</select></td>

<td>
<input type="hidden" name="apagar" value="excluir" />
<input id="excluir" type="submit" name="excluir" value="Apagar Mural" />
</td>
</tr>
</table>
</form>
</div><!--Painel-->
</body>
</html>
Obrigado pela atenção.
spidermanx
spidermanx Zerinho Registrado
188 Mensagens 13 Curtidas
#2 Por spidermanx
06/08/2012 - 21:06
Troque isso:

Goj1 disse:


Por isso:

[PHP]
$deleta = mysql_query("DELETE FROM mural WHERE idmural = " . $_POST['idmural']);
[/PHP]

Até onde sei o php não consegue tratar o $_POST dentro de string então pra ele acaba sendo texto mesmo justamente porque o conteúdo do $_POST (no caso o idmural) deve ser declarado como texto: 'idmural'.
"Conhecimento dá poder, mas só o caráter grangeia respeito." Bruce Lee
Goj1
Goj1 Membro Senior Registrado
415 Mensagens 5 Curtidas
#3 Por Goj1
07/08/2012 - 01:14
Fiz z alteração e deu o mesmo erro, como mostra a mensagem na imagem.
Não entendo, no banco o está como idmural, no select está como idmural. Não sei pq o $_POST não está pegando o idmural.

O mais engraçado é que no tutorial que vi isso, está exatamente assim e finciona com assim '$_POST[id]'.

Não tem outra maneira de eu jogar a execução para a própria página sem usar o campo hidden? Creio que o erro está nele, mas não consigo identificar.

spider, suas dicas são ótimas, aprendo muito com elas, obrigado!
Pense fora da caixinha!
spidermanx
spidermanx Zerinho Registrado
188 Mensagens 13 Curtidas
#4 Por spidermanx
07/08/2012 - 08:30
Goj1 disse:


Tranquilo cara, o fórum está aqui pra isso mesmo, eu também quando tiver alguma dúvida, com certeza serei atendido.

Agora observando seu código melhor, vi que você não nomeia o combo (select), assim o php nunca irá pegar o selecionado:


<select name="idmural"> <!-- Esse é o pulo do gato pro php pegar o id correto -->
[php]
<?php
while ( $registro = mysql_fetch_array( $sql ) ) {
$idmural = $registro['idmural']; // boas práticas para colocar variável dentro de string's
echo "";
}
?>
[/php]
</select>
O campo hidden nesse caso não faz diferença, já o combo no php não muda nada:

[php]
$combo = isset($_POST['idmural']) ? $_POST['idmural'] : 0; // boas práticas para depois colocar essa variável numa string de sql.
$sql = mysql_query("DELETE FROM tabela WHERE idmural = $combo");
[/php]Daí talvez você se pergunta, mas como o php vai saber qual opção eu selecionei pra ele apagar o id correto?

Eu te respondo, o php sempre pegará o que estiver selecionado.

Também depois de executar a query, você consegue pegar o erro, caso o banco/tabela esteja com problemas:

[php]
if ( $sql ) { // testa o sql montado
echo "Apagou o id $combo com sucesso!";
} else {
echo 'Deu zica aqui, será o sql, tabela, banco? Erro: ' . mysql_error();
}
[/php]Outra dica, cuidado com string's em aspas simples e/ou duplas ao incluir variáveis dentro (como nos exemplos acima).

Também cuidado com o conteúdo de tutos da net, muitos podem ao invés de ajudar, atrpalhar ainda mais como no caso da aspa fora do $_POST, uma coisa muito boba eu diria, mas primordial para o funcionamento da linguagem e evitar erros de sintaxe.
"Conhecimento dá poder, mas só o caráter grangeia respeito." Bruce Lee
Goj1
Goj1 Membro Senior Registrado
415 Mensagens 5 Curtidas
#5 Por Goj1
07/08/2012 - 12:46
A coisa está fluindo!
Eu alterei o código conforme suas explicações e não deu mais erro. Mas, não está excluindo do banco. A mensagem é: Mural id 0 deletado com sucesso!.
O problema está aqui, não exclui nada porque o código não está pegando o idmural que está selecionado no option. Veja o código:

[php]
<?php
$combo = (isset($_POST['idmural']) ? $_POST['idmural'] : 0);
$deleta = mysql_query("DELETE FROM mural WHERE idmural = $combo");
if ($deleta) {
echo "Mural id $combo deletado com sucesso!";
} else {
echo "Erro ao deletar!" . mysql_error();
}
?>


<?php
$sql = "SELECT idmural, titulo FROM mural ORDER BY data DESC, idmural DESC";
$resultado = mysql_query($sql) or die(mysql_error());
if (@mysql_num_rows($resultado) == 0) {
echo "Nenhum registro encontrado!";
}
?>



<?php
while ($linha = mysql_fetch_array($resultado)) {
$idmural = $linha[0];
$titulo = $linha[1];
echo "";
}
?>






[/php]
Pense fora da caixinha!
spidermanx
spidermanx Zerinho Registrado
188 Mensagens 13 Curtidas
#6 Por spidermanx
07/08/2012 - 12:52
Goj1 disse:


... , um erro de digitação aqui

Outra boa pratica, ao invés de usar $linha[0], $linha[1] e assim por diante, recomendo usar o nome do campo, $linha['idmural'], $linha['titulo'].

Assim evita possíveis conflitos se você de repente mudar a ordem de chamada (SELECT titulo, idmural FROM... por exemplo) e esquecer de mudar no laço que alimenta o combo pois o mysql_fetch_array() trabalha tanto com indice quanto associação.

http://php.net/manual/pt_BR/function.mysql-fetch-array.php
"Conhecimento dá poder, mas só o caráter grangeia respeito." Bruce Lee
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal