Avatar billede msdb Nybegynder
07. september 2011 - 16:46 Der er 7 kommentarer

php mini forum

Jeg er igang med at lave et lille forum til mit site, som tillader brugeren at lave indlæg med titel og tekst. Hvilket fungerer fint. Problemerne opstår dog, når jeg forsøger at lave en funktion, som kan svare på indlæggene.

Jeg har oprettet 2 tables i min database:

threads (id, title, message, author, replies, posted)
replies (id, thread, message, author, posted)

På sitet viser jeg en oversigt af indlæggene med denne bid:

<?php
$sql = mysql_query("SELECT * FROM threads ORDER BY posted DESC");
while($r = mysql_fetch_array($sql)) {
$posted = date("jS M Y h:i",$r[posted]);
echo "<h3><a href='msg.php?id=$r[id]'>$r[title]</a> ($r[replies])</h3><h4>Skrevet af $r[author] - $posted</h4>";
}
?>


Ved at klikke på et indlæg smides man hen på msg.php, som viser indlægget og giver mulighed for at udfylde et svar:

<?php
echo "<a href='thread.php'>Tilbage...</a>";
$sql = mysql_query("SELECT * FROM threads WHERE id = '$_GET[id]'");
while($r = mysql_fetch_array($sql)) {
echo "<h2>$r[title]</h2>";
$posted = "tid";
echo "$r[message]<h4>Skrevet af $r[author] - $posted</h4><hr>";
}
echo "<h3>Svar...</h3>";
$sql = mysql_query("SELECT * FROM replies WHERE thread = '$_GET[id]'");
while($r = mysql_fetch_array($sql)) {
$posted = "tid2";
echo "$r[message]<h4>Skrevet af $r[author] - $posted</h4><hr>";
}
?>
<form action="newreply.php" method="POST">
<input type="hidden" value="<?php echo $_GET[id]; ?>" name="thread"><br>
Besked:<br><textarea cols="60" rows="5" name="message"></textarea><br>
<input type="submit" value="Send">
</form>


Og ved submit sendes man videre til newreply.php:

<?php
$time = time();
$mah = $_SESSION['MM_Username'];
mysql_query("INSERT INTO replies VALUES(NULL,'$_POST[thread]','$_POST[message]','$mah','$time')");
mysql_query("UPDATE threads SET replies = replies + 1 WHERE id = '$_POST[thread]'");
echo "Reply Posted.<br><a href='msg.php?id=$_POST[thread]'>Return</a>";
?>


Problemet lader til at være at svaret aldrig bliver oprettet i databasen. Når jeg manuelt indsætter nogle værdier i databasen, har msg.php intet besvær med at vise dem, hvilket må betyde at der går noget galt i newreply.php. Hvor problemet opstår har jeg besvær med at gennemskue.

Jeg har brug for vejledning.
Avatar billede erikjacobsen Ekspert
07. september 2011 - 16:56 #1
Det kunne måske være gavnligt at se om mysql har en fejlbesked til dig:

mysql_query("INSERT INTO replies VALUES(NULL,'$_POST[thread]','$_POST[message]','$mah','$time')") or die(mysql_error());
Avatar billede msdb Nybegynder
07. september 2011 - 17:20 #2
Fejlen lyder:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id' in /home/virtual/sb35.dk/public_html/msg.php on line 253 5','blablabla','ja' at line 1


linie 253 fra msg.php er:

<input type="hidden" value="<?php echo $_GET[id]; ?>" name="thread">


Hvis $_GET ikke er tilstrækkelig, skal der så endnu en mysql_query til?
Avatar billede majbom Novice
07. september 2011 - 18:30 #3
det er ikke i den linje feljen ligger - som du kan se er det en SQL-fejl og der er ingen sql-kald i den linje.

smid evt hele koden ind på pastebin.com og læg et link her...
Avatar billede msdb Nybegynder
07. september 2011 - 18:37 #4
Avatar billede majbom Novice
07. september 2011 - 18:57 #5
hmm der er jo ingen mysql-insert... kan sq ikke lige se hvorfor den fejl kommer, det ligner altså en fejl der kommer i forbindelse med et insert statement
Avatar billede msdb Nybegynder
09. september 2011 - 12:14 #6
Aaargh jeg glemte citationstegn i $_GET !

Skulle have været:

<input type="hidden" value="<?php echo $_GET["id"]; ?>" name="thread

Skidtet virker nu :|

Giv svar hvis i ønsker point.
Avatar billede majbom Novice
09. september 2011 - 18:45 #7
det burde nu ikke give den fejl...

jeg springer over
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester