PHP Datensatz löschen

Cool Master

Fleet Admiral
Registriert
Dez. 2005
Beiträge
37.513
Moin,

ich habe ein kleines Problem und zwar möchte ich ein Datensatz löschen.

Ich habe bis jetzt das Schreiben und Auslesen aus der DB, was auch ohne Probleme geht. Nun möchte ich aber auch Daten löschen.

So sieht mein Code bis jetzt aus:

Index.php:

PHP:
<?php

echo'<h3>Daten eintragen</h3>

<form method="post" action="db_schreiben.php">
  Titel: <input type="text" name="titel" size="30"><br>
  Fachbereich: <input type="text" name="fachbereich" size="30"><br>
  Reihe: <input type="text" name="reihe" size="30"><br>
  Videoname: <input type="text" name="videoname" size="30"><br>
  Dozent: <input type="text" name="dozent" size="30"><br>
  Semester: <input type="text" name="semester" size="30"><br>
  <input type="submit" value="Eintragen!">
</form>';

echo'<h3>Daten auslesen</h3>

<form method="get" action="db_lesen.php">
<input type="submit" value="Datenbank Einträge auslesen">
</form>';

echo'<h3>Daten auslesen</h3>

<form method="get" action="db_loeschen.php">
<input type="submit" value="Auflisten zum Löschen">
</form>';

?>

db_schreiben.php:

PHP:
<?php
//Variablen zuweisen
$titel = $_POST["titel"];
$fachbereich = $_POST["fachbereich"];
$reihe = $_POST["reihe"];
$videoname = $_POST["videoname"];
$dozent = $_POST["dozent"];
$semester = $_POST["semester"];


//Verbindung herstellen
$datenbank = mysql_connect("localhost","root","pw") or die ("Verbindung fehlgeschlagen: ".mysql_error());
$verbunden = mysql_select_db("db1-schattenbaum") or die ("Datenbank nicht gefunden oder fehlerhaft");

//Daten in DB speichern
$sql_befehl = mysql_query("INSERT INTO tabelle (titel,fachbereich,reihe,videoname,dozent,semester) VALUES ('".$_POST['titel']."','".$_POST['fachbereich']."','".$_POST['reihe']."','".$_POST['videoname']."','".$_POST['dozent']."','".$_POST['semester']."')");

if($sql_befehl)
{ echo "Ihr Eintrag wurde hinzugefügt."; }

//Verbindung beenden
mysql_close($datenbank);
?>


db_lesen:

PHP:
<?php

//Verbindung herstellen
$datenbank = mysql_connect("localhost","root","pw") or die ("Verbindung fehlgeschlagen: ".mysql_error());
$verbunden = mysql_select_db("db1-schattenbaum") or die ("Datenbank nicht gefunden oder fehlerhaft");

//Daten in DB auslesen
$sql_befehl = mysql_query("SELECT * FROM `tabelle` LIMIT 0 , 30");

echo '<table border="1">';
echo '<tr>';
echo    '<th>ID</th>';
echo    '<th>Titel</th>';
echo    '<th>Fachbereich</th>';
echo    '<th>Reihe</th>';
echo    '<th>Videoname</th>';
echo    '<th>Dozent</th>';
echo    '<th>Semester</th>';
echo '</tr>';
while ($zeile = mysql_fetch_array( $sql_befehl, MYSQL_ASSOC))
{

  echo "<tr>";
    echo "<td>". $zeile['id'] . "</td>";
    echo "<td>". $zeile['titel'] . "</td>";
    echo "<td>". $zeile['fachbereich'] . "</td>";
    echo "<td>". $zeile['reihe'] . "</td>";
    echo "<td>". $zeile['videoname'] . "</td>";
    echo "<td>". $zeile['dozent'] . "</td>";
    echo "<td>". $zeile['semester'] . "</td>";
  echo "</tr>";
}
echo "</table>";

//Verbindung beenden
mysql_close($datenbank);
?>

Und nun zum Problem dem löschen:

PHP:
<?php

//Verbindung herstellen
$datenbank = mysql_connect("localhost","root","pw") or die ("Verbindung fehlgeschlagen: ".mysql_error());
$verbunden = mysql_select_db("db1-schattenbaum") or die ("Datenbank nicht gefunden oder fehlerhaft");

//Daten in DB auslesen
$sql_befehl = mysql_query("SELECT * FROM `tabelle` LIMIT 0 , 30");

$loeschen = "DELETE FROM tabelle WHERE id = 'id'";

echo '<table border="1">';
echo '<tr>';
echo    '<th>ID</th>';
echo    '<th>Titel</th>';
echo    '<th>Fachbereich</th>';
echo    '<th>Reihe</th>';
echo    '<th>Videoname</th>';
echo    '<th>Dozent</th>';
echo    '<th>Semester</th>';
echo    '<th>L&ouml;schen?</th>';
echo '</tr>';
while ($zeile = mysql_fetch_array( $sql_befehl, MYSQL_ASSOC))
{

  echo "<tr>";
    echo "<td>". $zeile['id'] . "</td>";
    echo "<td>". $zeile['titel'] . "</td>";
    echo "<td>". $zeile['fachbereich'] . "</td>";
    echo "<td>". $zeile['reihe'] . "</td>";
    echo "<td>". $zeile['videoname'] . "</td>";
    echo "<td>". $zeile['dozent'] . "</td>";
    echo "<td>". $zeile['semester'] . "</td>";
    echo "<td>".  ."</td>";
  echo "</tr>";
}
echo "</table>";

//Verbindung beenden
mysql_close($datenbank);
?>

So was muss ich nun in " echo "<td>". ."</td>"; " einfügen? Ich würde gerne über die ID, welche auch der PK ist löschen.

Das kann man ja über:

PHP:
$loeschen = "DELETE FROM tabelle WHERE id = 'id'";

machen, oder?

Das würde ich gerne in die Tabelle schreiben, diese ausgegeben und per Button löschen.

Geht das wie ich es mir vorstelle?
 
Mal ne schnelle Lösung: Du erstellst für jede Zeile ein Formular, dass auf loeschen.php oder sonst etwas verweist.
Z.B. <form action='".$_SERVER['PHP_SELF']."' method='post'>
Dann fügst du für jede Zeile ein:
PHP:
echo " <input type='hidden' name='id' value='".$zeile['id']."' />";
echo " <input type='submit' name='delete' value='Zeile entfernen' />";

Auf der gleichen Seite kannst du jetzt per :
PHP:
if(isset($_POST['delete'])) {
		mysql_query("DELETE FROM XXX WHERE id='".$_POST['id']."'") OR die(mysql_error());
		echo "       <th align='left' >Beitrag mit der ID ".$_POST['id']." erfolgreich gelöscht</th>";
	
	}

Angepasst für deine Seite sieht es ungefähr so aus (Achtung! nicht getest! Die ' und " müssen bei mir teilweise vertauscht werden):

PHP:
    <?php
     
    //Verbindung herstellen
    $datenbank = mysql_connect("localhost","root","pw") or die ("Verbindung fehlgeschlagen: ".mysql_error());
    $verbunden = mysql_select_db("db1-schattenbaum") or die ("Datenbank nicht gefunden oder fehlerhaft");
     
    //Daten in DB auslesen
    $sql_befehl = mysql_query("SELECT * FROM `tabelle` LIMIT 0 , 30");
     
    $loeschen = "DELETE FROM tabelle WHERE id = 'id'";
    
	
    echo '<table border="1">';
    echo '<tr>';
    echo '<th>ID</th>';
    echo '<th>Titel</th>';
    echo '<th>Fachbereich</th>';
    echo '<th>Reihe</th>';
    echo '<th>Videoname</th>';
    echo '<th>Dozent</th>';
    echo '<th>Semester</th>';
    echo '<th>L&ouml;schen?</th>';
    echo '</tr>';
	
	///////////////////////////////////////////////////////////////////////
	echo '<tr>'
		if(isset($_POST['delete'])) {
		mysql_query("DELETE FROM tabelle WHERE id='".$_POST['id']."'") OR die(mysql_error());
		echo " <th colspan='8' align='left' >Beitrag mit der ID ".$_POST['id']." erfolgreich gelöscht</th>";
    }
	echo '</tr>'
	///////////////////////////////////////////////////////////////////////
	
    while ($zeile = mysql_fetch_array( $sql_befehl, MYSQL_ASSOC))
    {
    ///////////////////////////////////////////////////////////////////////
	echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>"; 
    ///////////////////////////////////////////////////////////////////////
	
	echo "<tr>";
    echo "<td>". $zeile['id'] . "</td>";
    echo "<td>". $zeile['titel'] . "</td>";
    echo "<td>". $zeile['fachbereich'] . "</td>";
    echo "<td>". $zeile['reihe'] . "</td>";
    echo "<td>". $zeile['videoname'] . "</td>";
    echo "<td>". $zeile['dozent'] . "</td>";
    echo "<td>". $zeile['semester'] . "</td>";
    echo "<td>". ."</td>";
    echo "</tr>";
	///////////////////////////////////////////////////////////////////////
	echo " <input type='hidden' name='id' value='".$zeile['id']."' />";
    echo " <input type='submit' name='delete' value='Zeile entfernen' />";
	echo "</form>";
	///////////////////////////////////////////////////////////////////////
    }
    echo "</table>";
     
    //Verbindung beenden
    mysql_close($datenbank);
    ?>
 
Zuletzt bearbeitet:
Du willst neben jedem Tabelleneintrag auf der Seite einen Button zum löschen des jeweiligen Datensatzes? Dazu als letzte Spalte ein Formular, was nur die ID versteckt enthält und eben den Button.
HTML:
<table>
<tr>
  <td>5</td><td>Schulze</td><td><form action="delete.php" method="get"><input type="hidden" name="id" value="5" /><input type="submit" value="Eintrag löschen" /></td>
</tr>
</table>
PHP:
<?php
// DB verbinden ...
$loeschen = "DELETE FROM tabelle WHERE id = " . mysql_real_escape_string($_GET["id"]) . " LIMIT 1";
$sql_befehl = mysql_query($loeschen);
if(mysql_affected_rows() == 1) {
  //erfolgreich gelöscht
  // ...
} else {
  //nichts gelöscht
  // ...
}
// und zurück zur Anzeige
header("location: index.php");
?>
 
Zuletzt bearbeitet:
Wofür ist das Skript? Eine Demonstration aller bad practices im Bereich Webprogrammierung für ein Seminar? Noch mehr no-gos kann man wohl gar nicht einbauen…
 
@g0l3m

Wie du sehen kannst läuft das lokal. Es ist eine kleine spielerei um ein wenig mit PHP zu machen.

@Spike S. und @666eraser666

Vielen dank! Klapt wunderbar :)
 
So da ich kein neuen Thread aufmachen will nutze ich diesen noch mal :)

Also ich habe mal das ganze ein wenig weiter Entwickelt und zwar habe ich nun noch drei datetime fields in die DB gesetzt allerdings habe ich keine Ahnung wie ich diese füllen kann :(

Code sieht aktuell so aus:

db_schreiben.php:

PHP:
<?php
include 'connect.php';

//Variablen zuweisen

$titel = $_POST["Titel"];
$titel = mysql_real_escape_string($titel);
$medium = $_POST["Medium"];
$medium = mysql_real_escape_string($medium);
$typ = $_POST["Typ"];
$typ = mysql_real_escape_string($typ);
$semester = $_POST["Semester"];
$semester = mysql_real_escape_string($semester);
$fachbereich = $_POST["Fachbereich"];
$fachbereich = mysql_real_escape_string($fachbereich);
$lehrstuhl = $_POST["Lehrstuhl"];
$lehrstuhl = mysql_real_escape_string($lehrstuhl);
$dozent = $_POST["Dozent"];
$dozent = mysql_real_escape_string($dozent);
$veranstaltungsreihe = $_POST["Veranstaltungsreihe"];
$veranstaltungsreihe = mysql_real_escape_string($veranstaltungsreihe);
$medienpfad = $_POST["Medienpfad"];
$medienpfad = mysql_real_escape_string($medienpfad);
$sichtbarkeit = $_POST["Sichtbarkeit"];
$sichtbarkeit = mysql_real_escape_string($sichtbarkeit);
$datum = $_POST['Datum'];
$datum = mysql_real_escape_string($datum);
$passwort = $_POST["Passwort"];
$passwort = mysql_real_escape_string($passwort);
$sprache = $_POST["Sprache"];
$sprache = mysql_real_escape_string($sprache);
$beschreibung = $_POST["Beschreibung"];
$beschreibung = mysql_real_escape_string($beschreibung);
$gueltigab = $_POST["Gueltigkeit_ab"];
$gueltigab = mysql_real_escape_string($gueltigab);
$gueltigbis = $_POST["Gueltigkeit_bis"];
$gueltigbis = mysql_real_escape_string($gueltigbis);
$produzent = $_POST["Produzent"];
$produzent = mysql_real_escape_string($produzent);
$lizenz = $_POST["Lizenz"];
$lizenz = mysql_real_escape_string($lizenz);


//Daten in DB speichern
$sql_befehl = mysql_query("INSERT INTO Medienliste (Titel,Medium,Typ,Semester,Fachbereich,Lehrstuhl,Dozent,Veranstaltungsreihe,Medienpfad,Sichtbarkeit,Datum,Passwort,Sprache,Beschreibung,Gueltigkeit_ab,Gueltigkeit_bis,Produzent,Lizenz) VALUES ('".$_POST["Titel"]."','".$_POST["Medium"]."','".$_POST["Typ"]."','".$_POST["Semester"]."','".$_POST["Fachbereich"]."','".$_POST["Lehrstuhl"]."','".$_POST["Dozent"]."','".$_POST["Veranstaltungsreihe"]."','".$_POST["Medienpfad"]."','".$_POST["Sichtbarkeit"]."','".$_POST["date"]."','".$_POST["Passwort"]."','".$_POST["Sprache"]."','".$_POST["Beschreibung"]."','".$_POST["Gueltigkeit_ab"]."','".$_POST["Gueltigkeit_bis"]."','".$_POST["Produzent"]."','".$_POST["Lizenz"]."')");

if($sql_befehl)
{ echo "Ihr Eintragungen wurden erfolgreich hinzugef&uuml;gt."; }
else
{ echo "Ihr Eintragungen wurden NICHT hinzugef&uuml;gt."; }

//Verbindung beenden
mysql_close($datenbank);
?>

und meine Index.php:

PHP:
<?php

echo'<h3>Daten eintragen</h3>

<form method="post" action="db_schreiben.php">
    Titel: <input type="text" name="Titel" size="30"><br>
    Medium: <input type="text" name="Medium" size="30"><br>
    Typ: <input type="text" name="Typ" size="30"><br>
    Semester: <input type="text" name="Semester" size="30"><br>
    Fachbereich: <input type="text" name="Fachbereich" size="30"><br>
    Lehrstuhl: <input type="text" name="Lehrstuhl" size="30"><br>
    Dozent: <input type="text" name="Dozent" size="30"><br>
    Veranstaltungsreihe: <input type="text" name="Veranstaltungsreihe" size="30"><br>
    Medienpfad: <input type="text" name="Medienpfad" size="30"><br>
    Sichtbarkeit: <input type="text" name="Sichtbarkeit" size="30"><br>
    Datum: <input type="text" name="Datum" size="30"><br>
    Passwort: <input type="text" name="Passwort" size="30"><br>
    Sprache: <input type="text" name="Sprache" size="30"><br>
    Beschreibung: <input type="text" name="Beschreibung" size="30"><br>
    Gültigkeit ab: <input type="text" name="Gueltigkeit_ab" size="30"><br>
    Gültigkeit bis: <input type="text" name="Gueltigkeit_bis" size="30"><br>
    Produzent: <input type="text" name="Produzent" size="30"><br>
    Lizenz: <input type="text" name="Lizenz" size="30"><br><br>
    <input type="submit" value="Eintragen!">
</form>';

echo'<h3>Daten auslesen</h3>

<form method="post" action="db_lesen.php">
    <input type="submit" value="Datenbank Einträge auslesen">
</form>';

echo'<h3>Daten auslesen</h3>

<form method="post" action="db_loeschen.php">
    <input type="submit" value="Auflisten zum Löschen">
</form>';

?>


Muss ich dafür etwas spezielles eingeben?

Wenn ich versuche eine Eingabe nach dem Schema: dd:mm:yyyy hh:mm:ss zu machen, wird alles in die DB eingetragen außer Datum, Gültigkeit_ab und Gültigkeit_bis. In der DB steht dort nur: 0000-00-00 00:00:00
 
Die Hälfte der Lösung hast du schon: 0000-00-00 00:00:00 --> YYYY-MM-DD hh:mm:ss
Datetime Felder in den Datenbanken akzeptieren meines Wissens nur dieses Format. Wenn du also eine Eingabe "21.01.1999 13:13:13" hast, musst du das Format entsprechend ändern: "1999-01-21 13:13:13"
Beim Datetime-Typ kannst du auch die Uhrzeit weglassen, wenn sie uninteressant ist: "1999-01-21"
 
Aua.. Das sollte man natürlich sehen das 4x0 = Jahr ist und das vorne steht...

Wald vor lauter Bäume...

Danke dafür :)
 
Zurück
Oben