Hej alla "pellesoftare"! Hej Johan Intressant, förstår hur du menar på ett ungefär. Hej Ok, tack för hjälpen. Hej Ok, få se om jag fattat det här rätt nu. <b>När ett nytt inlägg postas så får det IDet 1 och parentIDet -1?</b> Uhm, uttryckte mig ganska plumpt. Alla inlägg längst upp i hierarkin (allra första inlägget) skall sättas <b>parentID=-1</b>. Så Nej Aha så det blir såhär: Underbart, bara ett prob. Konstigt, svaret skall skrivas ut. Enligt PHPMyAdmin iallafall =/ Kan inte se nåt fel på koden... hehe ok, lägger en dump här då från databasen: Ursäkta mig. men den finns ju redan där? Ja du, jag är halvblind :) Fått det att funka, men det är en sak jag undra, om man vill skapa en ny tråd hur gör man då? Vad var det för fel innan som gjorde att det inte funkade?Forum Mjukvara; Vilket inlägg till vilket ämne?
Jag håller på och utvecklar en forum mjukvara i PHP, och jag har nu fastnat i ett ganska krångligt problem.
När man nu väl har postat ett inlägg hamnar det i databasen och får ett unikt id:
$sql = "INSERT INTO forum (amne,inlagg,datum) VALUES('".$amne."','".$inlagg."','".$datum."')";
Sedan vill man förståss läsa inlägget, inga problem hittills:
$sql = "SELECT amne,inlagg FROM forum ORDER BY id = '".$id."' DESC LIMIT 1";
Och sen ska ju svaren skrivas ut också, och det är här jag får problem.
Svaren la jag i en egen tabell för att inte göra allt så rörigt.
#
#För att läsa ett inlägg trycker man på en länk på första sidan för att komma till
#ämnet.
#<a href="viewtopic?id=<?php $row['id'] ?>. Därav $_GET['id'].
$id = $_GET['id'];
$sql2 = "SELECT * FROM svar WHERE id='".$id."' ORDER BY datum DESC";
Och här kommer problemet, hur ska databasen kunna veta vart varje inlägg ska hamna?
Tacksam för svar.
Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Jag antar att varje inlägg kan svaras på, oberoende av i vilken nivå i "tråd-trädet" den befinner sig i?
Om du bara har två nivåer så blir det ännu enklare.
Det du bör göra är att skapa ett fält "parentID" (eller liknande) i databasen, vilken anger IDt på det inlägg som agerar förälder till det aktuella inlägget. (Inlägg på nivå 0 (inlägg som ej är ett svar till ett annat), sätter du till något lämpligt värde (såsom "null", "-1" or whatever)).
För varje inlägg (post) hämtar du sedan poster som har "parentID" satt till postens "ID". Sedan sätter du denna kodsekvens i snurr (rekursiva anrop).
/ PeterSv:Forum Mjukvara; Vilket inlägg till vilket ämne?
Skulle du kunna visa ett minde kodexempel?Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Pillade ihop en rekursiv lösning.
En grund du kan stå på.
Start-anrop:
printMessages("SELECT * FROM MyForum WHERE parentID=-1", 0, $link);
<b>Databas:</b>
parentID = -1 för inlägg på högsta nivån ("rot-inlägg").
<code>
ID, int
parentID, int
text, varchar
</code>
<b>PHP:</b>
$query = SQL fråga.
$indent = Aktuell nivå.
$link = Din databas koppling.
function printMessages($query, $indent, $link) {
// Execute SQL.
$result = mysql_query($query);
// No children?
if(mysql_num_rows($result)==0)
return;
// Loop through all messages.
while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
// Print indent.
for($i=0; $i<$indent; $i++)
print(" ");
// Print message.
print($row["text"] . "<br>");
// Print all children (answers).
printMessages("SELECT * FROM Testar WHERE parentID=" . $row["ID"], $indent+1, $link);
}
}
Det är inte snyggt med SQL-anrop och rekursion, men det går.
Går att lösa på andra sätt också.
Alternativt kan du hämta varje nivå för sig med en SELECT och iterera med metoden "djupet först".
Men det du vinner ur hastighetssynpunkt är inte mycket ändå om du inte har en gigantisk tråd med hundratals svar på svar...
/ Peter
Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
Föresten, ska parentID vara primary key också? Antar att ID ska vara det.Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
<b>ID</b> bör vara primär nyckel.
<b>parentID</b> blir indirekt en form av nyckel ("foreign key") men är ingenting du direkt anger.
/ PeterSv:Forum Mjukvara; Vilket inlägg till vilket ämne?
När ett nytt inlägg postas så får det IDet 1 och parentIDet -1?
Och sen för varje nytt inlägg (inte svar) så ökas parentID och ID med 1?Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
<b>Och sen för varje nytt inlägg (inte svar) så ökas parentID och ID med 1?</b>
Vad är det för skillnad på dem?
"ett nytt inlägg" och "ett nytt inlägg (inte svar)"?Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
Med <b>När ett nytt inlägg postas så får det IDet 1 och parentIDet -1?</b>
så menade jag det allra första inlägget som postas.
Och med <b>När ett nytt inlägg postas så får det IDet 1 och parentIDet -1?</b>
så menade jag de som postas efter.Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Ett inlägg, A, som är svar på inlägg B skall sättas <b>A.parentID=B.ID</b>.
dvs:
<code>
Inlägg 1 (ID=1, parentID=-1)
Inlägg 11 (ID=2, parentID=1)
Inlägg 12 (ID=3, parentID=1)
Inlägg 121 (ID=4, parentID=3)
Inlägg 13 (ID=5, parentID=1)
Inlägg 2 (ID=6, parentID=-1)
Inlägg 21(ID=7, parentID=6)
...
</code>Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
allra första inlägget kommer att fåparentID -1 och ID 1
Och svaret på det första inlägget kommer att varaparentID -1 ID 2
Rätt?
Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Ett svar skall aldrig ha <b>parentID=-1</b>. -1 anger att det är ett "root" inlägg, dvs det första inlägget som postas (inlägg som startar tråden).
Svarsinlägget skall ha <b>parentID=x</b>, där <b>x</b> är <b>ID</b>t på inlägget som besvaras.Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
Inlägg 1:
parentID -1 ID 1
svar:
parentID 1 ID 2
svar2:
parentID 2 ID 3
Eller?
Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
Det serut såhär i min databas nu:
<code php>
ID 1
parentID -1
inlagg "Hej"
ID 2
parentID 1
inlagg "Svar på hej!"
<code>
Men bara huvudinlägget skrivs ut, (använder funktionen du skrev för att se om jag fattat rätt)
och inte svaret.Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Säker på att du har korrekta data som du anger?Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
Du kan ju kolla på koden om du vill:
<b>Svar.php</b>
<?php
include 'print.php';
$link = mysql_connect("localhost", "***", "*****");
mysql_select_db("databas");
printMessages("SELECT * FROM forum2 WHERE parentID=-1", 0, $link);
?>
<b>print.php</b>
<?php
function printMessages($query, $indent, $link) {
// Execute SQL.
$result = mysql_query($query);
// No children?
if(mysql_num_rows($result)==0)
return;
// Loop through all messages.
while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
// Print indent.
for($i=0; $i<$indent; $i++)
print(" ");
// Print message.
print($row["inlagg"] . "<br>");
// Print all children (answers).
printMessages("SELECT * FROM forum2 WHERE parentID=" . $row["ID"], $indent+1, $link);
}
}
?>
Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Säker på att du skrivit in rätt i databasen?Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
-- phpMyAdmin SQL Dump
-- version 2.6.1-pl3
-- http://www.phpmyadmin.net
--
-- Värd: localhost
-- Skapad: 04 oktober 2006 kl 16:58
-- Serverversion: 4.1.21
-- PHP-version: 5.1.6
--
-- Databas: `databas`
--
-- --------------------------------------------------------
--
-- Struktur för tabell `forum2`
--
CREATE TABLE `forum2` (
`ID` int(11) NOT NULL auto_increment,
`parentID` int(11) NOT NULL default '0',
`inlagg` text NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Data i tabell `forum2`
--
INSERT INTO `forum2` VALUES (1, -1, 'root');
INSERT INTO `forum2` VALUES (2, 1, 'svar root!');
Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Det är fel i min funktion (så kan det gå när kod produceras direkt här i rutan utan att testa :) )
Lägg till
$result = mysql_query($query);
före
if(mysql_num_rows($result)==0)
return;
Nu bör det funka.
/ Peter
Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
// Execute SQL.
$result = mysql_query($query);
// No children?
if(mysql_num_rows($result)==0)
return;
Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Då vet jag faktiskt inte vad som är fel...Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?
Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?
En ny tråd är juh ett inlägg med parentID=-1