addewebMedlem sedan jan. 2004216 inlägg 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>
PeddaMedlem sedan juni 20006 032 inlägg 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']."");
}
}
Hur har du register globals satt i php.ini?
addewebMedlem sedan jan. 2004216 inlägg
Pedda skrev:
Hur har du register globals satt i php.ini?
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.
addewebMedlem sedan jan. 2004216 inlägg Jag har gjort de ändringar som du föreslog men det blev ingen skillnad med vilken sida man hamnar på efter borttag. Det verkar inte fungera.
Vet nu också att register globals är satt på off.
addewebMedlem sedan jan. 2004216 inlägg Ska jag använda $_SERVER['PHP_SELF'] istället för $PHP_SELF som jag har i formuläret??
PeddaMedlem sedan juni 20006 032 inlägg Använd $_SERVER['PHP_SELF'] istället eller dokumentnamnet.
addewebMedlem sedan jan. 2004216 inlägg Redan gjort men det fungerar fortfarande inte med vilken sida.
<h5>Radering av inlägg</h5>
<p>Ta bort rubriken: <b><?=$amne?></b></p>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="hidden" name="id" value="<?=$id?>">
<input type="Submit" name="tabort" value="Ta bort" class="button" />
</form>
PeddaMedlem sedan juni 20006 032 inlägg 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?>">
addewebMedlem sedan jan. 2004216 inlägg Jag har lagt in denna rad men fortfarande fungerar det inte med vilken sida man hamnar på.
PeddaMedlem sedan juni 20006 032 inlägg Glöm inte att hämta ref_id i din SQL sats!
Ändra:
$msquery = "SELECT id, amne FROM forum WHERE id = '".$_GET['id']."'";
till:
$msquery = "SELECT id, ref_id, amne FROM forum WHERE id = '".$_GET['id']."'";
addewebMedlem sedan jan. 2004216 inlägg Har gjort ändringar men det funkar inte med vilken sida.
PeddaMedlem sedan juni 20006 032 inlägg Vad i **** ;)
Börjar ta slut på ideer nu. :)
Är du säker på att ref_id har ett värde i databasen?
addewebMedlem sedan jan. 2004216 inlägg Har sett i databasen nyss att $ref_id har värdet 0 för startinlägget och andra siffror för svarsinlägg. Knepigt! :l
PeddaMedlem sedan juni 20006 032 inlägg 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.
addewebMedlem sedan jan. 2004216 inlägg Jag har lagt in en sådan rad:<?php echo " id=$id och ref_id=$ref_id";?> i inläggen på svarssidan. Det stämmer precis som i databasen.
Jag tror jag får fundera på det tills imorrn.
PeddaMedlem sedan juni 20006 032 inlägg 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>
addewebMedlem sedan jan. 2004216 inlägg
Pedda skrev:
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> ].
Har jag fattat rätt? ;)
Jag lägger också formuläret inuti whíle-satsen.
PeddaMedlem sedan juni 20006 032 inlägg Nej, om du ändrar länken så kommer tråden att raderas helt.
Testa att radera svar efter att du har lagt formuläret inuti whilesatsen.
addewebMedlem sedan jan. 2004216 inlägg Ok, jag får testa det imorrn tisdagen. Just nu kan jag inte komma åt filerna. Jag återkommer ifall något problem dyker upp.
addewebMedlem sedan jan. 2004216 inlägg Det funkar fortfarande inte med vilken sida efter jag gjort de ändringarna som du föreslog.
<?php
if(isset($_POST['tabort'])){
if ($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'];
?>
<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 }
} ?>