Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal,
estou listando as noticas em uma tabela da seguinte forma:
<table id="lista" width="900px" border="1" align="left" cellpadding="3" cellspacing="0">
<tr>
<td align="center"><strong>ID</strong></td>
<td align="center"><strong>Título</strong></td>
<td align="center"><strong>Categoria</strong></td>
<td align="center"><strong>Clicks</strong></td>
<td align="center"><strong>Comentários</strong></td>
<td align="center"><strong>Fotos</strong></td>
<td align="center"><strong>Editar</strong></td>
<td align="center"><strong>Remover</strong></td>
</tr>
<?php do { ?>
<?php if ($rows > 0) { ?>
<tr>
<td align="center"><?php echo $array['id_not']; ?></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"><a href="fotos.php?id=<?php echo $array['id_not']; ?>"><img src="imagens/img.png" width="16" height="16" border="0" /></a></td>
<td align="center"><a href="editar.php?id=<?php echo $array['id_not']; ?>"><img src="imagens/edit.png" width="16" height="16" border="0" /></a></td>
<td align="center"><a href="#" id="mostrar"><img src="imagens/delete.png" width="16" height="16" border="0" /></a></td>
</tr>
<?php } ?>
<?php } while ($array = mysql_fetch_assoc($select)); ?>
</table>
então, ao clicar na imagem delete.png a seguinte uma div escondida com 2 botoes aparece com a função slidedown, Confirmar e Cancelar, ao clicar no botao Cancelar a div some, e o problema é o botão confirmar.
Aqui está a div a ser exibida:
<div class="msg" id="delete"><p>Você deseja remover a notícia ID = ?</p>
<p><strong>Atenção:</strong> notícias deletadas não poderão ser recuperadas.</p>
<div class="box" id="confirmar"><a href="#">Confirmar</a></div>
<div class="box" id="cancelar"><a href="#">Cancelar</a></div>
</div>
Aqui está o jquery com as funções:
<script type="text/javascript">
$(document).ready(function(){
$('#delete').hide();
$('#mostrar').click(function(event){
event.preventDefault();
$("#delete").slideDown("slow");
});
$('#cancelar').click(function(event){
event.preventDefault();
$("#delete").slideUp("slow");
});
});
</script>
Preciso colocar uma função no botao confirmar, pra pegar o id da noticia que foi clicada e jogar ele na pagina delete.php onde faz o delete da noticia.
Tentei de todo jeito e não obtive sucesso.
Conto com a ajuda de vocês, preciso de uma solução, não sei se tem como fazer do jeito que estou utilizando o código, até porque sou iniciante em js.
Obrigado e aguardo
mangakah obrigado pela ajuda, mais eu nao entendi muito bem, voce poderia me da um exemplo pronto se não é pedir muito, como eu disse sou iniciante em js, tennho estudado lido muito mais ainda tenho dificuldade.
Obrigado pela atenção
Ops... só agora foi ver que você está tentando criar uma caixa de diálogo de confirmação personalizada. Eu sugiro então que você use a caixa de diálogo nativa do javascript, já que da forma como você está fazendo fica muito difícil identificar ao certo em qual notícia o usuário clicou.
A parte de passar o id da notícia para o atributo rel você entendeu, né?
Então na parte javascript, temos assim:
$('#mostrar').click(function(event){
event.preventDefault();
if (confirm('Tem certeza?')) {
var id_not = $(this).attr("rel"); // identifico o id da notícia pegando-o no attr rel
// Agora aqui você pode chamar uma função que fará uma requisição ajax ao aquivo delete.php para apagar a notícia selecionada.
}
Mas claro, também é possível pegar o ID da notícia e ao mesmo tempo fazendo uso dessa caixa de diálogo personalizada que você está desenvolvendo. Basta armazenar esse id em uma variável global (fora das funções).
Entao, eu nao gostaria de usar a função nativa do jquery, gostaria de utilizar a caixa de diálogo de confirmação personalizada, o problema é armazenar o ID que da noticia que foi clicada para remover, e adicionar isso no jquery e chamar a função pelo ajax tenho pouco conhecimento nisso.
tem como me da uma força?
Obrigado
Eu faria assim:
<img class="delete" id="<?php echo $array['id_not']; ?>" src="imagens/delete.png" width="16" height="16" border="0" />
$(function($){
$('img.delete').click(function(){
var id = $(this).attr('id');
})
});e como eu poderia fazer a função para o botão Confirmar? no caso deletar a noticia.
Mastigadinho:
CSS da Caixa de Mensagens
.msg {
position: absolute;
width: 400px;
height: 200px;
/ Centralizar /
left: 50%;
top: 50%;
margin-left: -200px;
margin-top: -100px;
/ Não mostrar /
display: none;
}
O código HTML defe ser feito tal como coloquei acima
<a rel="<?php echo $array['id_not']; ?>" href="#" class="mostrar">
Observação importante: "mostrar" precisa estar em um atributo class pois só pode haver um elemento com um mesmo id em um documento.
O link deve ficar dessa forma:
<a rel="1" href="#" class="mostrar"><img src="imagens/delete.png" width="16" height="16" border="0" /></a>
Adicione um DIV para ser a caixa de diálogo para o resultado da requisição ajax
<div class="msg" id="resultado">
<!-- o resultado da consulta ajax aqui -->
</div>
Agora o javascript:
$(document).ready(function(){
var not_id; // variavel nula que usaremos para armazenar o ultimo id selecionado
// $('#delete').hide(); -- Isso é desnecessário pois no CSS já especifiquei display: none;
$('.mostrar').click(function(event){
event.preventDefault();
not_id = $(this).attr("rel"); // armazena o id escolhido na variavel
$("#delete").slideDown("slow");
});
$('#cancelar').click(function(event){
event.preventDefault();
$("#delete").slideUp("slow");
});
// Adicionei esse bloco...
$('#confirmar').click(function(event){
event.preventDefault();
$("#delete").slideUp("slow");
if (typeof(not_id) != "undefined") { // verifica se a variável está definida
/*
Agora aqui fazemos a requisição ajax para excluir a noticia
*/
$.get("delete.php", { id_noticia: not_id }, function(data) { // executa a requisição ajax
$('#resultado').html(data); // escreve o resultado na caixa de resultados
$("#resultado").slideDown("slow"); // mostra uma caixa com o resultado
setTimeout(function() { $("#resultado").slideUp("fast"); }, 2000); // faz desaparecer apos dois segundos
});
}
});
});Valeu amigo, vou fazer os testes certinhos amanhã e passo aqui pra deixar a resposta, muito grato por sua ajuda, valeu mesmo
entendi, testei aqui, só não consegui jogar o ID da noticia que foi clicada para a página delete.php e assim fazendo o delete, e o resultado do delete, caso falha ou sucesso como ela vai aparecer na caixa de resultado?
e outra coisa, como a caixa de dialogo fica na mesma pagina, tem como fazer para o row da table onde as noticias estao listadas desaparecer quando deletada?
e outra coisa, quando abrisse a caixa de dialogo eu gostaria que aparece o ID da noticia selecionada, tem como?
Abraços, aguardo
A seguinte linha chama o arquivo delete.php e passa para ele o id da notícia armazenado no campo 'id_noticia' e enviada pelo método GET.
$.get("delete.php", { id_noticia: not_id }, function(data) {
Dentro do arquivo delete.php você deve pegar o ID da noticia em $_GET['id_noticia'].
Executar o comando SQL para apagar a notícia, e ecoar o resultado, se sucesso ou falha.
Exemplo:
<?php
$id = $_GET['id_noticia'];
// conexão mysql aqui...
$query = mysql_query("DELETE FROM noticias WHERE id_not=" . $id);
if (!$query) { // não consegiu executar o comando SQL
echo "Erro: Não foi possível excluir a noticia. (Comando não executado)";
exit;
}
if (@mysql_affected_rows()) {
echo "Noticia excluida com sucesso!";
} else {
echo "Erro ao excluir noticia (Comando executado, mas nenhuma linha foi afetada)";
}
E isso já será captado pelo jQuery e inserido no DIV#resultado.
Perfeito cara, obrigado mesmo pela sua ajuda, prabéns ae!
outra coisa, ao clicar na imagem pra remover a notícia, é exibida a caixa de diálogo, com os botões remover e confirmar, e a mensagem perguntando se deseja mesmo deletar a noticia ID =?, teria como enviar o ID da noticia selecionada para a caixa?
e outra coisa, quando eu deletar a ultima noticia listada, teria como sumir o row com os titulos?
<tr>
<td align="center"><strong>ID</strong></td>
<td align="center"><strong>Título</strong></td>
<td align="center"><strong>Categoria</strong></td>
<td align="center"><strong>Clicks</strong></td>
<td align="center"><strong>Comentários</strong></td>
<td align="center"><strong>Fotos</strong></td>
<td align="center"><strong>Editar</strong></td>
<td align="center"><strong>Deletar</strong></td>
</tr>
Valeu!
Atribua o atributo rel para o ID da notícia, e faça isso:
header("Content-Type: text/html; charset=ISO-8859-1", true);
if(!isset($_GET))
{
exit;
}
$id_noticia = addslashes($_GET['id_noticia']);
if(isset($id_noticia) && trim($id_noticia) != '')
{
$consulta_rows = mysql_query("SELECT * FROM noticias WHERE id_not='$id_noticia'");
$rows = mysql_num_rows($consulta_rows);
if($rows > 0)
{
$consulta = mysql_query("DELETE FROM noticias WHERE id_not='$id_noticia'");
if($consulta)
{
echo 'true';
}
else
{
echo 'Não foi possível deletar a notícia requisitada.';
}
}
else
{
echo 'A notícia que você tentou deletar não existe.';
}
}
javascript
$('#deletar').click(function()
{
var id_noticia = $('#deletar').attr('rel');
$.ajax({
type: 'GET',
url: 'Deletar_noticia.php',
data: {'id_noticia': id_noticia},
beforeSend: function()
{
alert('Deletando...');
},
success: function(html)
{
if(html == 'true')
{
alert('Notícia deletada com sucesso!');
}
else
{
alert(html);
}
}
});
});
Espero ter ajudado ;)
Eu tenho uma idéia...
Coloque um atributo rel com o valor do ID no link para deletar a notícia:
Depois, na função do click pegue esse atributo e faça a requisição ajax passando ele como parametro para o arquivo delete.php
var id_not = $(this).attr("rel");