record delete uit database
Ik ben nu bezig met een delete script waarbij je eerste een overzicht krijgt van alle records in je tabel. Daarachter staat automatisch een link met verwijder.
Probleem : ik krijg die link niet goed dat er ook daadwerkelijk gedelete word.
2e vraag, heb het nu zo dat de laatste 15 records getoond worden, als er eenmaal meer in staan dan 15, hoe kan ik dan zorgen dat de volgende records getoond worden dmv een volgende pagina bijvoorbeeld ?
Hierbij overigens de code die ik nu heb :
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
36
37
38
39
40
41
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
36
37
38
39
40
41
<?php
include("../../incs/connect.php");
?>
<?php
$sqlout = "SELECT * FROM vangaart_nieuws ORDER BY id DESC Limit 15"; //nieuwste record bovenaan
$query_naam = mysql_query($sqlout) or die(mysql_error());
if ($_GET['id'] && is_numeric($_GET['id'])){
$query= "DELETE FROM vangaart_nieuws WHERE id = '".$_GET['id']."'";
mysql_query($query) or die(mysql_error());
}
echo "<b>Overzicht Berichten</b>";
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n";
echo "\n<tr bgcolor=\"#666666\">
\n<td>id</td>
\n<td>datum</td>
\n<td>titel</td>
\n<td>record verwijderen?</td>
\n</tr>";
while($rij=mysql_fetch_array($query_naam)) {
if ($kleur == "#666666"){
$kleur = "#999999";
}else{
$kleur = "#999999";
}
echo "<tr bgcolor=\"" . $kleur . "\">
\n<td>" . $rij['id'] . "</td>
\n<td>" . $rij['datum'] . "</td>
\n<td>" . $rij['titel'] . "</td>
\n<td>" . "<a href=\"../nieuws/index.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
";
}
echo "</table>\n";
?>
include("../../incs/connect.php");
?>
<?php
$sqlout = "SELECT * FROM vangaart_nieuws ORDER BY id DESC Limit 15"; //nieuwste record bovenaan
$query_naam = mysql_query($sqlout) or die(mysql_error());
if ($_GET['id'] && is_numeric($_GET['id'])){
$query= "DELETE FROM vangaart_nieuws WHERE id = '".$_GET['id']."'";
mysql_query($query) or die(mysql_error());
}
echo "<b>Overzicht Berichten</b>";
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n";
echo "\n<tr bgcolor=\"#666666\">
\n<td>id</td>
\n<td>datum</td>
\n<td>titel</td>
\n<td>record verwijderen?</td>
\n</tr>";
while($rij=mysql_fetch_array($query_naam)) {
if ($kleur == "#666666"){
$kleur = "#999999";
}else{
$kleur = "#999999";
}
echo "<tr bgcolor=\"" . $kleur . "\">
\n<td>" . $rij['id'] . "</td>
\n<td>" . $rij['datum'] . "</td>
\n<td>" . $rij['titel'] . "</td>
\n<td>" . "<a href=\"../nieuws/index.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
";
}
echo "</table>\n";
?>
Gewijzigd op 01/01/1970 01:00:00 door Dennis
En waarom gebruik je is_numeric() i.p.v. ctype_digit() ? Deze is een stuk nauwkeuriger, daar heb je dus meer aan.
Je vergeet overigens te controleren of er wel een record is verwijderd, dat zul je met de functie mysql_affected_rows() moeten achterhalen.
anyway... Zo te zien zou hij gewoon moeten deleten. misschien even is_numeric() weghalen om te checken of het dan wel werkt.
Ook nog een puntje? Waarom \n voor elke TR/TD? als je een nieuwe rij wil beginnen gebruik je <TR></TR>
En wat je zegt van is_numeric ipv ctype_digit , ik had van iemand juist begrepen dat je dan numeric moest gebruiken. nooit van cype gehoord ook.
Maar dat moet dus worden : ctype_digit($_GET['id']) ?
@ Jurgen : die index is idd een beveiligde pagina dmv htacess, dat weglaten van numeric geprobeerd maar geen verschik.
overigens als je nu op verwijder klikt, dan ga je juist naar het nieuwsbericht om te lezen :-) en laat dat nu net het tegenovergestelde zijn van wat ik wil...
:-p
isset() ontbrak eveneens.
echo de query eens en controleer of de query iets heeft uitgevoerd.
( schaam me bijna dod dat ik het vraag... )
Overigens wel die ene regel aangepast.
Denk dat het zit in de link verwijzing aan het eind ( verwijder link ).
De records worden namelijk allemaal netjes weergegeven, alleen die link verwijst naar het bericht ipv dat hij hem delete
Nadat je $query aangemaakt hebt. Optioneel kun je de exit; er ook achter zetten om te voorkomen dat de rest van het script uitgevoerd wordt.
Om te controleren of de query iets uitgevoerd heeft, kun je na het uitvoeren van de query de functie mysql_affected_rows() aanroepen. Dus iets als:
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
36
37
38
39
40
41
42
43
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
36
37
38
39
40
41
42
43
<?php
$sqlout = "SELECT * FROM vangaart_nieuws ORDER BY id DESC Limit 15"; //nieuwste record bovenaan
$query_naam = mysql_query($sqlout) or die(mysql_error());
if (isset($_GET['id']) && ctype_digit($_GET['id'])){
$query= "DELETE FROM vangaart_nieuws WHERE id = '".$_GET['id']."'";
mysql_query($query) or die(mysql_error());
if(mysql_affected_rows())
{
// query gelukt.
}
echo $query;
exit;
}
echo "<b>Overzicht Berichten</b>";
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n";
echo "\n<tr bgcolor=\"#666666\">
\n<td>id</td>
\n<td>datum</td>
\n<td>titel</td>
\n<td>record verwijderen?</td>
\n</tr>";
while($rij=mysql_fetch_array($query_naam)) {
if ($kleur == "#666666"){
$kleur = "#999999";
}else{
$kleur = "#999999";
}
echo "<tr bgcolor=\"" . $kleur . "\">
\n<td>" . $rij['id'] . "</td>
\n<td>" . $rij['datum'] . "</td>
\n<td>" . $rij['titel'] . "</td>
\n<td>" . "<a href=\"../nieuws/index.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
";
}
echo "</table>\n";
?>
$sqlout = "SELECT * FROM vangaart_nieuws ORDER BY id DESC Limit 15"; //nieuwste record bovenaan
$query_naam = mysql_query($sqlout) or die(mysql_error());
if (isset($_GET['id']) && ctype_digit($_GET['id'])){
$query= "DELETE FROM vangaart_nieuws WHERE id = '".$_GET['id']."'";
mysql_query($query) or die(mysql_error());
if(mysql_affected_rows())
{
// query gelukt.
}
echo $query;
exit;
}
echo "<b>Overzicht Berichten</b>";
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n";
echo "\n<tr bgcolor=\"#666666\">
\n<td>id</td>
\n<td>datum</td>
\n<td>titel</td>
\n<td>record verwijderen?</td>
\n</tr>";
while($rij=mysql_fetch_array($query_naam)) {
if ($kleur == "#666666"){
$kleur = "#999999";
}else{
$kleur = "#999999";
}
echo "<tr bgcolor=\"" . $kleur . "\">
\n<td>" . $rij['id'] . "</td>
\n<td>" . $rij['datum'] . "</td>
\n<td>" . $rij['titel'] . "</td>
\n<td>" . "<a href=\"../nieuws/index.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
";
}
echo "</table>\n";
?>
is natuurlijk vele malen zinvoller dan
In het 2e geval weet je namelijk nog steeds niet of de query nu wél of niet is gelukt
Mijn idee is dat het probleem in dit gedeelte dan zit
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
echo "<tr bgcolor=\"" . $kleur . "\">
\n<td>" . $rij['id'] . "</td>
\n<td>" . $rij['datum'] . "</td>
\n<td>" . $rij['titel'] . "</td>
\n<td>" . "<a href=\"../nieuws/index.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
";
}
echo "</table>\n";
\n<td>" . $rij['id'] . "</td>
\n<td>" . $rij['datum'] . "</td>
\n<td>" . $rij['titel'] . "</td>
\n<td>" . "<a href=\"../nieuws/index.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
";
}
echo "</table>\n";
en dan doel ik op de link van verwijderen.
op deze manier namelijk verwijst de link naar het bericht zelf in de database ipv dat hij deze delete.
Jij een suggestie ?
Verder ben je niet echt scheutig met je info. Wat is de returnwaarde van mysql_affected_rows? Heb je al met phpMyAdmin gekeken of er ook echt records uit je tabel verdwenen zijn?
Ging er vanuit dat het dan goed was... krijg het idee van niet nu ..
Maar om terug te komen op je vragen.
Ik heb inderdaad ook nog gekeken met phpmyadmin maar er wordt niets gedelete. Snap ook echt niet wat het nu moet zijn, mijn kennis is nu ook niet zo heel erg geweldig.
Code (php)
1
\n<td>" . "<a href=\"pages/verwijderen.php?id=" . $rij['id'] . "\">Verwijderen?</a>" . "</td>
Logisch natuurlijk, maar goed. :-)
Punt nu is, ik wil dat als je op verwijderen klikt hij vervolgens wordt doorverwezen naar :
index.php?page=home
Want nu is het zo dat hij de pagina ( verwijderen ) zelf weer geeft buiten mijn layout om en als ik op refresh klik dan is de tabel ook wel bijgewerkt.
Vandaar dat ik het graag wil door laten verwijzen.
Hoop dat het allemaal nog een beetje logisch klinkt...
Gewijzigd op 01/01/1970 01:00:00 door Dennis
Verder kon ik geen refresh functie vinden en heb dat als volgt opgelost dat als men een record verwijderd heeft daarna op een link moet klikken dat de pagina verwijderen opnieuw word opgeroepen.
Nu is mijn laatste vraag in dit topic, hoe kan ik het in deze code voor elkaar krijgen dat het script maximaal 10 berichten toont en dan onder aan de pagina links plaatst voor volgende en vorige met o.a. keuze opties van 5 pagina's ?
*hoop dat dit niet geldt als bumpen. Gezien het een nieuwe vraag is.
Gewijzigd op 01/01/1970 01:00:00 door Dennis