Datensatz löschen & Link zuordnen

Laar

Grünschnabel
Hallo,

ich habe, wie der Überschrift zu entnehmen, ein Script (Das Script von 'Igäl') bei dem ich einen bestimmten Datensatz eingebe. Dieser wird dann gespeichert und weiter unten aufgeführt mit einer "ID" die automatisch generiert wird (1, 2, 3, 4, ...). Man kann diesen Datensatz dann auch editieren.

Ich möchte aber gerne auch, dass dieser Datensatz einer bestimmten Nummer, die ich eingebe, zugeordnet wird und auch löschbar ist. Meinetwegen kann diese Nummer auch als "ID" eingesetzt werden, da diese "ID" ohnehin nur einmal vorkommen wird und vorkommen kann.

Mein Script:
Code:
<?php
    $edit = false;
    $message = "";
    $db_name = 'dbname';
    $db_user = 'dbuser';
    $db_host = 'localhost';
    $db_pw = 'dbpw';
    if(isset($_GET['edit']))    { $edit = $_GET['edit']; } 
	    $con = mysql_connect($db_host, $db_user, $db_pw)
        or die(mysql_error());
    $db = mysql_select_db($db_name, $con)
        or die(mysql_error());  
    if(isset($_POST['insert']))    {
        $sql_data_insert = "INSERT INTO daten (Feedback) VALUES ('".$_POST['feedback']."')";
        $qry_data_insert = mysql_query($sql_data_insert)
            or die(mysql_error());

        if($qry_data_insert)    {
            $message = "<span style=\"color:#ff0000;font-weight:bold;\">Datensatz erfolgreich eingef&uuml;gt</span>";
        }else{
            $message = "<span style=\"color:#ff0000;font-weight:bold;\">Datensatz konnte nicht eingef&uuml;gt werden</span>";
        }
    //Der folgende Codeblock wird ausgeführt, wenn der Button mit dem Namen 'update' gedrückt wurde
    }elseif(isset($_POST['update']))    {
        $sql_data_update = "UPDATE daten SET Feedback='".$_POST['feedback']."' WHERE ID=".$_POST['id'];
        $qry_data_update = mysql_query($sql_data_update)
            or die(mysql_error());

        if($qry_data_update)    {
            $message = "<span style=\"color:#ff0000;font-weight:bold;\">Datensatz erfolgreich modifiziert</span>";
            $edit = false;
        }else{
            $message = "<span style=\"color:#ff0000;font-weight:bold;\">Datensatz konnte nicht modifiziert werden</span>";
        }
    }  
	    if($edit)    {
        $sql_data_edit = "SELECT ID, Feedback FROM daten WHERE ID=".$edit;
        $qry_data_edit = mysql_query($sql_data_edit)
            or die(mysql_error());
        $data_edit = mysql_fetch_array($qry_data_edit);
    }  
	    $sql_data_list = "SELECT ID, Feedback FROM daten";
    $qry_data_list = mysql_query($sql_data_list)
        or die(mysql_error());
?>  
<html>
<head>
<title>Beispiel</title>
</head>

<body>
<? echo $message; ?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" name="modData" method="POST">
<input type="hidden" name="id" value="<? echo $edit; ?>">
<textarea rows="6" cols="50" name="feedback"><? if(!empty($data_edit['Feedback'])) { echo $data_edit['Feedback']; } ?></textarea>
<br />
<? if($edit)    {    ?>
<input type="submit" name="update" value="Modifizieren">
<? }else {    ?>
<input type="submit" name="insert" value="Einf&uuml;gen">
<? }    ?>
<br />
<hr />
<?
    while($all_data = mysql_fetch_array($qry_data_list))    {    
        echo "[<a href=\"".$_SERVER['PHP_SELF']."?edit=".$all_data['ID']."\">Edit</a>] | ";
        echo $all_data['ID']." | ".$all_data['Feedback']."<br />";
    } 
?>
</form>
</body>
</html>

Ich hätte es aber auch noch gerne, dass ich mit einem Klick auf "Löschen" den Datensatz löschen kann, vorher aber noch gefragt wird mit einem "OK" / "Abbrechen" Fenster, ob der Datensatz wirklich gelöscht werden soll.

Kann mir da jemand helfen?
Kann ich die ID nicht direkt mit dem Namen eintragen?

Zum Beispiel:

Als Ergebnis würde dann rauskommen:
[Edit] | 123456 | Name
 
Hallo Laar

Was spricht dagegen, die per auto_increment generierte ID für deine Zwecke zu benutzen? Diese ID ist garantiert eindeutig. Oder willst du eine ID die du modifizieren kannst? Du kannst ja neben der schon vorhandenen Textarea zusätzliche Felder machen. Anpassen musst du dabei dann einfach die Datenbank und deren Abfragen.

Eine einfache Abfrage vor dem Löschen kannst du mit JavaScript realisieren:

HTML:
<a href="index.php?del_news=5" onClick="return confirm('Wirklich löschen?');">löschen</a>

Grüsse
Igäl
 
Die ID möchte ich gern selbst festlegen können, also statt der von deinem Script ausgegebenen ID, Bsp. 1, halt eine ID die ich festlege.

Oder auch ganz einfach dass ich den Namen und die ID eingebe und er dies dann einträgt. Den Name mit dem Link http://www.abc.de/user.php?=dieID ausgibt wo ich draufklicken kann um zu diesem User zu kommen und beim Löschen halt einfach auf "Löschen" klicken kann.

Brauche ich zum Löschen nicht noch einen extra Scriptzusatz, damit ich festlegen kann was genau passieren soll?
 
Zuletzt bearbeitet:
Natürlich brauchst du noch die eigentliche Funktion, die den Datensatz löscht. Ich habe dir jetzt nur die Sicherheitsabfrage gepostet. Löschen kannst du folgendermassen:

- Generiere einen Link, mit einem Parameter (bsp. 'user.php?del=$id'), der die ID des zu löschenden Datensatzes beinhaltet
- Frag im Script ab, ob dieser Parameter gesetzt ist und wenn ja, setzt du ein SQL-Statement ab, welches folgendermassen aussehen könnte:
PHP:
DELETE FROM `table` WHERE ID=".$_GET['del'].";

Zu der Sache mit der ID bleibt zu sagen, dass du ohne Probleme in der Datenbank einfach auto_increment bei ID ausschaltest. Dann kannst du in deinem Script ein neues Inputfeld machen, in welches du manuell eine ID einträgst. Diese ID kannst du dann analog zum Namen in die Datenbank speichern.
 
Okay, jetzt ist mein Latein absolut am Ende.
Wie setze ich denn jetzt das Formularfeld so ein, dass es sich direkt mit reinschreibt (z.B. bei der ID) und wie gibt er es dann aus?

Soll ich einfach das Formularfeld das "hidden" ist (also für die id), offenlegen und er schreibt es alles selbst in die DB hinein ohne dass ich selbst noch etwas ändern muss?

Und wie meinst du das mit "generieren"? Ich habe von PHP so die minimalsten Kenntnisse und kann mir grade eben durch dein Tutorial gut erklären was, was ist, aber mit Neuem bin ich dann doch glaube ich etwas sehr überfordert. :-/
 
Zuletzt bearbeitet:
Das ist eine Möglichkeit, dass du das Hiddenfield zu einem Inputfield machst und es so selber modifizierst.

Ich würde dir jedoch raten, dass du erstmals am vorhandenen Script ein bisschen ausprobierst, sprich, dass du zu verstehen versuchst, wie was funktioniert und was passiert wenn man wo draufklickt. Wenn du das erstmal begriffen hast, ist ein Erweitern des bestehenden Formulares keine grosse Aufgabe mehr.
 
Das Ändern des ID-Feldes stellt sich jetzt nicht als so großes Problem dar. Einfach ausprobieren und es wird schon klappen, ansonsten suche ich mir Informationen und dann wird das klappen.

Vielmehr Probleme macht mir, dass ich garnicht weiß wie ich einen Link generieren lassen soll der mir das Löschen ermöglicht und wie er es dann löscht.

Ich kann sogar stolz auf mich sein. Es gibt mir nun die ID im Input-Feld aus, immer die richtige ID zum richtigen Eintrag, allerdings weiß ich nicht wie ich es anstellen kann, dass er diese auch einträgt wenn ich z.B. sage dass die ID 123456 sein soll.

Die Ausgabe funktioniert, ist ja auch von dir und läuft, aber eben das Speichern der ID bereitet mir Probleme.
 
Zuletzt bearbeitet:
Das Speichern der ID funktioniert wie das Speichern des Feedbacks oder in deinem Fall des Namens. Du musst nur das SQL-Statement ein bisschen anpassen, und die richtigen, vom Script übergebenen Daten einfüllen. Wie man das macht, steht bereits im Script. Schau dir an, wie der Link für das Editieren gemacht wurde. Genau so kannst du auch denjenigen des Löschens generieren.
 
Ich hab's nun geändert, aber es funktioniert nicht. Ich kann auch nicht wirklich PHP, halt nur Stückchen für Stückchen ein wenig nachvollziehen. Kannst du mir nicht sagen wie und wo ich das eintragen muss? Bei mir sieht es nun so aus:

PHP:
<?php
    $edit = false;
    $message = "";
    $db_name = 'dbname';
    $db_user = 'dbuser';
    $db_host = 'localhost';
    $db_pw = 'dbpw';
    if(isset($_GET['edit']))    { $edit = $_GET['edit']; } 
	    $con = mysql_connect($db_host, $db_user, $db_pw)
        or die(mysql_error());
    $db = mysql_select_db($db_name, $con)
        or die(mysql_error());  
    if(isset($_POST['insert']))    {
        $sql_data_insert = "INSERT INTO daten (Feedback) VALUES ('".$_POST['feedback']."')";
		$sql_data_insert = "INSERT INTO daten (ID) VALUES ('".$_POST['ID']."')";
        $qry_data_insert = mysql_query($sql_data_insert)
            or die(mysql_error());

        if($qry_data_insert)    {
            $message = "Okay!";
        }else{
            $message = "Fehler!";
        }
    //Der folgende Codeblock wird ausgeführt, wenn der Button mit dem Namen 'update' gedrückt wurde
    }elseif(isset($_POST['update']))    {
        $sql_data_update = "UPDATE daten SET Feedback='".$_POST['feedback']."' WHERE ID=".$_POST['id'];
        $qry_data_update = mysql_query($sql_data_update)
            or die(mysql_error());

        if($qry_data_update)    {
            $message = "Okay!";
            $edit = false;
        }else{
            $message = "Datensatz konnte NICHT modifiziert werden";
        }
    }  
	    if($edit)    {
        $sql_data_edit = "SELECT ID, Feedback FROM daten WHERE ID=".$edit;
        $qry_data_edit = mysql_query($sql_data_edit)
            or die(mysql_error());
        $data_edit = mysql_fetch_array($qry_data_edit);
    }  
	    $sql_data_list = "SELECT ID, Feedback FROM daten";
    $qry_data_list = mysql_query($sql_data_list)
        or die(mysql_error());
?>  
<html>
<head>
<title>:: Beispiel ::</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body,td,th {
	font-family: Tahoma;
	font-size: 12px;
	color: #000000;
}
.Stil4 {color: #FF0000}
-->
</style></head>

<body>
<form action="<?php $_SERVER['PHP_SELF']; ?>" name="modData" method="POST">
<table width="227" border="0">
  <tr>
    <td width="73"><strong>SpielerID:</strong></td>
    <td width="144"><input name="id" value="<? if(!empty($data_edit['ID'])) { echo $data_edit['ID']; } ?>"></td>
    </tr>
  <tr>
    <td><strong>Nickname:</strong></td>
    <td><input name="feedback" value="<? if(!empty($data_edit['Feedback'])) { echo $data_edit['Feedback']; } ?>"></td>
    </tr>
</table>
<? if($edit)    {    ?>
<input type="submit" name="update" value="Editieren">
<? }else {    ?>
<input type="submit" name="insert" value="Einf&uuml;gen">
<? }    ?>
<? echo $message; ?><br />
<hr />
<?
    while($all_data = mysql_fetch_array($qry_data_list))    {    
        echo "[<a href=\"".$_SERVER['PHP_SELF']."?edit=".$all_data['ID']."\">Edit</a>] | ";
		echo $all_data['ID']." | ".$all_data['Feedback']."<br />";

    } 
?>
</form>
</body>
</html>
 
Zuletzt bearbeitet:
Zurück