webForumDet fria alternativet

Problem med svarsinlägg till forum

PHP

56 svar · 1 091 visningar · startad av addeweb

Medlem sedan jan. 2004216 inlägg
Frågan#1

Jag har gjort iordning ett forum för en sajt. Problemet med
forumet är att på svarsidan kan jag inte få några svarsinlägg alls
under startinlägget. Allt som syns av dessa svar är antalet som
ändras i listan på forumets första sida när man har svarat på
startinlägget.

Längre ner i koden under "Hämta alla svar till aktuell inlägg"
finns delen som skulle ha hämtat alla svaren.

Någonting som jag har missat?

svar.php

// Webforum mySQL 1.1
// Copyright © 2001 Mathias Niklasson
// [url]http://www.niklasson.net/[/url]
#########################
<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">
	<script language="JavaScript" src="../scripts/popup.js"></script>
	<script language="JavaScript" src="../scripts/forumkod.js"></script>

<head>
<body>
<?php
if (empty($id))
{
	header ("Location: index.php");
}

 if (isset($svar))

// --- Nedanstående kod som kan tas bort ---
{

$msquery = "SELECT * FROM forum WHERE id = '$id'";
$result = mssql_query($msquery,$connection);

	while ($n = mssql_fetch_array($result))
	{
	$id = $n["id"];
	$namn = $n["namn"];
	$epost = $n["epost"];
	$amne = $n["amne"];
	$text = $n["text"];
	$ref_id = $n["ref_id"];
	$datum = $n["datum"];
	$dat = date('j/n H:i', strtotime($datum));
	}
?>

	<p><?=$rubrik?></p>

<table width="<?=$tbwidth?>" align="center" border="0" cellspacing="0" cellpadding="3">
<tr>
   <td bgcolor="<?=$tdtopbgfarg?>" width="50%"><b><?=$amne?></b></td>
   <?php
// Kolla status
if($status >= 1 && isset($_SESSION['Loginname'])){ ?>
   	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">[ <a href="tabort.php?id=<?=$id?>"><u>Ta bort</u></a> ]</td>
   <?php } else { ?>
	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">&nbsp;</td>
   <?php } ?>

   <td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right"><?=$dat?></td>
</tr>
<tr>.$newbeskr = wordwrap($row[2], 15, "\n", 1).
   <td colspan="3" bgcolor="<?=$tdbgfarg?>"><?=$newtext = wordwrap($text, 50, "\n", 1)?></td>
</tr>
<tr>
   <td colspan="3" bgcolor="<?=$tdbgfarg?>" height="10">&nbsp;</td>
</tr>

<?php
if($epost == " ")
//if (empty($epost)) // Det funkar inte med empty
{
?>
<tr>
   <td colspan="2" bgcolor="<?=$tdbgfarg?>" width="70%">Skrivet av: <b><?=$namn?></b></td>
   <td bgcolor="<?=$tdbgfarg?>" width="30%">&nbsp;</td>
</tr>
<?php
} else { ?>
<tr>
   <td colspan="2" bgcolor="<?=$tdbgfarg?>" width="70%">Skrivet av: <b><?=$namn?></b> <a href="mailto:<?=$epost?>"><u>E-post</u></a></td>
   <td bgcolor="<?=$tdbgfarg?>" width="30%">&nbsp;</td>
</tr>

<?php
}
?>
<tr>
   <td colspan="3"><hr size="1" NOSHADOW /></td>
</tr>
<tr>
   <td colspan="3"><a href="JavaScript:history.go(-1);">&#171 Tillbaka</a></td>
</tr>
</table>
<?
exit;
} 

// --- Ovanstående kod som kan tas bort och inte används. ---

$origid=$id;

// ------ Första inlägget överst på sidan ---------

$msquery = "SELECT * FROM forum WHERE id = '$id'";
$result = mssql_query($msquery);
	while ($r = mssql_fetch_array($result))
	{
	$id = $r["id"];
	$namn = $r["namn"];
	$epost = $r["epost"];
	$amne = $r["amne"];
	$text = $r["text"];
	$ref_id = $r["ref_id"];
	$datum = $r["datum"];
	$dat = date('j/n H:i', strtotime($datum));
	}

?>
	<h3>Forum</h3>

<table width="<?=$tbwidth?>" align="center" border="0" cellspacing="0" cellpadding="4" style="border: solid 2px #FFCCFF; margin-bottom: 10px">
<tr>
   <td bgcolor="<?=$tdtopbgfarg?>" width="50%"><b><?=$amne?></b></td>
<?php
// Kolla status
if($status >= 1 && isset($_SESSION['Loginname'])){ ?>
   	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">[ <a href="tabort.php?id=<?=$id?>"><u>Ta bort</u></a> ]</td>
   <?php } else { ?>
	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">&nbsp;</td>
   <?php } ?>

	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right"><?=$dat?></td>
</tr>
<tr>
   <td colspan="3" bgcolor="<?=$tdbgfarg?>"><?=$newtext = wordwrap($text, 50, "\n", 1)?></td>
</tr>
<tr>
   <td colspan="3" bgcolor="<?=$tdbgfarg?>" height="10">&nbsp;</td>
</tr>
<?
if($epost == " ")
//if (empty($epost))
{
?>
<tr>
   <td colspan="2" bgcolor="<?=$tdbgfarg?>" width="70%">Skrivet av: <b><?=$namn?></b></td>
   <td bgcolor="<?=$tdbgfarg?>" width="30%">&nbsp;</td>
</tr>
<?
}
else
{
?>
<tr>
   <td colspan="2" bgcolor="<?=$tdbgfarg?>">Skrivet av: <b><?=$namn?></b> <a href="mailto:<?=$epost?>"><u>E-post</u></a></td>
   <td bgcolor="<?=$tdbgfarg?>" align="right">&nbsp;</td>
</tr><?php } ?>

 </table>

<?php

// ------ Svarsinlägg ----------
$origamne = $amne;

//------ Om det inte finns svarsinlägg ----------
//$rows = mssql_num_rows(mssql_query("SELECT * FROM forum WHERE ref_id = '".$_GET['id']."'"));
if (!$rows)
{

echo "<p>Det finns inga svar på detta inlägg ännu.</i></p>\n";
echo "<a href=\"index.php\">&#171 Tillbaka</a>";

mssql_close();

}else{
// ------- Hämta alla svar till aktuell inlägg ----------

$msquery = "SELECT * FROM forum WHERE ref_id = '$id' ORDER BY datum DESC";
$result2 = mssql_query($msquery,$connection);
	while ($s = mssql_fetch_array($result2))
	{
	$id = $s["id"];
	$namn = $s["namn"];
	$epost = $s["epost"];
	$amne = $s["amne"];
	$text = $s["text"];
	$ref_id = $s["ref_id"];
	$datum = $s["datum"];
	$dat = date('j/n H:i', strtotime($datum));
}
?>
<table width="<?=$tbwidth?>" align="center" border="0" cellspacing="0" cellpadding="4" style="border: solid 2px #FFCCFF; margin-bottom: 10px">
<tr>
   <td bgcolor="<?=$tdtopbgfarg?>" width="50%"><b><?=$amne?></b></td>
<?php
// Kolla status
if($status >= 1 && isset($_SESSION['Loginname'])){ ?>
   	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">[ <a href="tabort.php?id=<?=$id?>"><u>Ta bort</u></a> ]</td>
   <?php } else { ?>
	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">&nbsp;</td>
   <?php } ?>

	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right"><?=$dat?></td>
</tr>
<tr>
   <td colspan="3" bgcolor="<?=$tdbgfarg?>"><?=$newtext = wordwrap($text, 50, "\n", 1)?></td>
</tr>
<tr>
   <td colspan="3" bgcolor="<?=$tdbgfarg?>" height="10">&nbsp;</td>
</tr>
<?
if($epost == " ")
//if (empty($epost))
{
	?>
	<tr>
   	<td colspan="2" bgcolor="<?=$tdbgfarg?>" width="70%">Skrivet av: <b><?=$namn?></b></td>
   	<td bgcolor="<?=$tdbgfarg?>" width="30%">&nbsp;</td>
	</tr>
<?} else {?>
<tr>
   <td colspan="2" bgcolor="<?=$tdbgfarg?>">Skrivet av: <b><?=$namn?></b> <a href="mailto:<?=$epost?>"><u>E-post</u></a></td>
   <td bgcolor="<?=$tdbgfarg?>" align="right">&nbsp;</td>
</tr>
<?php
	
}
mssql_close();

echo "</table>\n\n";

// Slut för hämtning av svar till aktuell inlägg
?>
<p><a href="index.php">&#171 Tillbaka</a></p>

<?php }

if ($svar == 0)
{
?>

<h5 align="center">Skriv ett svar.</h5>
      <form name="form1" action="skicka.php" method="post">
      <input type="hidden" name="ref_id" value="<?=$origid?>">
	<input type="hidden" name="id" value="<?=$origid?>">
	<table cellpadding="2" cellspacing="0" border="0" align="center">
	<tr><td >Namn:<br />
        <input type="text" size="25" maxlength="20" name="namn" class="input"/>
      	</td><td>E-post:<br>
        <input type="text" size="25" maxlength="60" name="epost" class="input" />
	</td></tr>
	<tr><td colspan="2">Ämne:<br />
        <input type="text" size="25" maxlength="30" class="input" value="SVAR: <?=$origamne?>" size="35" disabled class="input" />
        <input type="hidden" name="amne" value="SVAR: <?=$origamne?>" class="input" />
        </td></tr>
	<tr><td colspan="2">Meddelande:<br />
        <textarea name="text" cols="55" rows="10" class="input"></textarea></td></tr>
	<tr><td colspan="2" align="center" height="30">
	<input type="button" value="B" title="Fet text" class="button"style="font-weight:bold;" onclick="insert('[b]Fet text[/b]')" />&nbsp;
	<input type="button" value="U" title="Understruken text" class="button" style="font-weight:bold; text-decoration: underline;" onclick="insert('[u]Understruken text[/u]')" />&nbsp;
	<input type="button" value="K" title="Kursiv text" class="button" style="font-weight:bold; font-style: italic;" onclick="insert('[i]Kursiv text[/i]')" />&nbsp;
 	<input type="button" value="URL" title="Länkadress" class="button" style="font-weight:bold;" onclick="insert('[url][u]Länkadress[/u][/url]')" />&nbsp;
	<input type="reset" value="Rensa" class="button" />&nbsp;
	<input type="submit" value="Skicka" class="button" />
	</td></tr>
	<tr><td colspan="2" align="center">Använd gärna <a href="#" onClick="popupwindow('forumkod.php',300,250); return false;"><u>forumkod</u></a>.</td></tr>
	</table>
	</form>

<?php }
  }
 ?>
</body>
</html>
Medlem sedan jan. 2004216 inlägg
#2

Finns det någon här som kan hjälpa mig?

Medlem sedan jan. 2004216 inlägg
#3

Måste tillägga att jag har haft det här problemet liggande länge och försökt komma på vad som var fel med den här sidan innan jag bestämde mig för att lägga in ett inlägg här till slut. Jag vore tacksam om jag kunde få det här lilla problemet löst nån gång.

Medlem sedan aug. 20002 975 inlägg
#4

Du kör:

$msquery = "SELECT * FROM forum WHERE ref_id = '$id' ORDER BY datum DESC";
$result2 = mssql_query($msquery,$connection);
    while ($s = mssql_fetch_array($result2))
    {
    $id = $s["id"];
    $namn = $s["namn"];
    $epost = $s["epost"];
    $amne = $s["amne"];
    $text = $s["text"];
    $ref_id = $s["ref_id"];
    $datum = $s["datum"];
    $dat = date('j/n H:i', strtotime($datum));
}

Det innebär att du för varje varv i slingan bara lägger in nya värden i variabler, men du skriver inte ut något.
Du får lägga in din utskrift i slingan också.

Medlem sedan jan. 2004216 inlägg
#5

Ojdå, att utskriftet ligger utanför slingan?
Får väl flytta while-loopens slutparentes längre ner i koden om det är så du menar?

Medlem sedan aug. 20002 975 inlägg
#6

Men det sista inlägget borde ha skrivits ut.
Så det är frågan om din while-slinga överhuvudtaget körs.
Lägg in lite kontrollutskrifter för test.

Medlem sedan jan. 2004216 inlägg
#7

Jag ska göra det imorrn kväll när jag finns på skolan. Ska kolla upp det då. Tack så länge.

Medlem sedan jan. 2004216 inlägg
#8

Fortfarande problem med svarsinlägg

Jag har ändrat så här nedan men det funkar inte än med
svarsinläggen. Troligen är det fel på while-loopen. :(

 
// ------- Hämta alla svar till aktuell inlägg ----------

$msquery = "SELECT * FROM forum WHERE ref_id = '$id' ORDER BY datum DESC";
$result = mssql_query($msquery,$connection);
	while ($s = mssql_fetch_array($result))	{
	$id = $s["id"];
	$namn = $s["namn"];
	$epost = $s["epost"];
	$amne = $s["amne"];
	$text = $s["text"];
	$ref_id = $s["ref_id"];
	$datum = $s["datum"];
	$dat = date('j/n H:i', strtotime($datum));

	?>
	<table width="<?=$tbwidth?>" align="center" border="0" cellspacing="0" cellpadding="4" style="border: solid 2px #FFCCFF; margin-bottom: 10px">
	<tr>
   	<td bgcolor="<?=$tdtopbgfarg?>" width="50%"><b><?=$amne?></b></td>
	<?php
	// Kolla status
	if($status >= 1 && isset($_SESSION['Loginname'])){ ?>
   		<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">[ <a href="tabort.php?id=<?=$id?>"><u>Ta bort</u></a> ]</td>
   	<?php } else { ?>
		<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right">&nbsp;</td>
   	<?php } ?>

	<td bgcolor="<?=$tdtopbgfarg?>" width="25%" align="right"><?=$dat?></td>
	</tr>
	<tr>
   	<td colspan="3" bgcolor="<?=$tdbgfarg?>"><?=$newtext = wordwrap($text, 50, "\n", 1)?></td>
	</tr>
	<tr>
   	<td colspan="3" bgcolor="<?=$tdbgfarg?>" height="10">&nbsp;</td>
	</tr>
	<?php
 
	if($epost == " "){
	//if (empty($epost))
	?>
	<tr>
   	<td colspan="2" bgcolor="<?=$tdbgfarg?>" width="70%">Skrivet av: <b><?=$namn?></b></td>
   	<td bgcolor="<?=$tdbgfarg?>" width="30%">&nbsp;</td>
	</tr>
	<?php } else {?>
	<tr>
   	<td colspan="2" bgcolor="<?=$tdbgfarg?>">Skrivet av: <b><?=$namn?></b> <a href="mailto:<?=$epost?>"><u>E-post</u></a></td>
   	<td bgcolor="<?=$tdbgfarg?>" align="right">&nbsp;</td>
	</tr>
	<?php }

	echo "</table>\n\n";

	}
	mssql_close();
Medlem sedan aug. 20002 975 inlägg
#9

Kolla så att SQL-frågan ger något att skriva ut:

$msquery = "SELECT * FROM forum WHERE ref_id = '$id' ORDER BY datum DESC";
$result = mssql_query($msquery,$connection);
echo mssql_num_rows($result)." rader med svar hittades. <br>";
   while ($s = mssql_fetch_array($result))    {
Medlem sedan jan. 2004216 inlägg
#10

Jag har provat med följande:

$msquery = "SELECT * FROM forum WHERE ref_id = '$id' ORDER BY datum DESC";
$result = mssql_query($msquery,$connection);
echo mssql_num_rows($result)." rader med svar hittades. <br>";
   while ($s = mssql_fetch_array($result))    {

Men tyvärr fick jag inget resultat med SQL-frågan.

Medlem sedan aug. 20002 975 inlägg
#11

Skrivs det ut "0 rader med svar hittades" eller skriver det inte ut någonting ?

Är det det senare så får du kolla upp vad som gör att du överhuvudtaget inte går in i koden som kör SQL-frågan. Någon if-sats tidigare som styr fel ?

Medlem sedan jan. 2004216 inlägg
#12

Fortfarande får jag följande text när jag svarar på startinlägget:
"Det finns inga svar på detta inlägg ännu.".

Medlem sedan jan. 2004216 inlägg
#13

Det skrivs inte ut nånting alls med den echo-rad som jag lade till igår. Inte ens en nolla.
Nåväl, jag får väl kolla originalfilerna, jämföra och se om det är något som fattas.

Medlem sedan aug. 20002 975 inlägg
#14

Du har följande kod:

//------ Om det inte finns svarsinlägg ----------
//$rows = mssql_num_rows(mssql_query("SELECT * FROM forum WHERE ref_id = '".$_GET['id']."'"));
if (!$rows)
{

echo "<p>Det finns inga svar på detta inlägg ännu.</i></p>\n";
echo "<a href=\"index.php\">&#171 Tillbaka</a>";

mssql_close();

}else{
// ------- Hämta alla svar till aktuell inlägg ----------

$msquery = "SELECT * FROM forum WHERE ref_id = '$id' ORDER BY datum DESC";
$result2 = mssql_query($msquery,$connection);
    while ($s = mssql_fetch_array($result2))

Om if-satsen if (!$rows) blir sann kommer du att få det meddelande du fick, och det får du om det inte finns någon $rows.

Tag bort avmarkeringen på raden innan så du får ett värde på $rows.

Medlem sedan jan. 2004216 inlägg
#15

Herregud!!!
Det där har jag missat!! :r

Medlem sedan jan. 2004216 inlägg
#16

Har nu rättat felet. Nu fungerar forumet som det ska. Det som
återstår är paging på första sidan och slutjusteringar i övrigt.
Tack för hjälpen den här gången.

Medlem sedan jan. 2004216 inlägg
#17

Forumet krånglar fortfarande lite, särskilt när man tar bort inlägg.
Får ett sådant felmeddelande nedan några gånger, inte varje
gång. Vad kan det bero på? Hur löser jag det?

CGI Error
The specified CGI application misbehaved by not returning a
complete set of HTTP headers.

Så här ser tabort-sidan ut:

<?php
	$amne = $_GET['amne'];

	$msquery = "SELECT FROM forum WHERE id = $id";
		if ($ref_id == 0)
		{
		$msquery = "DELETE FROM forum WHERE id = $id";
		mssql_query($msquery);
		$msquery2 = "DELETE FROM forum WHERE ref_id = '$id'";
		mssql_query($msquery2);
		mssql_close();
		header ("Location: index.php");
		}else{
		$msquery = "DELETE FROM forum WHERE id = '$id'";
		mssql_query($msquery);
		mssql_close();
		header ("Location: svar.php?id=$ref_id");		
		} 
	?>
		<h3 style="font-family:Verdana">Radering av inlägg</h3>
		<p style="font-family:Verdana; font-size: 11px">Ta bort rubriken: <b><?=$amne?></b></p>
		<form action="<?=$PHP_SELF?>" method="post">
		<input type="hidden" name="id" value="<?=$id?>">
		<input type="Submit" value="Ta bort" style="font-weight: bold" />
		</form>
Medlem sedan jan. 2004216 inlägg
#18

Samma felmeddelande får jag också när man skickar ett svarsinlägg men inte varje gång.

Medlem sedan aug. 20002 975 inlägg
#19

Testa med att ändra

$amne = $_GET['amne'];

till

if (isset($_GET['amne'])) {
   $amne = $_GET['amne'];
}
Medlem sedan jan. 2004216 inlägg
#20

Jag ska ändra det men vill också visa felmeddelandet som jag får om jag öppnar själva tabort-sidan:

*Warning: mssql_query(): message: Line 1: Incorrect syntax near '='. (severity 15) in C:\Ex-jobb\teqla\forum\tabort.php on line 38

Warning: mssql_query(): Query failed in C:\Ex-jobb\teqla\forum\tabort.php on line 38

Warning: mssql_query(): message: Line 1: Incorrect syntax near '='. (severity 15) in C:\Ex-jobb\teqla\forum\tabort.php on line 40

Warning: mssql_query(): Query failed in C:\Ex-jobb\teqla\forum\tabort.php on line 40

Warning: Cannot modify header information - headers already sent by (output started at C:\Ex-jobb\teqla\forum\tabort.php:38) in C:\Ex-jobb\teqla\forum\tabort.php on line 43

Radering av inlägg
Ta bort rubriken:

Tabort.knapp*

Det är lite problem där fortfarande, särskilt med sql-frågorna, tror jag.

291 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
158 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)