Daten uas Datenbank löschen

Begonnen von Spelvin, 16 August 2007, 09:50:09

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Spelvin

Hallo Leute,
ich habe auf meiner Seite eine Übersicht mit Daten aus einer Datenbank. Jetzt möchte ich aus dieser Übersicht heraus einzelne Datensätze löschen, indem ich neben jedem Datensatz einen Löschlink mache. Wie realisiere ich das mit php?

Name       Vorname        Aktion
Peter      Muster      [Löschen]
Timo      Tester      [Löschen]

Hoffe ihr versteht was ich meine.

Spelvin

Weiß keiner einen Rat? Diese Funktion existiert auch bei dem Beispiel Telefonbuch von Xampp. Aber bei diesem Beispiel ist das ganze mit SQL-Lite gelöst, weiß nicht recht wie ich das umschreiben kann.

siggi

Hallooo ? warum so ungeduldig ? dein letztes Post ist man grad nen paar Stunden her.
Ok, ich hab' mal eben schnell was gecodet: 


<?php

/**
* beispielseite.php
*/

function eintraege()
{
  $sql = "SELECT * FROM ".$GLOBALS."_beispieltabelle;";
  $result = sql_query($sql);
  while ($row = sql_fetch_assoc($result))
  {
    $content[] = $row;
  }
  return $content;
}

function eintrag_loeschen($id)
{
sql_query("DELETE FROM ".$GLOBALS['prefix']."_beispieltabelle WHERE id = '".$id."';");
}

$eintraege = eintraege(); 

if(isset($_GET['delete'])) {
$id = $_GET['delete'];
eintrag_loeschen($id);
}

?>

<table>
  <tr>
   <td>NAME</td>
   <td>VORNAME</td>
   <td>AKTION</td>
  </tr>
  <?if(count($eintraege) > 0) :?>
   <? foreach($eintraege as $row) :?>
   <tr>     
    <td><?=$row['name'] ?></td>
    <td><?=$row['vorname'] ?></td>
    <td><a href="beispielseite.php?delete=<?=$row['id']?>">[Löschen]</a></td>
   </tr>   
   <?endforeach;?>
  <?endif;?>
</table>


ich nehme mal an, du willst es in dein pragmaMx einbauen, sonst musst du noch
die Datenbankabfrage anpassen. ist nur eine von vielen Möglichkeiten. ;)
Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

Danke für deine Hilfe. Sorry das ich so ungeduldig bin, aber ich dachte ich hätte mich evtl. unverständlich ausgedrückt, da schon über 30 views auf den Thread waren.
werde es direkt mal ausprobieren.

siggi

uups, da hat sich doch ein tippfehler eingeschlichen  :puzzled:
das muss natürlich heißen :


function eintraege()
{
  $sql = "SELECT * FROM ".$GLOBALS['prefix']."_beispieltabelle;";
  $result = sql_query($sql); ...

Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

Hallo Siggi,
funktioniert leider nicht. Er bringt mir keine Fehlermeldung aber er löscht auch nicht den Datensatz.

siggi

Zitatfunktioniert leider nicht.
Das kann so auch noch nicht funktionieren. Das ist doch nur ein Ansatz, kein fertiges Script. 
Du musst schon selbst hand anlegen und es an deine Umgebung anpassen.  :yltype:
Leg doch mal dein Script in den Anhang, damit man mal sehen kann, wie du es gemacht hast.


Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

ich bin zwar ein PHP-Anfänger aber mir ist auch klar das ich das Script anpassen muss.
Ich habe es dir mal in den Anhang gemacht

siggi

dein Löschlink ist schlichtweg falsch :
<a href="modules.php?name=dieseWoche&file=uebersicht?delete=<?=$row['id']?>">[Löschen]</a>
Richtig :
<a href="modules.php?name=dieseWoche&amp;file=uebersicht&amp;delete=<?=$row['id']?>">[Löschen]</a>

und was sollen diese einträge :

@mysql_connect("localhost", "root") or die("Verbindungsversuch fehlgeschlagen");
@mysql_select_db("pragmamx")or die("Konnte die Datenbank nicht waehlen.");
  :puzzled:
Du bist doch schon mit der datenbank durch das system verbunden  :smile:

Nimm mal die uebersicht2.php, dann passt das schon ;)
Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

naja da ich die config datei nirgendswo include habe, dachte ich ich muss die Datenbankverbindung herstellen.
Aber funktioniert irgendwie immer noch nicht. Hast du es schonmal bei dir ausprobiert?

siggi

ZitatHast du es schonmal bei dir ausprobiert?
Klar, geht :)
Zitatnaja da ich die config datei nirgendswo include habe
Wenn das System die config nicht includet wäre es kein CMS  :BD:
ZitatAber funktioniert irgendwie immer noch nicht.
etwas dürftig deine info :gruebel:

Schau dir doch mal die anderen Module an, wie es dort gemacht wurde.
So versteht man es am allerbesten, wie man seine Skripte ins System implementiert.
Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

Zitatnaja da ich die config datei nirgendswo include habe
mja schon klar, aber mir war nicht bewußt das es aussreicht der Seite nur den Header und Footer anzugeben.

Zitatetwas dürftig deine info

Würde dir ja gerne mehr Infos geben, aber es kommt leider keine Meldung und es passiert auch sonst nichts.
Und andere Modul hab ich mir auch schon angeschaut. Ist ja nicht das erste modul das ich selber mache, aber irgendwie funktioniert es nicht.

Spelvin

Weiß keiner einen Rat? Würde ja gerne mehr infos geben, aber wie gesagt es kommt keine Meldung oder sonstiges.

siggi

aktiviere mal alle Fehlermeldungen in der Admin-Einstellungen :
Zitat
Debug-Modus aktiv?
(nur für Administratoren)   Ja  Nein
SQL-Fehler anzeigen?   Ja  Nein
alle SQL-Anfragen anzeigen?   Ja  Nein


Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

Habe ich gemacht, dann zeigt er mir diese Meldung:
ZitatpragmaMx 0.1.9 Debug-Mode, PHP Error-Reporting (E_ALL) enabled
GET: Array
(
    [name] => dieseWoche
    [file] => uebersicht
    [delete] => 5
)


siggi

na dann schau doch mal in deine Datenbank, ob der Eintrag gelöscht wurde.
Mit sql_affected_rows() kannst du prüfen, ob der Löschgang erfolgreich war.
Hier noch mal das modifizierte Script als Beispiel zum ausprobieren:



<?

# uebersicht.php

# die Tabelle {prefix}_diesewoche muss eingerichtet sein !!


if (!defined("mxMainFileLoaded")) die ("You can't access this file directly...");

$GLOBALS["index"] = 1;

function eintraege()
{
  $sql = "SELECT * FROM ".$GLOBALS['prefix']."_diesewoche ORDER BY Datum DESC ;";
  $result = sql_query($sql);
  while ($row = sql_fetch_assoc($result))
  {
    $content[] = $row;
  }
  return $content;
}

function eintrag_loeschen($id)
{
$result = @sql_query("DELETE FROM ".$GLOBALS['prefix']."_diesewoche WHERE id = '".$id."';");
if ($result==TRUE) {
  return(sql_affected_rows());
}
else {
  return -1;
}
}

$message = "";
if(isset($_GET['delete'])) {
$id = $_GET['delete'];
$loeschen = eintrag_loeschen($id);
switch($loeschen) {
  case  1: $message = "Eintrag $id erfolgreich gel&ouml;scht"; break;
  case  0: $message = ""; break;
  case -1: $message = "Fehler beim L&ouml;schen"; 
}
}
$eintraege = eintraege();
if (count($eintraege) == 0 ) {
$message = "Keine Eintr&auml;ge vorhanden";
}

include("header.php");

OpenTable();
?>
<?if(!empty($message)) :?>
  <div style="border: 1px solid red; padding: 5px;"><?=$message;?></div>
<?endif;?>
<table>
  <tr>
   <td>ID</td>
   <td>Datum</td>
   <td>Beschreibung</td>
   <td>Aktion</td>
  </tr>
  <?if(count($eintraege) > 0) :?>
   <? foreach($eintraege as $row) :?>
   <tr>
    <td><?=$row['id'] ?></td>
    <td><?=$row['Datum'] ?></td>
    <td><?=$row['Beschreibung'] ?></td>
    <td><a href="modules.php?name=dieseWoche&amp;file=uebersicht&amp;delete=<?=$row['id']?>">[L&ouml;schen]</a></td>
   </tr>
   <?endforeach;?>
  <?endif;?>
</table>
 
<?
CloseTable();
include("footer.php");

?>

Ich hab es bei mir testweise installiert (mit der dementsprechenden DB-Tabelle) und es funktioniert.  :cul:
Wenn man an Gras zieht wächst es auch nicht schneller.

Spelvin

Danke für deine Hilfe, funktioniert jetzt einwandfrei.  :thumbup:

siggi

Wenn man an Gras zieht wächst es auch nicht schneller.