Row uit database verwijderen met ajax & php GetelementById
Ik heb een probleempje met het verwijderen van een row uit de database.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
//dit is de verwijderknop
echo" <td><form id='delete' method='POST' action=''><input type='hidden' id ='deleteRow' value='".($row['UNIQ'])."'><button name='delete' class='button' onclick='return verwijderen()'>Verwijder </button></form></td>";
//dit is de functie die de verwijderknop aanroept..
<script>
function verwijderen()
{
var delRow = document.getElementById("deleteRow").value;
if(confirm(delRow))
{
$.ajax({
type:"POST",
url: "verwijderbericht.php",
data: 'id='+delRow,
cache:false,
success: function(html){
$('#msg').html(html).fadeOut(4000);
}
});
}
return false;
}
</script>
alles gaat goed en als ik op de verwijderknop druk dan wordt een bericht verwijderd alleen steeds de bovenste in de lijst. het script geeft ook alleen hetzelfde id terug voor elke rij terwijl deze uniek moet zijn.
wat ik dus zou willen is dat ik de berichten kan verwijderen aan de hand van het ($row['UNIQ']) uit de database.
heeft iemand een tip en/of idee hoe ik dit kan oplossen ??
//dit is de verwijderknop
echo" <td><form id='delete' method='POST' action=''><input type='hidden' id ='deleteRow' value='".($row['UNIQ'])."'><button name='delete' class='button' onclick='return verwijderen()'>Verwijder </button></form></td>";
//dit is de functie die de verwijderknop aanroept..
<script>
function verwijderen()
{
var delRow = document.getElementById("deleteRow").value;
if(confirm(delRow))
{
$.ajax({
type:"POST",
url: "verwijderbericht.php",
data: 'id='+delRow,
cache:false,
success: function(html){
$('#msg').html(html).fadeOut(4000);
}
});
}
return false;
}
</script>
alles gaat goed en als ik op de verwijderknop druk dan wordt een bericht verwijderd alleen steeds de bovenste in de lijst. het script geeft ook alleen hetzelfde id terug voor elke rij terwijl deze uniek moet zijn.
wat ik dus zou willen is dat ik de berichten kan verwijderen aan de hand van het ($row['UNIQ']) uit de database.
heeft iemand een tip en/of idee hoe ik dit kan oplossen ??
Laat de code eens zien van verwijderbericht.php ??
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
//verwijderbericht.php
$uniq = ($_POST['id']);
include 'configb.php';
mysqli_query ($con,"UPDATE berichten SET status = 'Verwijdert' WHERE UNIQ = '$uniq' ") or die ('De dienst is tijdelijk niet beschikbaar. Probeer het later nog eens');
mysqli_query ($con,"UPDATE berichten SET gelezen = '0' WHERE UNIQ = '$uniq' ") or die ('De dienst is tijdelijk niet beschikbaar. Probeer het later nog eens');
echo"<center>Het bericht is succesvol verwijdert.";
?>
//verwijderbericht.php
$uniq = ($_POST['id']);
include 'configb.php';
mysqli_query ($con,"UPDATE berichten SET status = 'Verwijdert' WHERE UNIQ = '$uniq' ") or die ('De dienst is tijdelijk niet beschikbaar. Probeer het later nog eens');
mysqli_query ($con,"UPDATE berichten SET gelezen = '0' WHERE UNIQ = '$uniq' ") or die ('De dienst is tijdelijk niet beschikbaar. Probeer het later nog eens');
echo"<center>Het bericht is succesvol verwijdert.";
?>
Quote:
alleen steeds de bovenste in de lijst
Wild guess: het id "deleteRow" is niet uniek.
Let er dan wel op dat je mysqli_real_escape_string gebruikt om SQL-injection te voorkomen.
Verder mist er een goede foutafhandeling. Dus je weet nooit welke querie de boosdoener kan zijn, als je een foutmelding krijgt. Je zou dit kunnen loggen in een speciaal bestand.
als de functie aanroep en het ID in een alert(''); zet geeft hij voor elk bericht hetzelfde ID terug. dit zou niet zo moeten zijn natuurlijk.
Toevoeging op 20/12/2015 16:43:02:
klopt dat is ook het probleem zeg maar. in de database is het wel uniek maar als ik het verwijder niet.
als de functie aanroep en het ID in een alert(''); zet geeft hij voor elk bericht hetzelfde ID terug. dit zou niet zo moeten zijn natuurlijk.
Toevoeging op 20/12/2015 16:47:23:
alles werkt wel alleen het id: <input type='hidden' id ='deleteRow' value='".($row['UNIQ'])."'> die ik aan de verwijderknop koppel is niet uniek. in de database is hij wel uniek.
maar wat er gebeurt is dat hij bijvoorbeeld dit id: 5676b5719f9bb (uit de database) nu aan iedere knop hangt.
dus als ik dan in het midden van de lijst een bericht wil verwijderen verwijdert hij alleen maar de bovenste uit de lijst.
javascript verwacht een uniek id, en zal dus stoppen met zoeken zodra hij er 1 (de eerste?) gevonden heeft.
Toevoeging op 20/12/2015 19:44:05:
Code (php)
1
2
2
<button name='delete' data-uniq="<?= $row['UNIQ']?>" class='button'
onclick='return verwijderen($(this).data('uniq'))'>Verwijder </button>
onclick='return verwijderen($(this).data('uniq'))'>Verwijder </button>
en dan
vervangen door
Code (php)
1
2
3
2
3
function verwijderen(delRow)
{
//var delRow = document.getElementById("deleteRow").value;
{
//var delRow = document.getElementById("deleteRow").value;
Gewijzigd op 20/12/2015 19:45:41 door Ivo P
Quotes in je (de topicstarter zijn) code zijn rommelig. Ook lijk je deze forumfunctionaliteit nog niet helemaal door te hebben? Besteed s.v.p. wat aandacht aan je code en je berichten/reacties, dan kun je van ons hetzelfde verwachten in onze reacties.
Een return false na een AJAX-call snijdt ook geen hout omdat dit een asynchrone aanroep is. Dat wil zeggen dat JavaScript de AJAX-call uitvoert maar niet wacht op het resultaat. De uitvoer van de code "gaat gewoon verder".
Ook hoeft dit niet middels een formulier en ook niet via POST, dit kan via een hyperlink en GET.
Tot slot heb je waarschijnlijk (nogmaals, ten overvloede) slechts een deel van je broncode / HTML-output geplaatst. Hoe moeten wij dan komen tot een fatsoenlijke analyse?
Gewijzigd op 20/12/2015 20:15:47 door Thomas van den Heuvel