Problem Java/PHP/MySQL

hardware_chef

Enthusiast
Thread Starter
Mitglied seit
12.10.2007
Beiträge
1.886
Ort
_blank
Hi,

hab mit folgendem Code ein Problem:

PHP:
<?php include 'includes/conect.inc.php';?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <title>Admin-Area</title>

<link rel="stylesheet" href="style/style.css">
</head>
<body>
<script type='text/javascript'>
deleteNews = function(id) 
{ 
   if (confirm('Mit Klick auf "OK" wird der Artikel mit der ID ' + id + ' unwiderruflich geloescht!')) {
    document.location.href = '../admin/newsarchiv.php?delete=' + id;
  }
}
</script>

<?php include 'includes/header.inc.php';?>

<?php include 'includes/navi.inc.php';?>

<div id="content"><span style="font-weight: bold;">News bearbeiten</span><br><br>


<table>
<tr>
<td style="text-decoration: underline; padding-left: 40px; width: 20px" ><b>ID</b></td>
<td style="text-decoration: underline; width: 555px" ><b>Artikel</b></td>
<td style="text-decoration: underline; width: 10px"><b>Optionen</b></td>
</tr>
</table>

<ul>
<?php

if (isset($_GET['delete'])) {
      mysql_query('DELETE FROM news WHERE id = ' . mysql_real_escape_string($_GET['delete']));
}

$result = mysql_query("SELECT id, titel FROM news ORDER BY id DESC");
while ($link = mysql_fetch_object($result))


{

echo '#';
echo $link->id;
echo ' ';
echo ' ';
echo $link->titel;
echo '<div style="float: right;"><a href="../admin/edit_news.php?id='.$link->id.'"><img style="border: 0px solid ; width: 10px; height: 10px;" src="../admin/bilder/icons/edit.gif"></a>';
echo ' ';
echo ' ';
echo '<a href="javascript:deleteNews(' .  $link->id. ')"><img style="border: 0px solid ; width: 10px; height: 10px;" src="../admin/bilder/icons/delete.gif"></a></div><br>';


}

?>
</ul>



</div>

</div>



<div class="clearer"></div>

<?php include 'includes/footer.inc.php';?>


</body>
</html>

Und zwar geht es um das LÖSCHEN. Soweit so gut. Wenn ich den Link anklicke muss ichs nur noch bestätigen. Doch dann tut sich nix. Es wird nicht gelöscht. Was könnte die Ursache dafür sein?

Gruß,
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Da fehlt doch das letzte '.
PHP:
if (isset($_GET['delete'])) {
      mysql_query('DELETE FROM news WHERE id = ' . mysql_real_escape_string($_GET['delete']).'');
}

... jetzt ist er halt zweimal drin, aber einmal geht nicht?!

Fehlt da nicht noch die Verbindung zur DB beim Löschen?
Ah gerade gelesen, müsste auch ohne gehen, aber sicher ist sicher ;)
PHP:
mysql_query('DELETE FROM news WHERE id = ' . mysql_real_escape_string($_GET['delete']).'', $verbindung);

Was sagt mysql_error()? (Hab ich immer drin, bis das Script wirklich funktionsfähig ist (fertig sind die ja nie^^)).
 
Zuletzt bearbeitet:
Da fehlt doch das letzte '.
PHP:
if (isset($_GET['delete'])) {
      mysql_query('DELETE FROM news WHERE id = ' . mysql_real_escape_string($_GET['delete']).'');
}

Da fehlt gar nichts. Was du machst ist einen leeren String anhängen, was genau gar nichts bewirkt. ;)
Ich nehme mal an du wolltest den Wert für die ID in Anführungszeichen setzen, was dann so aussähe:
PHP:
if (isset($_GET['delete'])) {
      mysql_query('DELETE FROM news WHERE id = "' . mysql_real_escape_string($_GET['delete']).'"');
}
Das empfiehlt sich auch, weil durch mysql_real_escape_string() zwar alle für SQL-Injections gefährliche Zeichen "escapet" werden, aber trotzdem im Sinne der SQL-Syntax illegale SQL-Queries entstehen können, nämlich genau dann, wenn die delete-Variable keine Zahl enthält.
Noch besser wäre, im if zu überprüfen, ob der delete-Parameter nur aus Ziffern besteht. Dann kann man sich die Anführungszeichen und mysql_real_escape_string() auch sparen.
PHP:
if (isset($_GET['delete']) && ctype_digit(($_GET['delete']))) {
      mysql_query('DELETE FROM news WHERE id = ' . $_GET['delete']);
}

Zum eigentlichen Problem:
Wenn es bei der Ausführung von DELETE, INSERT und UPDATE Queries zu Fehlern kommt, dann gibt mysql_query() false zurück.
Du könntest also den Aufruf auch in eine if-Verzweigung packen und eine Fehlermeldung ausgeben, z.B.:
PHP:
if(!mysql_query('DELETE FROM news WHERE id = "' . mysql_real_escape_string($_GET['delete']).'"'))
    echo "SQL error";
 
Problem wurde gelöst.

Lösung:

PHP:
<script type='text/javascript'>
deleteNews = function(id) 
{ 
   if (confirm('Mit Klick auf "OK" wird der Artikel mit der ID ' + id + ' unwiderruflich geloescht!')) {
    document.location.href = '../admin/newsarchiv.php?id=1&delete=' + id;
  }
}
</script>
 
was mir allerdings nicht klar ist, woher dieses id parameter kommt und welchen zweck es erfuellt.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh