ToDo-Tutorial

Kategorien: PHP & MySQL
16 Antworten
cry
cry am Freitag, 14. Oktober 2005 um 14:36
Heyho Leute, ich habe ein Problem mit dem Tutorial, das Script funktioniert bei mir einwandfrei aber wenn ich die ToDos lösche mit dem Entfernen Button, dann löscht er alle ToDos, die bis jetzt hinzugefügt wurden. => webstylez.net/tutorials.php?open=view&id=484 => web61.isp4net.de/test/soulsite/

Kommentare

Markus René Einicher
Markus René Einicher am Freitag, 14. Oktober 2005 um 18:17

Wenn er alle löscht steht irgendwo:
DELETE FROM tabelle
anstatt
DELETE FROM tabelle WHERE id=''

Verstehst du? Du musst in der Abfrage an die Tabelle einschränken, dass er ganz spezifisch nur den einen Datensatz löscht wo eine Bedingung zutrifft.

Kopier bitte den Quelltextauszug hier rein wo der mysql_query angeführt ist indem gelöscht wird.

cry
cry am Freitag, 14. Oktober 2005 um 18:34

=> mysql_query("DELETE FROM admin__todoliste WHERE ID='".$_REQUEST['ID']."'", $db);

Wenn ich mich bei phpMyAdmin einlogge, dann sind bei der admin__todoliste alle ID's 0!

Vielen Dank fuer deine Antwort! =)

Markus René Einicher
Markus René Einicher am Freitag, 14. Oktober 2005 um 18:50

Der Query is in Ordnung, wenn du dir auch nicht angewohnen solltest $_REQUEST zu benutzen, dabei weiß man nämlich nicht, wohers kommt ohne sich den Quelltext durchlesen zu müssen. Wenn du stattdessen $_POST['ID'] verwendest, weiß man sofort, dass es über ein Formular kommt. Wenn du später mal ein Problem hast und dir jemand helfen soll, wird er sich über das $_REQUEST nicht besonders freuen, weil es die Fehlersuche umständlicher macht.

Zum Problem: Bist du dir sicher, dass dies der einzige Query ist, der ein ToDo löschen kann?

Wenn ja wirst du wohl oder übel den ganzen Absatz schreiben müssen, der durchgelaufen wird wenn der Lösch-Befehl greift, so erkenn ich im Moment leider keinen Fehler.

cry
cry am Freitag, 14. Oktober 2005 um 19:09

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>soulsite.de | todo - liste</title>
<style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
color: #000000;
font-size: x-small;
}
body {
background-color: #FFFFFF;
}
a:link {
color: #000000;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000000;
}
a:hover {
text-decoration: underline;
color: #CCCCCC;
}
a:active {
text-decoration: none;
color: #000000;
}
-->
</style>
</head>

<body>
<center>
<?
$db=mysql_connect("localhost","meinBN","meinPW");
mysql_select_db("meineDB");
$result = mysql_query (" select * from admin__todoliste")
or die ("Fehler");

if($_REQUEST[&#039;Entfernen&#039;])
{
mysql_query("DELETE FROM admin__todoliste WHERE ID=&#039;".$_REQUEST[&#039;ID&#039;]."&#039;", $db);
echo "<br>
<div align=&#039;center&#039;>Beitrag bzw. ToDo wurde gel&ouml;scht. Bitte <b><font color=\\"#ff000\\">aktualisiere</b></font> die Seite!</div><br>";
}

echo "<b><font color=\\"#ff000\\">Das Löschen von Beirägen/ToDo&#039;s ist nicht erlaubt. Wenn man einen Beitrag löscht, werden alle gelöscht!",
"<br>Der Fehler wird so schnell es geht behoben! Beiträge können z.Z. nur über miich (Bartug) gelöscht werden.<br>Wenn dein Beitrag gelöscht werden soll wende dich an <a href=&#039;mailto:bb@soulsite.de?subject=soulsite.de - todo&#039;>bb@soulsite.de</a><br><br></font>",
"<div align=&#039;center&#039;><u>Die letzten Beitr&auml;ge bzw. ToDo&#039;s im &Uuml;berblick:</u></div><br><br>";

$ResultPointer = mysql_query("SELECT ID, u_an, u_autor, u_prioitaet, u_rubrik, u_beschreibung, u_todo", $db);

if ($result)
{
while ($row = mysql_fetch_array ($result))
echo "<table width=\\"100%\\" border=\\"0\\" cellspacing=\\"0\\" cellpadding=\\"0\\">",
"<tr>",
"<td>Autor:</td>",
"<td>",
$row ["u_autor"],
"</td>",
"</tr>",
"<tr>",
"<td>An:</td>",
"<td>",
$row ["u_an"],
"</td>",
"</tr>",
"<tr>",
"<td>Betreff:</td>",
"<td>",
$row ["u_todo"],
"</td>",
"</tr>",
"<tr>",
"<td>Priorit&auml;t:</td>",
"<td>",
$row ["u_prioitaet"],
"</td>",
"</tr>",
"<tr>",
"<td>Rubrik:</td>",
"<td>",
$row ["u_rubrik"],
"</td>",
"</tr>",
"<tr>",
"<td>Beschreibung / ToDo:</td>",
"<td>",
$row ["u_beschreibung"],
"</td>",
"</tr>",
"<tr>",
"<td><form action=\\"".$_SERVER[&#039;view_todo.php&#039;]."\\" method=\\"post\\">",
"<input name=\\"Entfernen\\" type=\\"hidden\\" value=\\"1\\">",
"<input name=\\"ID\\" type=\\"hidden\\" value=\\"\\"",
$row ["ID"],
">",
"ToDo erledigt?</td>",
"<td><input name=\\"Send\\" type=\\"submit\\" value=\\"Löschen!\\"></td>",
"</tr>",
"</table><br><img src=\\"web61.isp4net.de/test/gaestebuch/images/linie.gif\\"><br>";

}
?> <br><br>
Um noch einen Beitrag bzw. ToDo zu schreiben, klicke <a href=&#039;todo_add.php&#039;>hier</a>.</div><br>
Um alle ToDo&#039;s anzusehen, klicke <a href=&#039;todo_view.php&#039;>hier</a>.
</body></html>

Das ist die [b] todo_view.php[/b] !

Markus René Einicher
Markus René Einicher am Freitag, 14. Oktober 2005 um 19:16

Hast du überprüft ob $_REQUEST['id'] überhaupt was enthält?

ich meine kommt bei echo $_REQUEST['ID']; die korrekte Zahl raus?
Wenn du eine ToDo einträgst, ist dann auhc ordentlich eine ID drin?

(Hier wäre übrigens $_GET['ID'] zu verwenden, wenns von der URI kommt.)

cry
cry am Freitag, 14. Oktober 2005 um 19:20

Ehrlich gesagt, ich habe keine Ahnung ich hab's mit $_GET['ID'] getestet geht trotzdem nicht..!

Markus René Einicher
Markus René Einicher am Freitag, 14. Oktober 2005 um 21:41

Wie meinst? Wenn du echo $_GET['ID']; oder echo $_REQUEST['ID']; machst zeigt er dir nix an?

cry
cry am Samstag, 15. Oktober 2005 um 12:13

bei GET..

blackfeet
blackfeet am Montag, 17. Oktober 2005 um 14:39

Ähm, hast du nicht gesagt das alle id's 0 sind im phpmyadmin?
Dann musst du wohl deiner id-Spalte AUTO_INCREMENT geben.

cry
cry am Montag, 17. Oktober 2005 um 19:41



Link zum Bild:
img124.imageshack.us/my.php?image=mysql8bv.jpg

blackfeet
blackfeet am Montag, 17. Oktober 2005 um 22:20

Gibt es eine andere spalte die AUTO_INCREMENT hat?
Oder ist die id spalte nicht als PRIMARY KEY markiert?
Beides geht aus dem Bild nicht hervor, also überprüfe das mal
Ich denk dass es dann klappen wird. Villeicht wäre es noch gut, wenn du vorher alle Daten herauslöschen würdest, da sonst ja mehrere id's gleich wären und das darf bei einem PRIMARY KEY Feld nicht sein.

cry
cry am Dienstag, 18. Oktober 2005 um 12:04

Wie lautet denn der MySQL Befehl?!

CREATE TABLE `admin__todoliste` (
`ID` int(11) NOT NULL default &#039;0&#039;,
`u_autor` varchar(80) NOT NULL default &#039;&#039;,
`u_todo` varchar(50) NOT NULL default &#039;&#039;,
`u_beschreibung` text NOT NULL,
`u_prioitaet` varchar(50) NOT NULL default &#039;&#039;,
`u_rubrik` varchar(50) NOT NULL default &#039;&#039;,
`u_an` varchar(50) NOT NULL default &#039;&#039;
) TYPE=MyISAM; ?

Ich kenn mich net so gut mit MySQL aus..

blackfeet
blackfeet am Dienstag, 18. Oktober 2005 um 12:12


CREATE TABLE `admin__todoliste` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`u_autor` varchar(80) NOT NULL default &#039;&#039;,
`u_todo` varchar(50) NOT NULL default &#039;&#039;,
`u_beschreibung` text NOT NULL,
`u_prioitaet` varchar(50) NOT NULL default &#039;&#039;,
`u_rubrik` varchar(50) NOT NULL default &#039;&#039;,
`u_an` varchar(50) NOT NULL default &#039;&#039;,
PRIMARY KEY (ID)
) TYPE=MyISAM;

Markus René Einicher
Markus René Einicher am Mittwoch, 19. Oktober 2005 um 13:42

Hm ja, dass die DaBa in Ordnung is hab ich vorrausgesetzt, dumm von mir :)

cry
cry am Mittwoch, 19. Oktober 2005 um 15:34

Heyho,

jetzt löscht er gar keine Einträge mehr?! & er fängt immer von der Zahl an, wo er aufgehört hat zu zählen..also nicht mehr ID 0 sondern 1 dann 2, usw..

blackfeet
blackfeet am Mittwoch, 19. Oktober 2005 um 17:29

[quote=cry]jetzt löscht er gar keine Einträge mehr?! & er fängt immer von der Zahl an, wo er aufgehört hat zu zählen..also nicht mehr ID 0 sondern 1 dann 2, usw..[/quote]

Kannst du das nochmals erklären? Löscht er jetzt oder nicht?
Was meinst du mit "er fängt mit der Zahl an" ? Das die ID immer um eins höher wird? Das ist auch richtig so. Eine id ist dazu da um eine Zeile in der Datenbank (Datensatz) eindeutig zu identifizieren.
Ich hab da gerade im Skript gesehen das du ein hidden field mit der id gemacht hast, die aber immer leer ist.

"<input name="ID" type="hidden" value=""",

Da gehört bei value nicht "" sondern $row['id']. Und da du method="POST" hast musst du dann mit $_POST['ID'] arbeiten.