Datensätze löschen

Mahlzeit! (Bei mir gibt’s Raclette ;))

Ich möchte bei meinem MySQL Newssystem auch News löschen.
Ich habe bei tut.php-q.net nachgelsen. Das ist mir alles klar.
Doch wie lösche ich eine bestimmte News/Betrag?

Ich dachte mir so:
[php]
//Hier wird ein Eintrag angezeigt
echo ‚<a href=index.php?show=‘.$row[‚ID‘].‚>‘.$row[‚ID‘].’ - ‚.$row[‚Datum‘]." > ".$row[‚Titel‘].‘
';

// Nun dachte ich so, um ein Löschbutton zu erstellen:
echo ‚<a href=index.php?show=‘.$row[‚ID‘].‚>‘.$row[‚ID‘].’ - ‚.$row[‚Datum‘]." > ".$row[‚Titel‘].‘ - <a href=delete=‚.$row[‚ID‘].‘>Löschen
';

// Hier die funktion delete=IDNummer
// Einträge werden aufgelistet
echo „Vorhandene Einträge:

\n“;
if(mysql_num_rows($result))
{
while($row = mysql_fetch_assoc($result))
{
echo ‚<a href=index.php?show=‘.$row[‚ID‘].‚>‘.$row[‚ID‘].’ - ‚.$row[‚Datum‘]." > ".$row[‚Titel‘].‘ - <a href=delete=‚.$row[‚ID‘].‘>Löschen
';
if($_GET[‚delete‘] = $row[‚ID‘])
{
$delete = "DELETE FROM
News
WHERE
ID=$row[‚ID‘];

mysql_query($delete) OR die(mysql_error());
}
}
}
else
{
echo’Es sind keine Newseinträge vorhanden’;
}
[/php]

Doch er gibt mir folgenden Error aus:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/httpd/vhosts/paradoxe.de/subdomains/habboville/httpdocs/mysql/index.php on line 51

[php]
//Hier wird ein Eintrag angezeigt
echo ‚<a href=index.php?show=‘.$row[‚ID‘].‚>‘.$row[‚ID‘].’ - ‚.$row[‚Datum‘]." > ".$row[‚Titel‘].‘
';

// Nun dachte ich so, um ein Löschbutton zu erstellen:
echo ‚<a href=index.php?show=‘.$row[‚ID‘].‚>‘.$row[‚ID‘].’ - ‚.$row[‚Datum‘]." > ".$row[‚Titel‘].‘ - <a href=delete=‚.$row[‚ID‘].‘>Löschen
';

// Hier die funktion delete=IDNummer
// Einträge werden aufgelistet
echo „Vorhandene Einträge:

\n“;
if(mysql_num_rows($result))
{
while($row = mysql_fetch_assoc($result))
{
echo ‚<a href=index.php?show=‘.$row[‚ID‘].‚>‘.$row[‚ID‘].’ - ‚.$row[‚Datum‘]." > ".$row[‚Titel‘].‘ - <a href=delete=‚.$row[‚ID‘].‘>Löschen
‚;
if($_GET[‚delete‘] = $row[‚ID‘])
{
$delete = „DELETE FROM
News
WHERE
ID= '“.$row[‚ID‘]."‘";

mysql_query($delete) OR die(mysql_error());
}
}
}
else
{
echo’Es sind keine Newseinträge vorhanden’;
}
[/php]
Es würde vielleicht mal helfen, wenn du dir mal das PHP Highlight anguckst, dann hättest du gesehen, dass da ein " gefehlt hat.

Da gibt es 2 Probleme.

  1. Wenn ich auf Löschen klicke, dann löscht es alle Beiträge. Ich möchte aber, dass es nur den Beitrag löscht, der eine gewisse ID hat.

  2. Und da alle gelöscht werden, gehe ich davon aus, dass die ID, die automatisch fortlaufend ist, dass diese auch weg sien soll und alles nach „oben“ rutscht. Doch die ID macht einfach weiter. Also bestehen alle „Zeilen“ bei jeder ID noch, aber es ist einfach kein Inhalt da. (Denke ich auf jeden fall).

Wieso ist das so?

Testet hier:
http://habboville.paradoxe.de/index.php

Ihr könnt mal mehrere Beiträge schreiben, bei einem auf Löschen klciken, und dann die Seite aktualisieren.
Dann seht ihr keine Beiträge mehr. Und wenn ihr nun nochmals einen schreibt, dann geht die ID immer weiter, anstatt bei 1 anzufangen.

Hier ist der Code:
[php]

<?php error_reporting(E_ALL); include"config.php"; include"verbindung.php"; // Neue News if(!isset($_POST['submit'])) { echo'
Falls Sie einen neuen Newsbeitrag schreiben möchten, dann schreiben Sie es ins Textfeld.

'; } else { $titel = $_POST['titel']; $text = $_POST['text']; $autor = $_POST['autor']; $eintrag = "INSERT INTO News (Titel,Inhalt,Datum,Autor) VALUES ('$titel', '$text', 'date()', '$autor')"; mysql_query($eintrag) OR die(mysql_error()); echo'News gespeichert


'; } echo'
'; // Liste mit Einträgen wird gelesen $sql = "SELECT ID, Titel, Datum FROM News ORDER BY Datum DESC;"; $result = mysql_query($sql) OR die(mysql_error()); echo'
'; // Vorhandene Beiträge als Liste ausgeben echo "Vorhandene Einträge:

\n"; if(mysql_num_rows($result)) { while($row = mysql_fetch_assoc($result)) { echo ''.$row['ID'].' - '.$row['Datum']." > ".$row['Titel'].' - Löschen
'; if(!isset($_GET['delete'])) { echo''; } else { if($_GET['delete'] = $row['ID']) { $delete = "DELETE FROM News WHERE ID= '".$row['ID']."'"; mysql_query($delete) OR die(mysql_error()); } } } } else { echo'Es sind keine Newseinträge vorhanden'; } echo'
'; // Inhalte ausgeben if(!isset($_GET['show'])) { echo'

Inhalt:

Wähle einen Beitrag aus'; } else { $sql = "SELECT ID, Titel, Datum, Inhalt FROM News WHERE ID = ".$_GET['show']." ORDER BY Datum DESC;"; $result = mysql_query($sql) OR die(mysql_error()); if(mysql_num_rows($result)>0) { while($row = mysql_fetch_assoc($result)) { echo'

Inhalt:

'.$row['Inhalt'].''; } } else { echo'

Inhalt:

Wähle einen Beitrag aus'; } } ?>

Titel:


Ihr Name:


Text:


[/php]die config.php und verbindung.php sehen so aus: [php] //config.php <?php error_reporting(E_ALL);

define(‚MYSQL_HOST‘, ‚localhost‘);
define(‚MYSQL_USER‘, ‚habboville‘);
define(‚MYSQL_PASS‘, ‚chas147‘);
define(‚MYSQL_DATABASE‘, ‚habboville‘);
?>

//verbindung.php

<?php // Verbindung wird hergestellt @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Die Verbindung kann nicht aufgebaut werden"); // Die Datenbank wird ausgewählt mysql_select_db(MYSQL_DATABASE) OR die(mysql_error()); ?>[/php]Ich hoffe, ihr könnt mir da raushelfen.

Habe mittlerweile schon eine Stunde lang ausprobiert.

MfG, matibaski

Kleine Ursache … Große Wirkung …

Ein Klassiker der Gattung „Flüchtigkeitsfehler“:
[PHP] if($_GET[‚delete‘] = $row[‚ID‘]) [/PHP]

Anstatt zu vergleichen, wird dem Wert $_GET[‚delete‘] der Wert von $row[‚ID‘] zugewiesen …

Gruß,
Jumper, the II.

Klar! :wink:
So sollte es ja sein:
[php]
if($_GET[‚delete‘] == $row[‚ID‘])[/php]LooL. Hast Recht. Kleiner Fehler macht vieles kaputt.

Aber was ist nun mit der ID?

Ich möchte, dass wenn ein Eintrag bei einer ID gelöscht wurde, dass es alles wieder eins nach „oben“ geschoben wird.
Dass nicht immer eine neue ID kommt, obwohl es schon eine gibt.
Also wenn ich Beitrag 3 von 5 lösche, soll es nur noch die ID’s 1-4 haben. Und nicht die ID’s 1,2,4,5

Dazu noch wegen dem Datum:
Es trägt immernoch alles Nullen ein. Doch wie mache ich das?
Ich wurde auf time() und date() zugewiesen. Diese haben auch nur Nullen eingetragen.

Code sieht so aus:
[php]
$titel = $_POST[‚titel‘];
$text = $_POST[‚text‘];
$autor = $_POST[‚autor‘];
$eintrag = „INSERT INTO News (Titel,Inhalt,Datum,Autor) VALUES (‚$titel‘, ‚$text‘, ‚date()‘, ‚$autor‘)“;

mysql_query($eintrag) OR die(mysql_error());
echo’News gespeichert


';[/php]

MfG, matibaski

Ja ist deine id denn primary key + auto increment?

Für Dein Datum (x-mal im Forum zu finden …):
[PHP]$eintrag = „INSERT INTO News (Titel,Inhalt,Datum,Autor) VALUES (‚$titel‘, ‚$text‘, '“ . date( „Y-m-d H:i:s“) . „', ‚$autor‘)“;[/PHP]

Und zu Deinen IDs … wenn Du sie tatsächlich so anpassen willst, musst Du jeweils eine Reorganisation Deiner Datenbank durchführen. Das ist m.E. weder sinnvoll noch notwendig. Ggf. kannst Du auf die ID’s verzichten und den Timestamp + Autor zur Auswahl verwenden.

Gruß,
Jumper, the II.

Ja, ist primary key + auto increment.

Wie kann man so etwas machen?
Lohnt es sich nicht, eine Reorganisation zu machen? Wenn nein, würde ich gerne wissen warum.

Wie gesagt, meine Datum-funktion spinnt und Autor? Tja mal schau’n.
Wenn’s mit ID nicht geht, mach ichs nach Autor.

MfG, matibaski

Naja, Reorganisation lohnt sich nicht… Dafür müsstest du erst alle Daten auslesen, die entsprechenden IDS verändern, die Tabelle löschen, Die Tabelle neu anlegen und dann die daten mit den geänderten IDS eintragen, was, wie du dir sicherlich vorstellen kannst, sehr unperfomant ist.
Da ist es doch viel einfacher es so zu lassen, scheiß drauf ob ne Zahl in der mitte fehlt.

Nunja.
Da basiere ich halt auf den Autor.

Und nun, wie mache ich das wegen dem Datum?
bei tut.php-q.net erfuhr ich NOW().
Hier time() und date()

Doch alle geben mir nur Nullen aus.

MfG, matibaski

Lies einfach meine Posts, manchmal hilfts :wink:

Gruß,
Jumper, the II.

Hab deinen Post wolh übersehen.
Sorry. Komt nicht wieder vor.

MfG, matibaski