Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-03 17:08:59 - Johan Hallin, i forum php, Tråden har 24 Kommentarer och lästs av 1016 personer

Hej alla "pellesoftare"!
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.


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-03 17:41:29 - Peter Larsson

Hej Johan

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).

/ Peter


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-03 17:45:41 - Johan Hallin

Intressant, förstår hur du menar på ett ungefär.
Skulle du kunna visa ett minde kodexempel?


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-03 19:39:19 - Peter Larsson

Hej
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("&nbsp;&nbsp;");

  // 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


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:07:30 - Johan Hallin

Ok, tack för hjälpen.
Föresten, ska parentID vara primary key också? Antar att ID ska vara det.


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:12:10 - Peter Larsson

Hej

<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.

/ Peter


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:16:20 - Johan Hallin

Ok, få se om jag fattat det här rätt nu.

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?


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:19:44 - Peter Larsson

<b>När ett nytt inlägg postas så får det IDet 1 och parentIDet -1?</b>

<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)"?


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:22:14 - Johan Hallin

Uhm, uttryckte mig ganska plumpt.
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.


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:24:02 - Peter Larsson

Alla inlägg längst upp i hierarkin (allra första inlägget) skall sättas <b>parentID=-1</b>.
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>


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:35:37 - Johan Hallin

Så
allra första inlägget kommer att få

parentID -1 och ID 1

Och svaret på det första inlägget kommer att vara
parentID -1 ID 2


Rätt?


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:38:01 - Peter Larsson

Nej

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.


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:42:49 - Johan Hallin

Aha så det blir såhär:

Inlägg 1:
parentID -1 ID 1

svar:
parentID 1 ID 2

svar2:
parentID 2 ID 3

Eller?


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:45:25 - Peter Larsson

Precisely


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:48:42 - Johan Hallin

Underbart, bara ett prob.

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.


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:52:28 - Peter Larsson

Konstigt, svaret skall skrivas ut.
Säker på att du har korrekta data som du anger?


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:55:52 - Johan Hallin

Enligt PHPMyAdmin iallafall =/
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("&nbsp;&nbsp;");

  // Print message.
  print($row["inlagg"] . "<br>");

  // Print all children (answers).
  printMessages("SELECT * FROM forum2 WHERE parentID=" . $row["ID"], $indent+1, $link);
 }
}

?>


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 16:59:20 - Peter Larsson

Kan inte se nåt fel på koden...
Säker på att du skrivit in rätt i databasen?


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 17:03:34 - Johan Hallin

hehe ok, lägger en dump här då från databasen:

-- 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!');


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 17:08:24 - Peter Larsson

Ursäkta mig.
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


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 17:14:26 - Johan Hallin

men den finns ju redan där?

 // Execute SQL.
 $result = mysql_query($query);

 // No children?
 if(mysql_num_rows($result)==0)
  return;


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 17:17:35 - Peter Larsson

Ja du, jag är halvblind :)

Då vet jag faktiskt inte vad som är fel...


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-04 17:23:42 - Johan Hallin

Hmm ok =/


Svara

Sv: Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-10 19:37:02 - Johan Hallin

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å?


Svara

Sv:Forum Mjukvara; Vilket inlägg till vilket ämne?

Postades av 2006-10-12 21:55:29 - Peter Larsson

Vad var det för fel innan som gjorde att det inte funkade?

En ny tråd är juh ett inlägg med parentID=-1


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 868
27 965
271 770
410
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies