Eftersom jag samtidigt i en annan tråd fortfarande har problem
med datum som inte uppdateras med svarsinlägg, tyckte jag det
var bäst att skapa en tråd för enbart tabort-sidan. Jag lade
märke till ett problem med denna sida, nämligen när man tar bort
ett svarsinlägg. Inget fel om man väljer ta bort själva startinlägget
med ev svarsinlägg som tas bort samtidigt, då hamnar man på rätt
sida efteråt, forumets indexsida. Men om man väljer ta bort ett
svarsinlägg, då hamnar man på fel sida, indexsidan istället för
svarssidan. I den första if-delen i koden nedan avgörs vilken
inlägg som ska tas bort. Om variabeln ref_id har värdet noll, då
tas bort både startinlägg och svarsinlägg, annars svarsinlägg.
Det finns även två olika adresser i header-rader beroende på
vilket inlägg man väljer ta bort. Hur ser man till att man hamnar
på rätt sida efteråt?
<?php
if(isset($_POST['tabort'])){
if ($ref_id == 0){
$msquery = "DELETE FROM forum WHERE id = $id";
mssql_query($msquery);
$msquery1 = "DELETE FROM forum WHERE ref_id = $id";
mssql_query($msquery1,$connection);
mssql_close($connection);
header ("Location: index.php");
}else{
$msquery = "DELETE FROM forum WHERE id = $id";
mssql_query($msquery,$connection);
mssql_close($connection);
header ("Location: svar.php?id=$ref_id");
}
}
if(!isset($_POST['tabort'])){
$msquery = "SELECT id, amne FROM forum WHERE id = '".$_GET['id']."'";
$result = mssql_query($msquery,$connection);
//echo $result;
//echo $amne;
while ($n = mssql_fetch_array($result))
{
$id = $n["id"];
$ref_id = $n["ref_id"];
$amne = $n["amne"];
}
?>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../style/style_main.css">
</head>
<body>
<h5>Radering av inlägg</h5>
<p>Ta bort rubriken: <b><?=$amne?></b></p>
<form action="<?=$PHP_SELF?>" method="post">
<input type="hidden" name="id" value="<?=$id?>">
<input type="Submit" name="tabort" value="Ta bort" class="button" />
</form>
<?php }
?>
</body>
</html>
Kan inte se något direkt fel i din kod.
Jag skulle nog ändra till
if ($_POST['ref_id'] == 0){
$msquery = "DELETE FROM forum WHERE id = '{$_POST['id']}'";
mssql_query($msquery);
$msquery1 = "DELETE FROM forum WHERE ref_id = '{$_POST['id']}'";
mssql_query($msquery1,$connection);
mssql_close($connection);
header ("Location: index.php");
}else{
$msquery = "DELETE FROM forum WHERE id = '{$_POST['id']}'";
mssql_query($msquery,$connection);
mssql_close($connection);
header ("Location: svar.php?id=".$_POST['ref_id']."");
}
}
Jaså? Det måste jag kolla upp med den som är ansvarig för servern. Men i semestertider lär jag nog inte få snabbt besked. Har den där inställningen något betydelse för sådana felmeddelanden nedan som jag fortfarande får ibland när jag antingen lägger in nytt eller tar bort inlägg? CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.
Ser nu att i formuläret så finns ju inte något som heter ref_id alltså är det alltid 0!
Du får lägga till det i formuläret.
<input type="hidden" name="ref_id" value="<?=$ref_id?>">
Då får du kolla i koden där du lägger in uppgifterna, något som är fel där.
Du kan ju ändra värdet på ref_id manuellt och testa att ta bort svaret. Bara för att testa detta.
Vad är $_GET['id'] i din SQL sats?
Kan det vara både startinläggets id och svarets id?
Om det är startinläggets id så hämtar det ju bara just den tråden. Och då har ref_id värdet 0.
Om det är svarets id så ska ref_id ha värdet av startinläggets id.
Du bör även lägga formuläret inuti whilesatsen.
<?php
if ($_POST['ref_id'] == 0){
$msquery = "DELETE FROM forum WHERE id = '{$_POST['id']}'";
mssql_query($msquery);
$msquery1 = "DELETE FROM forum WHERE ref_id = '{$_POST['id']}'";
mssql_query($msquery1,$connection);
mssql_close($connection);
header ("Location: index.php");
} else {
$msquery = "DELETE FROM forum WHERE id = '{$_POST['id']}'";
mssql_query($msquery,$connection);
mssql_close($connection);
header ("Location: svar.php?id=".$_POST['ref_id']."");
}
}
if(!isset($_POST['tabort'])){
?>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../style/style_main.css">
</head>
<body>
<h5>Radering av inlägg</h5>
<?php
$msquery = "SELECT id, ref_id, amne FROM forum WHERE id = '".$_GET['id']."'";
$result = mssql_query($msquery,$connection);
while ($n = mssql_fetch_array($result))
{
$id = $n["id"];
$ref_id = $n["ref_id"];
$amne = $n["amne"];
echo "<p>Ta bort rubriken: <b>$amne</b></p>";
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="hidden" name="id" value="<?=$id?>">
<input type="hidden" name="ref_id" value="<?=$ref_id?>">
<input type="Submit" name="tabort" value="Ta bort" class="button" />
</form>
<?php
}
}
?>
</body>
</html>
Vad är $_GET['id'] i din SQL sats?
Kan det vara både startinläggets id och svarets id?
Om det är startinläggets id så hämtar det ju bara just den tråden. Och då har ref_id värdet 0.
Om det är svarets id så ska ref_id ha värdet av startinläggets id.
För varje inlägg på svar-sidan så finns det en länk [ Ta bort ] som går till tabort-sidan med adressen:
[ <a href="tabort.php?id=<?=$id?>"><u>Ta bort</u></a> ]
Startinlägget: id=445 och ref_id=0
Svarsinlägget: id=468 och ref_id=445
Med tanke på resultatet som jag får med <?php echo " id=$id och ref_id=$id";?>
för varje inlägg borde jag istället ändra till [ <a href="tabort.php?id=<?=$ref_id?>"><u>Ta bort</u></a> ].