Hallo mensen,

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 :

<?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";

?> 
Hoe ziet de url er in de html-broncode uit?

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.
waarom verwijder je op de index? als ik op jou pagina nou doe ?id=12 dan ben jij je bericht kwijt. Doe dit op een beveiligde pagina.

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>
@ Frank : <td><a href="../nieuws/index.php?id=8">Verwijderen?</a></td>

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
if (isset($_GET['id']) && ctype_digit($_GET['id'])){

isset() ontbrak eveneens.

echo de query eens en controleer of de query iets heeft uitgevoerd.
@ Frank : misschien een hele domme vraag, maar hoe doe ik dat :-s
( 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
<?php
echo $query;
exit;
?>
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 [php]mysql_affected_rows[/php]() aanroepen. Dus iets als:
<?php
if(mysql_affected_rows())
{
// query gelukt.
}
?>
@ Blanche : dank je wel, heb het zo toegepast. hoop dat het goed is, want ik krijg geen melding verder.


<?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";

?> 
<?
echo 'query gelukt.';
?>
is natuurlijk vele malen zinvoller dan
<?
// query gelukt.
?>
In het 2e geval weet je namelijk nog steeds niet of de query nu wél of niet is gelukt
@ Frank : heb het geprobeerd en geen foutmelding verder.
Mijn idee is dat het probleem in dit gedeelte dan zit


  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";


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 ?
Op regel 1 van je voorbeeld heb je een <tr> tag, maar die wordt nergens gesloten.

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?

Reageren