Avatar billede MarkA Praktikant
17. juli 2007 - 20:36 Der er 31 kommentarer og
1 løsning

while inden i en while

jeg er ved at lege lidt med en hjemmelavet forum/debat side og er ved at lave en while løkke som skal hente alle forum-navne ind, og samtidig skal den vise det nyeste indlæg og hvem der har oprettet det...

Mit foreslag er:

$output = "<div align='center' style=\"width:800px; margin:0px auto 0px auto; border:1px solid #0a5bf0; border-bottom:0px;\"> ";
while($row_post = mysql_fetch_array($get_newest_topic)) {
$topic_id = $row_topic[topic_id];
$forum_id = $row_topic[forum_id];
$topic_header = $row_topic[topic_header];
$topic_owner = $row_topic[topic_owner];

while($row_forum = mysql_fetch_array($get_forum)) {
$forum_id = $row_forum[forum_id];
$forum_name = $row_forum[forum_name];
$forum_descript = $row_forum[forum_descript];

$output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\">
            <a href='showforum.php?forum_id=$forum_id'>$forum_name</a>
            </div>
           
             
            <div style=\"float:none; border-bottom:1px solid #0a5bf0;\">
            <a href='show_topic.php?topic_id=$topic_id;>$topic_header $topic_owner</div>
            ";
          }
          }
         
$output .= "</div>";

men jeg kan ikke få det til at virke, men synes heller ikke opstillingen af løkkerne ser rigtigt ud...

Så er der nogle der kan hjælpe????
Avatar billede majbom Novice
17. juli 2007 - 21:37 #1
du henter slet ikke data fra din database, det er nok dér den er gal ;)
Avatar billede MarkA Praktikant
17. juli 2007 - 21:39 #2
hmmm. du får lige hele filen så....

jeg har nemlig hentet dem...

<?
$host = "localhost";
$user = "root";
$pass = "";

$conn = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db("myforum",$conn) or die(mysql_error());


$get_forum = mysql_query("select * from forum order by forum_name desc") or die(mysql_error());
$get_newest_topic = mysql_query("select * from topic order by topic_id desc limit 1") or die (mysql_error());

$output = "<div align='center' style=\"width:800px; margin:0px auto 0px auto; border:1px solid #0a5bf0; border-bottom:0px;\"> ";
while($row_post = mysql_fetch_array($get_newest_topic)) {
$topic_id = $row_topic[topic_id];
$forum_id = $row_topic[forum_id];
$topic_header = $row_topic[topic_header];
$topic_owner = $row_topic[topic_owner];

while($row_forum = mysql_fetch_array($get_forum)) {
$forum_id = $row_forum[forum_id];
$forum_name = $row_forum[forum_name];
$forum_descript = $row_forum[forum_descript];







$output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\">
            <a href='showforum.php?forum_id=$forum_id'>$forum_name</a>
            </div>
           
             
            <div style=\"float:none; border-bottom:1px solid #0a5bf0;\">
            <a href='show_topic.php?topic_id=$topic_id;>$topic_header $topic_owner</div>
            ";
          }
          }
         
$output .= "</div>";

?>
<html>
<head>
<title>Oversigt</title>
</head>

<body style="margin:0px auto 0px auto;">
<? print $output;?>



</body>
</html>
Avatar billede majbom Novice
17. juli 2007 - 21:47 #3
det giver heller ikke så meget mening det kode...

du vil først hente kategorierne, og så for hver kategori, de 5 nyeste emner, eller hvad?
Avatar billede MarkA Praktikant
17. juli 2007 - 21:50 #4
Jeg vil hente alle kategorierne ind og så det nyeste emne på hver kategori
Avatar billede majbom Novice
17. juli 2007 - 22:03 #5
okay, jeg går ud fra at tabellen "forum" indeholder dine kategorier og "topic" indeholder alle emner...

så skal det være noget med:
$res = mysql_query("SELECT * FROM forum ORDER BY forum_name DESC") or die(mysql_error());
while($forums = mysql_fetch_array($res)){
  $res1 = mysql_query("SELECT * FROM topics WHERE forum_id='$forums[forum_id]' LIMIT 1") or die(mysql_error());
  while($topic = mysql_fetch_array($res1)){
      $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\"><a href=\"showforum.php?forum_id=$forums['forum_id']\">$forums['forum_name']</a></div><div style=\"float:none; border-bottom:1px solid #0a5bf0;\"><a href=\"show_topic.php?topic_id=$topic['topic_id']\">$topic['topic_header'] $topic['topic_owner']</div>";
  }
}

nu har jeg så lige skrevet det, og kommet i tanker om at det nok var smartere med en INNER JOIN i stedet for 2 while-løkker, men jeg gider ikke at lave det om lige nu :)
kigger på det i morgen.
se evt. om dette virker... :)
Avatar billede MarkA Praktikant
17. juli 2007 - 22:05 #6
det lyder godt... jeg tjekker lige i morgen så.... men prøver lige dette først... atkker indtil videre
Avatar billede majbom Novice
17. juli 2007 - 22:09 #7
selv tak, godnat :)
Avatar billede majbom Novice
18. juli 2007 - 09:55 #8
virkede det?
Avatar billede MarkA Praktikant
18. juli 2007 - 10:02 #9
nej desværre...
Avatar billede majbom Novice
18. juli 2007 - 10:18 #10
har du et link til siden, så man kan følge med? :)
Avatar billede MarkA Praktikant
18. juli 2007 - 10:45 #11
nej den kører på min localhost....
men du kan da lige få fejlen...

det hele ser nu sådan ud:
<?
$host = "localhost";
$user = "root";
$pass = "";

$conn = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db("myforum",$conn) or die(mysql_error());


$res = mysql_query("SELECT * FROM forum ORDER BY forum_name DESC") or die(mysql_error());
while($forums = mysql_fetch_array($res)){
  $res1 = mysql_query("SELECT * FROM topics WHERE forum_id='$forums[forum_id]' LIMIT 1") or die(mysql_error());
  while($topic = mysql_fetch_array($res1)){
      $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\"><a href=\"showforum.php?forum_id=$forums['forum_id']\">$forums['forum_name']</a></div><div style=\"float:none; border-bottom:1px solid #0a5bf0;\"><a href=\"show_topic.php?topic_id=$topic['topic_id']\">$topic['topic_header'] $topic['topic_owner']</div>";
  }
}

?>
<html>
<head>
<title>Oversigt</title>
</head>

<body style="margin:0px auto 0px auto;">
<? print $output;?>



</body>
</html>




fejlen lyder:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\phpdev\www\myforum\index.php on line 14
Avatar billede majbom Novice
18. juli 2007 - 10:50 #12
okay, jeg prøver lige at kigge på det...
Avatar billede majbom Novice
18. juli 2007 - 11:01 #13
$res = mysql_query("SELECT forum.id, forum.forum_name, topic.topic_id, topic.topic_header, topic.topic_owner FROM forum INNER JOIN topic ON(forum.forum_id=topic.forum_id) GROUP BY topic.topic_id") or die(mysql_error());

while($forums = mysql_fetch_array($res)){
  $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\"><a href=\"showforum.php?forum_id=".$forums['forum_id']."\">".$forums['forum_name']."</a></div><div style=\"float:none; border-bottom:1px solid #0a5bf0;\"><a href=\"show_topic.php?topic_id=".$topic['topic_id']."\">".$topic['topic_header']." - ".$topic['topic_owner']."</div>";
}

prøv med det her i stedet...
Avatar billede MarkA Praktikant
18. juli 2007 - 11:10 #14
der er ingen fejl.... men $output er tom
Avatar billede MarkA Praktikant
18. juli 2007 - 11:16 #15
eller jeg har rettet en fejl i forum.id skal den ikke hedde forum.forum_id
Avatar billede majbom Novice
18. juli 2007 - 11:16 #16
prøv efter den første linje ($res = mysql...) at skrive:
echo "rækker: ".mysql_num_rows($res);
Avatar billede majbom Novice
18. juli 2007 - 11:19 #17
det er fordi du henter fra 2 tabeller, så det der står før . er tabellens navn og det efter er kolonnens navn...
Avatar billede MarkA Praktikant
18. juli 2007 - 11:21 #18
hvad er der at gøre ved det så????
Avatar billede MarkA Praktikant
18. juli 2007 - 11:22 #19
så skriver den rækker:0
Avatar billede majbom Novice
18. juli 2007 - 11:38 #20
nå, så henter den ikke noget i databasen...

$res = mysql_query("SELECT forum.forum_id, forum.forum_name, topic.topic_id, topic.topic_header, topic.topic_owner FROM forum INNER JOIN topic ON(forum.forum_id=topic.forum_id)") or die(mysql_error());

prøv lige den
Avatar billede MarkA Praktikant
18. juli 2007 - 11:47 #21
jeg prøvede lige at lægge et topic ind og nu skriver den noget ud...
så jeg er tilbage ved:

<?
$host = "localhost";
$user = "root";
$pass = "";

$conn = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db("myforum",$conn) or die(mysql_error());


$res = mysql_query("SELECT forum.forum_id, forum.forum_name, topic.topic_id, topic.topic_header, topic.topic_owner FROM forum INNER JOIN topic ON(forum.forum_id=topic.forum_id) GROUP BY topic.topic_id") or die(mysql_error());

while($forums = mysql_fetch_array($res)){
  $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\"><a href=\"showforum.php?forum_id=".$forums['forum_id']."\">".$forums['forum_name']."</a></div><div style=\"float:none; border-bottom:1px solid #0a5bf0;\">
  <a href=\"show_topic.php?topic_id=".$topic['topic_id']."\">".$topic['topic_header']." - ".$topic['topic_owner']."</div>";
}

?>
<html>
<head>
<title>Oversigt</title>
</head>

<body style="margin:0px auto 0px auto;">
<? print $output;?>



</body>
</html>

men her skriver den kun det første forum ud... og der er intet topic vist kun understregningen til et link der så viser til show_topic?topic_id=
Avatar billede MarkA Praktikant
18. juli 2007 - 11:50 #22
det er fordi der står:
while($forums = mysql_fetch_array($res)){
  $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\">
  <a href=\"showforum.php?forum_id=".$forums['forum_id']."\">".$forums['forum_name']."</a></div>
 
  <div style=\"float:none; border-bottom:1px solid #0a5bf0;\">
  <a href=\"show_topic.php?topic_id=".$topic['topic_id']."\">".$topic['topic_header']." - ".$topic['topic_owner']."</div>";



men der er jo ike en funktion der hedder topic...

så hvis jeg ændrer den til:

while($forums = mysql_fetch_array($res)){
  $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\">
  <a href=\"showforum.php?forum_id=".$forums['forum_id']."\">".$forums['forum_name']."</a></div>
 
  <div style=\"float:none; border-bottom:1px solid #0a5bf0;\">
  <a href=\"show_topic.php?topic_id=".$forums['topic_id']."\">".$forums['topic_header']." - ".$forums['topic_owner']."</div>";
}



så virker det ;)
}
Avatar billede MarkA Praktikant
18. juli 2007 - 11:50 #23
men den viser bare stadig kun den første af forum's
Avatar billede majbom Novice
18. juli 2007 - 11:56 #24
arh sorry, jeg havde glemt at rette de array-navne det skal self være forums alle sammen :)

men den henter kun ét forum eller?
Avatar billede MarkA Praktikant
18. juli 2007 - 11:58 #25
det er helt ok... men ja den henter kun det ene forum... selvom der er lagt 2 ind
Avatar billede majbom Novice
18. juli 2007 - 11:58 #26
umiddelbart vil jeg mene at den kun henter de forums hvor der er noget i, så hvis du har tomme forums, kommer de ikke med...
Avatar billede MarkA Praktikant
18. juli 2007 - 12:05 #27
Det var derfor... kna det ikke ændres????
Avatar billede majbom Novice
18. juli 2007 - 12:11 #28
jo det kan det godt, men så skal vi tilbage til den første metode, med 2 while løkker :)

$res = mysql_query("SELECT * FROM forum ORDER BY forum_name DESC") or die(mysql_error());
while($forums = mysql_fetch_array($res)){
  $res1 = mysql_query("SELECT * FROM topics WHERE forum_id='$forums[forum_id]' LIMIT 1") or die(mysql_error());
  while($topic = mysql_fetch_array($res1)){
      $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\"><a href=\"showforum.php?forum_id=".$forums['forum_id']."\">".$forums['forum_name']."</a></div><div style=\"float:none; border-bottom:1px solid #0a5bf0;\"><a href=\"show_topic.php?topic_id=".$topic['topic_id']."\">".$topic['topic_header']." - ".$topic['topic_owner']."</div>";
  }
}
Avatar billede MarkA Praktikant
18. juli 2007 - 12:20 #29
hehe... det virker sq heller ikke uden et topic
Avatar billede majbom Novice
18. juli 2007 - 12:46 #30
nej det er klart... :)

$res = mysql_query("SELECT * FROM forum ORDER BY forum_name DESC") or die(mysql_error());
while($forums = mysql_fetch_array($res)){
  $res1 = mysql_query("SELECT * FROM topics WHERE forum_id='$forums[forum_id]' LIMIT 1") or die(mysql_error());
  $output .= "<div align='left' style=\"border-bottom:1px solid #0a5bf0; margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; float:left; min-width:400px;\"><a href=\"showforum.php?forum_id=".$forums['forum_id']."\">".$forums['forum_name']."</a></div>";
  while($topic = mysql_fetch_array($res1)){
      $output .= "<div style=\"float:none; border-bottom:1px solid #0a5bf0;\"><a href=\"show_topic.php?topic_id=".$topic['topic_id']."\">".$topic['topic_header']." - ".$topic['topic_owner']."</div>";
  }
}

prøv den :)
Avatar billede MarkA Praktikant
18. juli 2007 - 23:22 #31
det virker... skulle godt nok lige udskifte div med en table i stedet... men så virkede det... mange tak for hjælpen... poster du ikke lige et svar;)
Avatar billede majbom Novice
19. juli 2007 - 09:06 #32
hehe okay, ja som det ser ud, vil det jo bare blive skrevet på en lang linie :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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