Row uit database verwijderen met ajax & php GetelementById

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter van

Wouter van

20/12/2015 14:48:42
Quote Anchor link
Hallo allemaal,


Ik heb een probleempje met het verwijderen van een row uit de database.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 ??
 
PHP hulp

PHP hulp

23/11/2024 08:16:09
 
Marthijn Buijs

Marthijn Buijs

20/12/2015 15:28:01
Quote Anchor link
Laat de code eens zien van verwijderbericht.php ??
 
Wouter van

Wouter van

20/12/2015 15:31:11
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.";

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

20/12/2015 16:27:46
Quote Anchor link
Quote:
alleen steeds de bovenste in de lijst


Wild guess: het id "deleteRow" is niet uniek.
 
- Ariën  -
Beheerder

- Ariën -

20/12/2015 16:30:40
Quote Anchor link
Waarom heb je regel 5 nodig? Je kan prima in je query's je $_POST['id'] gebruiken.
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.
 
Wouter van

Wouter van

20/12/2015 16:32:46
Quote Anchor link
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: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.
 
Ivo P

Ivo P

20/12/2015 19:40:49
Quote Anchor link
hoeveel elementen staan er in de html met het id="deleteRow" ?

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
<button name='delete' data-uniq="<?= $row['UNIQ']?>" class='button'
onclick='return verwijderen($(this).data('uniq'))'>Verwijder </button>


en dan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function verwijderen()
{
        var delRow = document.getElementById("deleteRow").value;

vervangen door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function verwijderen(delRow)
{
        //var delRow = document.getElementById("deleteRow").value;
Gewijzigd op 20/12/2015 19:45:41 door Ivo P
 
Thomas van den Heuvel

Thomas van den Heuvel

20/12/2015 20:15:15
Quote Anchor link
Daarnaast zou jQuery "unobtrusive" moeten zijn, dus ik snap ook niet helemaal waarom je enerzijds werkt met jQuery en anderzijds met onclick (events). Je zou dynamisch aan elementen click-events kunnen koppelen die trouwens afgevangen zouden moeten worden met preventDefault(). Gebruik bijvoorbeeld een data-attribuut met als waarde het id, aan de hand vand het geklikte element kun je makkelijk herleiden wat het bijbehorende id is.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.