webForumDet fria alternativet

Inlägget vill inte postas

PHP

3 svar · 439 visningar · startad av Havregryn

Medlem sedan juni 200288 inlägg
Frågan#1

Håller på och experimenterar med PHP. Är annars en rätt så van ASPare så det blir en del fel som man inte är van vid...

Med följande kod visar jag alla poster i forumet. Om jag väljer att posta ett nytt inlägg så verkar det inte ända något, man kommer till en "Sidan kan inte visas" med adressen /?add=topic. Jag vill att inlägget skall hamna i databasen. Vad är felet?

Dessutom så är det en annan sak som stör mig lite grand. På startsidan står det 'Odefinerad variabel' två gånger, och sedan pekar den på show, respektive add. hur får man bort det?

Tacksam för alla svar. Här kommer koden:

<?
session_start();

include("../data.php");
include("../include.php");

// Öppnar databasen
$objConn = mysql_connect($dbHost,$dbUser, $dbPass);
mysql_select_db($dbDb);

// Sidan man kommer till när man läser ett inlägg
If ($_GET['show'] == "thread") {

$strSQL = mysql_query("SELECT * FROM tblForum where id = '".$_GET['id']."'") or exit(mysql_error());
$thread = mysql_fetch_array($strSQL);

	echo "<tr><td><span class=\"mediumTopic\">" . $thread['topic'] . "</span></tr></td>";
	echo "<tr><td height=\"5\"></tr></td>";
	echo "<tr><td>" . $thread['post'] . "</tr></td>";
	echo "<tr><td>Postat av: <a href=\"../medlem/?username=" . $thread['username'] . "\">" . $thread['username'] . "</a> " . $thread['datetime'];

exit;
}

If ($_GET['add'] == "topic") {

// Tilldelar variablerna världen ifrån formuläret
$strTopic = $_POST['topic'];
$dtmDatetime = date("Y-m-d H:i");
$dtmReplyDatetime = date("T-m-d H:i");
$strCategory = $_POST['category'];
$strPost = $_POST['post'];
$strUsername = $_SESSION['username'];

// Lägger till datan i databasen
mysql_query("INSERT INTO tblForum (topic, datetime, replydatetime, category, post, username) VALUES ('" . $strTopic ."', '". $dtmDatetime ."', '". $dtmReplydatetime ."', '". $strCategory ."', '". $strPost ."', '". $strUsername ."')") or exit(mysql_error());

header("Location: index.php");

exit;
}

// Visar startsidan
Else {

// Väljer ut den data som ska presenteras
$strSQL = mysql_query("SELECT * FROM tblForum WHERE replyid = '0' order by replydatetime DESC") or exit( mysql_error() );

	// Skriver ut tabeller och dylikt
	echo "<table><tr><td>";
	echo "<span class=\"largeTopic\">Diskussionsforum</span></tr></td>";
	echo "<tr><td>";
	echo "Vårt diskussionsforum är öppet för alla spelintresserade. För att förstå hur det är utformat samt läsa om cookies,";
        echo "så klickar du <a href=\"../information/\">här</a>.Nu visas alla kategorier. Du kan själv välja vilket forum du vill gå till, då klickar du ";
        echo "<a href=#>här.</a>Trevlig läsning!</tr></td>";
	echo "<tr><td><table>";
	echo "<tr><td>Kategori</td><td>Inlägg</td><td>Senaste svar</td><td>Läst</td><td>Skribent</td></tr></td>";
	echo "<tr><td>";

// Loopar igenom innehållet
while ($news = mysql_fetch_array($strSQL)) 

{
	echo "<tr><td>" . $news['category'] . "</tr></td>";
	echo "<td><a href=\"?show=thread&id=" . $news['id'] . "\">" . $news['topic'] . "</a>";
	echo "(<i>" . $news['answer'] . "</i>)</td>";
	echo "<td>" . $news['replydatetime'] . "</td>";
	echo "<td>" . $news['views'] . "</td>";
	echo "<td><a href=\"../medlem/?username=" . $news['username'] . "\">" . $news['username'] . "</a></tr></td>";

}

	echo "</tr></table></table>";

?>

<table>
<tr><td>
<span class="mediumTopic">Skriv ett nytt inlägg</span>
<form action="?add=topic" method="post" name="kannibal">
Rubrik:
<br><input type="text" name="topic" maxlength="30"> 
<br>
Inlägg:<br>
<textarea cols="50" rows="8" name="text">
</textarea>
<br>
<input type="submit" value="Skicka">
</form>
</tr></td>
</table>

<?

}

// Stänger databasanslutningen
mysql_close($objConn);
?>
Medlem sedan juni 200032 967 inlägg
#2

Om jag väljer att posta ett nytt inlägg så verkar det inte ända något, man kommer till en "Sidan kan inte visas"

Då kan det vara bra att ändra inställningarna i IE till att inte visa Friendly http error messages / Egna http-felmeddelanden.

Medlem sedan juni 200288 inlägg
#3

Det har jag gjort, men det enda som visas när man postat ett inlägg är: Sidan kan inte visas, HTTP 405 Resursen är inte tillåten.
Internet Information Services...

Medlem sedan aug. 20002 975 inlägg
#4

För att slippa 'odefinierad variabel':

If (isset($_GET['show']) && $_GET['show'] == "thread") {

samt

If (isset($_GET['add']) && $_GET['add'] == "topic") {

Sen bör du ha ett par 'undefined index' när du postar.

$strCategory = $_POST['category'];
$strPost = $_POST['post'];

Variabeln/arrayen $_POST innehåller de fält som postades från formuläret, och utöver 'topic' hittar jag endast 'text' där, fälten 'post' och 'category' kan jag inte hitta där, därför finns heller inte $_POST['category'] och $_POST['post'].

Sen är jag heller inte förtjust i att posta ett formulär med underförstått filnamn, som i följande action:

... action="?add=topic" ...

Sätt dit filnamnet framför. Visserligen brukar det fungera på Apache med en något så när modern webbläsare, men för säkerhets skull, använd alltid filnamn.
Nu vet jag inte vad denna fil heter, men heter den index.php så blir det

... action="index.php?add=topic" ...
254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)