Avatar billede staf Nybegynder
12. april 2005 - 11:47 Der er 7 kommentarer og
1 løsning

Ang. fremstilling af et forum

Hej eksperter,
Jeg er ved at lave et lille simpelt forum i php og mysql.
Først lige min DB struktur, som består af 3 tabeller:
-----------------------------
Tabel "forum"
*ID (primary key)
*name (forfatterens navn)
*dato
*category_ID (FK)
*header_ID (FK)
*text (selve indlægget)

Tabel "category"
*category_ID (primary key)
*category_name

Tabel "header"
*header_ID (primary key)
*header_name
--------------------------------------

Ideen er at værdierne i category-tabellen er præintastede. Jeg har PT 2 mulige kategorier. Brugeren vælger så fra en select til hvilken kategori indlægget skal høre. ID nummeret fra den ene af de 2 mulige kategorier bliver så skrevet over i forum tabellen som "category_ID".
Når der oprettes et nyt indlæg/sp. er det ideen at dette indlægs overskrift først bliver skrevet til "header-tabellen", og herefter bliver så denne overskrifts ID skrevet til "forum" tabellen som "header_ID". Hvis der svares på et allerede eksisterende sp., skal der ikke skrives en ny overskrift til "header" tabellen, men blot indsættes det samme header_ID til forum tabellen.
Altså alt i alt forholdsvis simpelt!!
Jeg har indtil nu lavet oprettelse af et nyt indlæg, og det bliver skrevet korrekt til tabellerne.
Jeg er nu ved at lave visning af indlæg, og er stødt ind i et forudset problem. Jeg sender brugeren til en side der viser de 2 hovedkategorier. Her kan man så klikke på en af disse, og for vist alle overskrifter/sp. oprettet i denne kategori.
Dette gør jeg med denne stump kode:
----------------------------------------------------------
$conn = mysql_connect("localhost", "root");
mysql_select_db("(DB_NAVNET");
?>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td>Fiskeri generelt:</td></tr>
<?php
$overskrift_ID = mysql_query("SELECT header_ID FROM forum WHERE category_ID = '1'");
while ($row = mysql_fetch_array($overskrift_ID)) {
$header_ID = $row['header_ID'];

$overskrift_navn = mysql_query("SELECT header_name FROM header WHERE header_ID = '$header_ID'");
while ($row = mysql_fetch_array($overskrift_navn)) {
$header_name = $row['header_name'];

?>
     
<tr><td></td></tr>
<tr><td align="left"><a href="link_til_indlag"><b>
<?echo "$header_name";?></b></a></td></tr>

<?php
}   
}   
?>   
----------------------------------------------------------

Nu får jeg jo så listet alle de relevante overskrifter. Mit problem er nu hvordan jeg knytter disse overskrifter sammen med deres rigtige ejermand, dato og tekst, når man så klikker på en af disse. For PHP og DB`en kan jo ikke se hvilken overskrift der klikkes på, selvom den pågældende overskrift er unik i DB`en...eller ?? Så hvad gør jeg i den fil der skal vise et specifikt indlæg, hvis der fx. klikkes på overskrift 5 i den evt. viste liste?
Jeg er stadig nybegynder i dette så måske er det åbentlyst :) håber ihvertfald problemet er til at forstå.

På forhånd tak
Staf
Avatar billede kongfjong Nybegynder
12. april 2005 - 12:08 #1
Du kan fx. sørge for, at de links der 'ligger i' hver overskrift, altså denne stump kode: "<a href="link_til_indlag">", indeholder en GET-variabel, der fortæller hvillket header_ID der skal vises når man klikker på den pågældende link.

Lad os sige, at man ønsker at se den øverste tråd der er linket til. Det har header_ID 1. Så kunne linket se således ud: www.mitdomæne.dk/showThread.php?headerID=1

Så kan du, i filen showThread.php, sørge for, at du laver en funktion der viser den pågældende tråd, med at argument der fx. hedder $headerID, fx:

function visTraad ($headerID)
{
En masse kode....
}

Inde i den function, bruger du så $headerID til at søge i forum-tabellen, for at få vist alle indlæg med lige nøjagtigt det headerID. Fx:

$traad = "SELECT * FROM forum WHERE header_ID = $headerID ORDER BY DESC";

Og så kan du køre en while-løkke, der udskrivr samtlige indlæg:)
Avatar billede staf Nybegynder
12. april 2005 - 13:19 #2
Kanon...
prøver lige at rode med det, og vender tilbage :)
Avatar billede staf Nybegynder
14. april 2005 - 14:32 #3
Nååå nu ha jeg efter en travl periode fået tid til at rode lidt med det igen :)
Jeg har prøvet flg.:

I filen der viser overskrifterne har jeg nu dette link:
<a href="specifikt_indlag_vis.php?header_ID=1">
-------------------------------------------------------
I filen der skal vise et specifikt indlæg har jeg dette:
<?php
$conn = mysql_connect("localhost", "root");
mysql_select_db("DB_NAVN");

if( isset($_GET['header_ID']) )
{
  $header_ID = mysql_escape_string($_GET['header_ID']);
   
  $sql = mysql_query("SELECT name FROM forum WHERE header_ID='$header_ID'");
    while ($row = mysql_fetch_array($sql)){
    $navn = $row['name'];
    echo "$navn";
    }
}
?>

-----------------------------------------
det jeg i første omgang forsøger er blot at få knyttet det rigtige navn på den pågældende overskrift!!
Og det er jo meget godt bortset fra at jeg får sendt 1 som header ID med over hvergang, ligemeget hvilken overskrift der klikkes på??
Har også prøvet noget ala:

<a href="specifikt_indlag_vis.php?header_ID=$header_ID"> som jo findes tidligere i filen der lister de korrekte overskrifter. Men det går hen og bliver noget rent gætteværk :(
Mit problem er altså stadig at få videresendt det "header_ID" der i min header tabel svarer til den specifikt listede overskrift, således at jeg kan samle hele indlægget igen og vise det, ved at "select`e" på dette specifikke "header_ID" i forum tabellen.

Kan muligvis være at jeg ikke helt har forstået din forklaring??
Så kom endelig igen ;)

Mvh.
staf
Avatar billede kongfjong Nybegynder
14. april 2005 - 14:53 #4
Når du laver din liste over indlæggene der findes i dit forum, skal du, vha. en løkke, lave overskrifterne til indlægget, således at ID fra forum-tabellen, blive smidt ind i hvert nye link der laves.

$sql = "SELECT * FROM forum"

$sql_res = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_array($sql_res))
{
    <a href="specifikt_indlag_vis.php?header_ID=$row['id']">
}

Kan du se logikken?
Avatar billede staf Nybegynder
14. april 2005 - 21:45 #5
Kan godt se logikken, men kan stadig ikke få det til at funge :( :(
poster lige mine 2 involverede filer, kan være der dukker noget op så.

FIL1 - vis overskrifterne
-----------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php
$conn = mysql_connect("localhost", "root");
mysql_select_db("DB_NAVNET");
?>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td>OVERSKRIFT</td></tr>
<?php
$overskrift_ID = mysql_query("SELECT header_ID FROM forum WHERE category_ID = '1'");
while ($row = mysql_fetch_array($overskrift_ID)) {
$header_ID = $row['header_ID'];

      $overskrift_navn = mysql_query("SELECT header_name, header_ID FROM header WHERE header_ID = '$header_ID'");
      while ($row = mysql_fetch_array($overskrift_navn)) {
      $header_name = $row['header_name'];
     
?>
     
      <tr><td></td></tr>
      <tr><td align="left" class="registrerings_visninger"><a href="specifikt_indlag_fis_gen.php?header_ID=$row['header_ID']"> <?php echo "$header_name"?></a></td></tr>
      <?php
      }   
}   
?>
</table>
</body>
</html>
--------------------------------------------------------------
Fint nok... denne fil udskriver overskrifterne korrekt. Jeg prøver så at trække "header_ID`et" med til næste fil i linket som du skrev.


FIL2 - Vis navn på forfatter til pågældende overskrift
-----------------------------------------------------------
<?php
$conn = mysql_connect("localhost", "root");
mysql_select_db("DB_NAVNET");

if( isset($_GET['header_ID']) )
{
  $header_ID = mysql_escape_string($_GET['header_ID']);
   

  $sql = mysql_query("SELECT name FROM forum WHERE header_ID='$header_ID'");
    while ($row = mysql_fetch_array($sql)){
    $navn = $row['name'];
    echo "$navn";
    }
}
?>
------------------------------------------------------
Når denne fil bliver afviklet, vises intet.... ingen fejlmeddelelse, men en tom side, istedet for navn på forfatter til overskriften???

Ved ikke om jeg er helt ved siden af med noget.... er stadig grøn i php/mysql hehe...
Måske du nu kan se hvor jeg specifikt går galt ??


P.S håber det er OK at poste hele koden, selvom det er en specifik mysql kategori.
Avatar billede staf Nybegynder
15. april 2005 - 22:07 #6
Jeps, så fik jeg endeligt løst problemet. Skrev hele dynen forfra udfra dit princip, og så var den der. Kanon...
Tak for hjælpen
smid et svar :)
Avatar billede kongfjong Nybegynder
15. april 2005 - 23:37 #7
Så lidt:)
Avatar billede kongfjong Nybegynder
15. april 2005 - 23:37 #8
Hov prøve rigen;)
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