• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datensätze löschen

  • Ersteller Ersteller matibaski
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
M

matibaski

Guest
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'].'&nbsp;-&nbsp;'.$row['Datum']." &gt; ".$row['Titel'].'</a><br>';

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

// Hier die funktion delete=IDNummer
// Einträge werden aufgelistet
echo "Vorhandene Einträge:<br><br>\n";
if(mysql_num_rows($result))
 {
  while($row = mysql_fetch_assoc($result))
 {
  echo '<a href=index.php?show='.$row['ID'].'>'.$row['ID'].'&nbsp;-&nbsp;'.$row['Datum']." &gt; ".$row['Titel'].'</a>  -  <a href=delete='.$row['ID'].'>Löschen</a><br>';
  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';
 }

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'].'&nbsp;-&nbsp;'.$row['Datum']." &gt; ".$row['Titel'].'</a><br>';

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

// Hier die funktion delete=IDNummer
// Einträge werden aufgelistet
echo "Vorhandene Einträge:<br><br>\n";
if(mysql_num_rows($result))
{
  while($row = mysql_fetch_assoc($result))
{
  echo '<a href=index.php?show='.$row['ID'].'>'.$row['ID'].'&nbsp;-&nbsp;'.$row['Datum']." &gt; ".$row['Titel'].'</a>  -  <a href=delete='.$row['ID'].'>Löschen</a><br>';
  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';
}
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'<br>Falls Sie einen neuen Newsbeitrag schreiben möchten, dann schreiben Sie es ins Textfeld.<br><br>';
 }
 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<br><br><br>';
 }
 
echo'<hr>';

// 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'<hr>';

// Vorhandene Beiträge als Liste ausgeben
echo "Vorhandene Einträge:<br><br>\n";
if(mysql_num_rows($result))
 {
  while($row = mysql_fetch_assoc($result))
 {
  echo '<a href=index.php?show='.$row['ID'].'>'.$row['ID'].'&nbsp;-&nbsp;'.$row['Datum']." &gt; ".$row['Titel'].'</a>  -  <a href=index.php?delete='.$row['ID'].'>Löschen</a><br>';
  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'<hr>';

// Inhalte ausgeben
if(!isset($_GET['show']))
 {
  echo'<br><br>Inhalt:<br><br>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'<br><br>Inhalt:<br><br>'.$row['Inhalt'].'';
       }
    }
    else
    {
        echo'<br><br>Inhalt:<br><br>Wähle einen Beitrag aus';
    } 
}
?>

<!--Div-Fenster mit Eingabefeldern:-->
<div style="position: absolute; width: 309px; height: 195px; z-index: 1; left: 563px; top: 200px" id="layer1">
<form method="POST" action="index.php">
  <p>Titel:<br>
  <input type="text" name="titel" size="20"><br>
  <br>
  Ihr Name:<br>
  <input type="text" name="autor" size="20"><br>
  <br>
  Text:<br>
  <textarea rows="7" name="text" cols="28"></textarea><br>
  <br>
  <input type="submit" value="Speichern" name="submit"></p>
</form>
</div>
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());
?>
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'])

Anstatt zu vergleichen, wird dem Wert $_GET['delete'] der Wert von $row['ID'] zugewiesen ......


Gruß,
Jumper, the II.
 
Klar! ;)
So sollte es ja sein:
PHP:
if($_GET['delete'] == $row['ID'])
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<br><br><br>';

MfG, matibaski
 
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')";

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.
 
Alti schrieb:
Ja ist deine id denn primary key + auto increment?
Ja, ist primary key + auto increment.

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

JumperII schrieb:
Timestamp + Autor zur Auswahl verwenden
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
 
Hab deinen Post wolh übersehen.
Sorry. Komt nicht wieder vor.

MfG, matibaski
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben