Delete

Matlox

Mitglied
Hallo Leute,
nach langer Zeit bin ich wieder am Codieren, da kommt auch schon das nächste Problem,
die delete Funktion, ich will bestimmte Datensätze via Id aus der Datenbank löschen, hab drüber gelesen, auch hier im Forum und bin zu folgendem Ergebnis gekommen:

PHP:
	include ("inc/login/check.php");
{
	eval ("dooutput(\"".gettemplate("tpl/admin/index")."\");"); 
}
	if (isset($_POST['delete'])) 
{ 
	mysql_query("DELETE FROM `news` WHERE `Id` = '$Id'");
	echo mysql_error();
}
	$sql = "SELECT * FROM news";	
	$eintrage = mysql_num_rows(mysql_query($sql));
	$maxproseite = 5;
	$i = 0; 
	$seiten = $eintrage / $maxproseite;
	if (!isset($_GET['site']))
{
	$sql = "SELECT * FROM news ORDER BY Id DESC LIMIT 0,".$maxproseite.";";   
} 
	else 
{
	$abeintrag = $_GET['site'] * $maxproseite - $maxproseite;
	$sql = "SELECT * FROM news ORDER BY Id DESC LIMIT ".$abeintrag.",".$maxproseite.";";
}
	if (!$res_id = mysql_query($sql)) 
	die ('Achtung, SQL-Befehl ist falsch!');
	if (mysql_num_rows($res_id))
	while ($row = mysql_fetch_array($res_id))
{
	$Id = $row['Id']; 
	$titel = $row['titel']; 
	$datum = $row['datum']; 
	$inhalt = $row['inhalt']; 

	eval ("dooutput(\"".gettemplate("tpl/admin/newsedit")."\");");  
}
	else 
{ 
	eval ("dooutput(\"".gettemplate("tpl/news/nonews")."\");");  
} 
	for($i = 1; $i - 1< $seiten; $i++)
{
	echo "<a href=\"index.php?section=news&site=".$i."\">".$i."</a> "; 
}

doch da haut was ned hin, er zeigt mir:

Notice: Undefined variable: Id in /var/www/htdocs/s14w66/html/inc/admin/news_edit.php on line

wenn ich natürlich statt DELETE FROM ..... Id = 3 mache löscht er mir die Dritte also komme ich zu dem entschluss das ich was bei der Automatischen Id auswahl falsch mache, wie wirds richtig geschrieben?

danke im vorraus, mfg Matlox
 
Wo wird die Variable $Id denn definiert? Ich gehe mal davon aus, dass du sie per post übermittelst, dann müsstest du, wie du es ja schon getan hast, auch auf das superglobale Array $_POST zurückgreifen, da vermutlich register_globals ausgeschaltet ist:
PHP:
mysql_query("DELETE FROM `news` WHERE `Id` = " . intval(abs($_POST['Id'])));

// Steht die Id in der URL, also z.B. seite.php?Id=2, musst du auf GET zurück greifen
mysql_query("DELETE FROM `news` WHERE `Id` = " . intval(abs($_GET['Id'])));
 
hmm... ok, ja er sendet die Id denk ich mal bei Post delete mit, ich hab oben das Formular grafisch dargestellt, so das er die News anzeigt und man unten durch den button löschen kann mit diesem befehl:

HTML:
		<form action="index.php?section=newsedit" method=post>
			<tr>
				<td align="right">
				<input type="submit" name="delete" value="News Löschen">
				<input type="submit" name="edit" value="News editieren"></td>
			</tr>

das ist wohl falsch oder?

mfg danke für die Antwort
 
Da wird nix mitgeschickt. Du musst, wenn du die News aus der Datenbank ausliest, auch die ID mit auslesen und als HIDDEN-Feld oder wie du es magst im Formular mit unter bringen.
HTML:
		<form action="index.php?section=newsedit" method=post>
			<tr>
				<td align="right">
				<input type="hidden" name="Id" value="<?php echo $Id; ?>">
				<input type="submit" name="delete" value="News Löschen">
				<input type="submit" name="edit" value="News editieren"></td>
			</tr>
 
wie würde das im Php Formular ausehen und wo müsste es stehen,
ich denke im Formular wird ja die Id mitgeschickt mit:

$Id = $row...

oder ned?
 
Nein es wird natürlich nicht mitgeschickt, wenn du es nicht explizit angibst... Das Formular sollte so oder änlich aussehen, wie ich es oben gepostet hab. Wichtig ist dabei folgendes Feld:
HTML:
<input type="hidden" name="Id" value="<?php echo $Id; ?>">

Wobei ich denke, dass du bei deinem Templatesystem nur $Id schreiben musst und die Php-Tags und das [phpf]echo[/phpf] weglassen.
 
Dieses traurig-fröhliche Gesicht, neben dem, wo steht, ob man online oder offline ist :) Und den Thread noch als Erledigt markieren bitte ;) Das kannst du neben dem Antworten Button.
 
Doch noch nich erledigt :D
hab das ganze jetzt so geschrieben:
PHP:
	if (isset($_POST['delete'])) 
{ 
	$Id = intval(abs($_POST['Id']));

	mysql_query("DELETE FROM `news` WHERE `Id` = '$Id'");
	echo mysql_error();
}

jetzt löscht er auch noch, nur nicht die die er sollte, sondern immer die Ältersten News ?! :confused:
 
Zurück