Berichten verwijderen na klik [OPGELOST]
een klein vraagje over het verwijderen van een insert bij het klikken.
Nou werk alles gewoon goed mijn vraag is als ik de row laat verwijderen bij het klikken ervan dan verwijderd hij dit in het database maar in de browser blijft deze data nog bestaan.
Pas na het vernieuwen is deze verdwenene, nou wil ik dit zo maken dat als er op verwijderen wordt geklikt dat deze ook in het browser direkt verdwijnt.
Is dit mogelijk met PHP of moet ik hier gebruik maken van een AJAX call ?
Dit is de code om het berichten te laten zien of te verwijderen;
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$message_show = $db->prepare("SELECT * FROM messages WHERE reciever=?");
$message_show->bindParam(1, $id);
$message_show->execute();
echo "Achtergelaten krabbels voor $id";
foreach($message_show as $b){
?>
$message_show->bindParam(1, $id);
$message_show->execute();
echo "Achtergelaten krabbels voor $id";
foreach($message_show as $b){
?>
<div id=message-board>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
echo $b['id'];
echo $b['deliver'];
echo $b['source'];
echo $b['message_date'];
echo $b['message_time'];
print_r($_POST);
if(isset($_POST['message-delete'])){
$message_id = $_POST['message-del'];
$message_show = $db->prepare("DELETE FROM messages WHERE id=?");
$message_show->bindParam(1, $message_id);
$message_show->execute();
}
?>
echo $b['id'];
echo $b['deliver'];
echo $b['source'];
echo $b['message_date'];
echo $b['message_time'];
print_r($_POST);
if(isset($_POST['message-delete'])){
$message_id = $_POST['message-del'];
$message_show = $db->prepare("DELETE FROM messages WHERE id=?");
$message_show->bindParam(1, $message_id);
$message_show->execute();
}
?>
</div>
<form method=POST>
<input type="hidden" name="message-del" value="">
<button name=message-delete>Verwijder bericht</button>
</form>
Gewijzigd op 28/11/2014 14:55:42 door Ronald brt
Header("Location: pagina_naam.ext");
Ik heb het onderhand al goed werkend nu.
Ik moest de if(isset($_POST['message-delete'])){ buiten de foreach lus zetten, nu werkt het goed.
Lijkt mij logischer om eerst de DELETE query uit te voeren en DAARNA de SELECT query die de records uit de database haalt om de rijen op de pagina weer te geven. Want dan is er geen redirect nodig.
Frank Nietbelangrijk op 28/11/2014 13:29:31:
Lijkt mij logischer om eerst de DELETE query uit te voeren en DAARNA de SELECT query die de records uit de database haalt om de rijen op de pagina weer te geven. Want dan is er geen redirect nodig.
Frank, je idee is goed. Echter zal ik het doen met een soft_delete
Een column aanmaken met de naam "deleted" en dan ENUM('0','1') geven
Je kan dan met jQuery's .remove() functie het item ook uit je DOM (opbouw van HTML-elementen) verwijderen:
Enfin, kijk maar eens:
http://papermashup.com/jquery-ajax-delete/
Verder raad ik een soft-deltee, zoals Koen zegt aan:
- Bij misbruik of een verkeerde klik, kan de data nog worden teruggezet, door van de '1' een '0' te maken.
- Huidige koppelingen (zoals berichten van diegene) zoals via JOINS blijven bestaan: Stel, als je een user weggooit, dan heeft de JOIN van de berichten van hem geen voorwaarde meer, waardoor ze wel blijven bestaan, maar niet meer zichtbaar worden.
Gewijzigd op 28/11/2014 14:31:07 door - Ariën -
Koen Hollander op 28/11/2014 13:46:34:
Frank, je idee is goed. Echter zal ik het doen met een soft_delete
Een column aanmaken met de naam "deleted" en dan ENUM('0','1') geven
Een column aanmaken met de naam "deleted" en dan ENUM('0','1') geven
Daar is helemaal niets mis mee Koen maar dan geldt hetzelfde: eerst (soft)deleten en dan een nieuwe SELECT.
Zoals Aar aangeeft kan het ook met AJAX. De gebruiker blijft dan gewoon op de pagina. echter heb je dan wel de taak om je javascript de rij uit de browser te laten verwijderen.