PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : loeschen von daten in einer DB


eastkay
31.12.2003, 14:31:02
Ich habe folgendes Problem, ich kann keine einzelnen Datensätze über ein Formular löschen. Wo hab ich einen Fehler gemacht ?
kann mir jemand helfen?

Dank, schon mal im voraus. Kay

----------------------------------------------------------------------
Formular aus Termdel.php
----------------------------------------------------------------------
<form1 action="loeschen.php" method="post">
<table border="0" width="100%">
<tr bgcolor="#33ccff">
<td width="2%"><b><i>ID</i></b></td>
<td width="7%"><b><i>Datum</i></b></td>
<td width="7%"><b><i>Zeit</i></b></td>
<td width="10%"><b><i>Beschreibung bzw. Ort</i></b></td>
<td width="20%"><b><i>Treffpunkt</i></b></td>
<td width="20%"><b><i>Art</i></b></td>

</tr>
<?php
include("db.php");
$abfrage = "SELECT id_term, zeit_term, bez_term, ort_term, datum_term, art_term FROM termin order by date_term ;";
$ergebnis = mysql_query($abfrage,$opendb);

while($zeile=mysql_fetch_array($ergebnis))

{
echo "<tr>n";
echo " <td><input type="text" name="$zeile[id_term]" value="$zeile[id_term]" size="3"></td>n";
echo " <td><input type="text" name="$zeile[datum_term]" value="$zeile[datum_term]" size="10"></td>n";
echo " <td><input type="text" name="$zeile[zeit_term]" value="$zeile[zeit_term]" size="15"></td>n";
echo " <td><input type="text" name="$zeile[bez_term]" value="$zeile[bez_term]" size="25"></td>n";
echo " <td><input type="text" name="$zeile[ort_term]" value="$zeile[ort_term]" size="20"></td>n";
echo " <td><input type="text" name="$zeile[art_term]" value="$zeile[art_term]" size="20"></td>n";
echo " <td><input type="submit" value="löschen" ></td>n";
echo "</tr>n";
}

mysql_close();
?>
</table>
</form1>

----------------------------------------------------------------------
Inhalt Datei loeschen.php
----------------------------------------------------------------------

<?php
/* Datenübernahme aus dem Formular termdel.php*/
$array["$zeile[id_term]"] = trim ($array["$zeile[id_term]"]);

$host = "localhost"; /*Severname*/
$user = "root"; //Benutzer//
$pass = ""; //Passwort//
$DBname = "thuringia"; //Datenbankname//


$openDB = mysql_connect($host, $user, $pass);


$query = "delete from termin where id_term ='$array[$zeile[id_term]]'";

if (mysql_query ($DBname, $query, $openDB))
echo '<body bgcolor="#33ccff">
<p align="right"><a href="PHP_self"></a></p>
<center>
<h1><i>Termin wurde gelöschtt</i></h1><br><br><br>
<a href=index.php"><i>Verwaltung</i></a><spacer type="horizontal" size="10"><a href="termeingabe.php"><i>neuer Termin</i></a><br><br><br>' ;
else
echo '<body bgcolor="#33ccff">
<p align="right"><a href="$PHP_SELF"></a></p>
<center>
<h1><i>FEHLER !!! Termin wurde nichtgeöscht!</i></h1><br><br><br>
<a href="termeingabe.php"><i>neuer Termin>/i></a><br><br><br>' ;

mysql_close ($openDB);
?>

c4
31.12.2003, 15:29:43
Uiuiui. Da ist aber noch so einiges nicht wirklich richtig.

Termdel.php
- <form1...> und </form1> - was ist das? Es gibt bloß <form> und </form> (mehr (http://selfhtml.teamone.de/html/formulare/definieren.htm))

- Tabelle: Wo bleiben die restlichen 24%? ;)

- SELECT ... FROM - sind das alle Felder? Wenn ja, dann schreib einfach SELECT * FROM (beachten! (http://www.dclp-faq.de/q/q-sql-select.html))

- mysql_fetch_array() - arbeitest Du immer bei den Arrays immer mit dem Feldnamen? Dann reicht mysql_fetch_assoc() aus

- name="$zeile[id_term]" (gilt auch für alle andern) - dynamische Bezeichner machen in dem Fall eher keinen Sinn. Benne alle(!) Felder nach ihrem Feldnamen in mySQL, also id_term, datum_term, usw. Erleichtert die Arbeit durchaus


loeschen.php
- Zugangsdaten solltest Du vor dem Posten entfernen, nicht jeder ist lieb

- echo 1 a) PHP_SELF - da fehlt das $

- echo 1 b) a) wird nicht funktionieren, da Strings mit ' nur ausgegeben werden. Nimm dafür lieber "


So, nun zum eigentlichen.
Du solltest das komplette Formular (Formular, Tabelle, Felder) innerhalb der Schleife ausgeben lassen. Damit würden die Submit-Buttons in jeder Zeile Sinn machen und Du hast ein paar andere Probleme weniger.
In loeschen.php muss die Abfrage dann so lauten:
$query = "DELETE FROM termin WHERE id_term ='$id_term';";
Hast Du Dich an die Punkte weiter oben gehalten, sollte das alles klappen.

eastkay
02.01.2004, 10:18:20
Hi,
habe alles so gemacht, geht aber immer noch nicht. aber wehnigstens kommt jetzt eine fehlermeldung. Wie hast du das mit der schleife gemeint??

c4
02.01.2004, 10:56:48
Das mit der Schleife ist so gemeint:// NICHT so:
<?php
echo "<form>n";
echo " <table>n";
while ($zeile=mysql_fetch_array($ergebnis)) {
echo ...;
echo "<input type='submit'>";
}
echo " </table>n";
echo "</form>n";
?>

// sondern so:
<?php
while ($zeile=mysql_fetch_array($ergebnis)) {
echo "<form>n";
echo " <table>n";
echo $zeile['datum_term'];
echo " <input type='submit'>n";
echo " </table>n";
echo "</form>n";
}
?> Damit hast Du für jeden Datensatz ein eigenes Formular. Ist wohl die simpelste Variante.

Prinzip einleuchtend?


Falls es dann noch immer nicht geht poste bitte gleich den neuen Code mit dazu. Mal schauen, wie es inzwischen aussieht.

meikel (†)
02.01.2004, 11:11:15
Original geschrieben von eastkay
Ich habe folgendes Problem, ich kann keine einzelnen Datensätze über ein Formular löschen. Wo hab ich einen Fehler gemacht?
'Einen'? Wenn's nur einer wäre.

Aufgrund der Tatsache, daß Du keine Superglobals ($_GET, $_POST, $_REQUEST) verwendest, nehme ich mal kühn an, daß Du mit PHP 4.0.6 oder schlechter auskommen mußt.

termdel.php

<form1 action="loeschen.php" method="post">
<table border="0" width="100%">
<?php
include("db.php");
$abfrage = "SELECT id_term, zeit_term, bez_term, ort_term, datum_term, art_term FROM termin order by date_term ;";
# Wir nehmen mal kühn an, daß in $opendb eine gültige Verbindungskennung steckt
$ergebnis = mysql_query($abfrage,$opendb);
# Wir nehmen ebenfalls kühn an, daß $ergebnis eine gültige Ressourcenkennung hat

while($zeile=mysql_fetch_array($ergebnis))
{
echo "<tr>n";
echo " <td><input type="text" name="$zeile[id_term]" value="$zeile[id_term]" size="3"></td>n";
# usw
}

mysql_close();
?>
</table>
</form1> <-- Huch?
Du packst also die janze MySQL Tabelle in einen Sack voll Textefelder und diese in ein Formular. Das ist mutig, aber Du wirst schon wissen, was Du tust. Wahrscheinlich sind es nur 10-20 Datensätze, die Du pikanterweise in Textfelder gleichen Namens packst. Die Preisfrage an dieser Stelle: liefert Dein Lieblingsbrowser nu den ersten oder den letzten Wert beim Server ab?

# loeschen.php

<?php
/* Datenübernahme aus dem Formular termdel.php*/
$array["$zeile[id_term]"] = trim ($array["$zeile[id_term]"]);
Hier habe ich lange überlegt, was Du mit dieser Zeile bezwecken willst. Du nimmst eine Feld-Variable mit dem Namen einer Funktion, die vom lieben Gott (oder wem auch immer) mit ominösen Werten gefüllt wurde, und entfernst die Leerzeichen (von was auch immer) am Anfang und am Ende. Hier müßte eigentlich selbst eine abgeschaltete Fehlererkennung schon janz laut brüllen.

$query = "delete from termin where id_term ='$array[$zeile[id_term]]'";
Und hier müßte die PHP Fehlererkennung zusammen mit dem MySQL Server um die Wette brüllen.

Was treibst Du da eigentlich?

eastkay
02.01.2004, 12:02:05
Ich versuche PHP zu lernen!!

meikel (†)
02.01.2004, 12:16:10
Original geschrieben von eastkay
Ich versuche PHP zu lernen!!
Der Weg ist falsch.

eastkay
02.01.2004, 13:03:47
kannst du mir einen besseren weg zeigen ?

eastkay
11.01.2004, 12:44:42
C4 danke für deine Hilfe. mein script geht jetzt.

Meikel ES WAR DOCH DER RICHTIGE WEG!!!!