Avatar billede Milla-Tigerdyr Praktikant
17. september 2011 - 14:27 Der er 57 kommentarer og
1 løsning

Få den til at lave flere sider?

Hej eksperter.
Jeg har lavet et forum via. denne tutorail: http://www.phpeasystep.com/phptu/12.html

Jeg vil gerne have den til at i f.eks main forum laver den en ny side for hvert 10 emne der er kommet.
Er der nogen der har en simpel kode til dette?
Avatar billede LilleUdvikler Nybegynder
17. september 2011 - 15:06 #1
Du skal have gang i noget Pagination :-)
Det kan løses på mange måder - prøv at Google det.
Jeg er selv i gang med at prøve at få en function til at fungere - men du kan da se om du kan finde bedre ud af det end mig ;-)

Held og lykke.
Avatar billede majbom Novice
17. september 2011 - 15:54 #2
måden det i bund og grund fungerer på er ved at sætte LIMIT på din query - på den måde kan du hente et bestemt antal rækker ud fra din tabel og bestemme hvor den skal starte.

det kunne f.eks. være noget a la:

<?php
$side = 3; //kunne passende komme fra din url ($_GET['side'])
$poster_pr_side = 10; //antal poster der skal vises på hver side
$start = ($side - 1) * $poster_pr_side;
$slut = $poster_pr_side * $side;

$query = "SELECT * FROM poster LIMIT $start, $slut";
?>


og så skal der også laves noget navigation...
Avatar billede Milla-Tigerdyr Praktikant
17. september 2011 - 16:14 #3
splazz, hvad skal tabellen poster indeholde, og hvordan skal jeg få $side fra min url? Altså med en get, det ved jeg men hvordan havner den i min url??
Avatar billede majbom Novice
17. september 2011 - 16:23 #4
tabellen poster var bare noget jeg fandt på, det er den tabel der indeholder det du vil have delt op i flere sider.

du skal hav lavet noget hvor du kan navigere mellem siderne. du er derfor nødt til at hente antallet af poster ud, så du ved hvor mange sider der vil være - det gør du med COUNT() i din query:

$query = "SELECT COUNT(*) FROM poster";


det antal deler du med $antal_pr_side og så har du antallet af sider - så kan du lave en liste med links, eller en combobox med sidetal, som smider $side i din url
Avatar billede Milla-Tigerdyr Praktikant
17. september 2011 - 16:29 #5
Er ikke rigtig med. Du kan lige få min kode, så kan jeg måske bedre forstå det hvis du skriver det i forhold til hvordan min kode er.

http://pastebin.com/nSBDDh1E
Avatar billede majbom Novice
17. september 2011 - 16:30 #6
kigger på det i aften, har ikke tid nu...
Avatar billede Milla-Tigerdyr Praktikant
17. september 2011 - 16:35 #7
Det er iorden :)
Avatar billede majbom Novice
17. september 2011 - 19:56 #8
http://pastebin.com/sSWQh6Lq

link.php skal ændres til filnavnet på filen
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 09:59 #9
Hej, nu er der 21 emner i mit forum, og den laver altså ikke ny side?:s
Avatar billede majbom Novice
18. september 2011 - 14:22 #10
viser den ikke en linje i bunden af siden med link til de enkelte sider?

har du et link til siden?
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 15:55 #11
Så nu tror jeg næsten det virker, bortset fra at jeg kan altså ikke gå tilbage på side 1 igen, plus når jeg går ind på forummet, så kommer jeg direkte ind på side 2..
Altså den viser det sådan at der er pt. 16 indlæg.
Så viser den de 10 sidste, så man kan ikke se de 6 første indlæg??
Avatar billede majbom Novice
18. september 2011 - 16:43 #12
har du et link til siden?

har du ændret i koden siden min ændring i #8 ? hvis du har, så smid den lige på pastebin
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 20:15 #13
www.waterhorses.yup.dk

og nej jeg har ikke ændret koden, udover selvfølgelig lige at skrive mit mysql password ind.
Avatar billede majbom Novice
19. september 2011 - 19:23 #14
og hvordan ser jeg siden hvor det skal bruges?
Avatar billede Milla-Tigerdyr Praktikant
21. september 2011 - 17:55 #15
Det kan du jo ikke rigtig, fordi der er login og sådan noget, men jeg kan fortælle at der bare står "1" med fed nede til venstre, man kan ikke trykke på det eller noget. Hvis der endelig kommer en side to, så viser den bare kun de SENESTE 20 indlæg, uanset hvad man gør :/
Avatar billede pstidsen Novice
21. september 2011 - 18:12 #16
Du kan evt. tage et screenshot af hvordan det ser ud ;)
Avatar billede Milla-Tigerdyr Praktikant
21. september 2011 - 18:16 #17
Avatar billede majbom Novice
21. september 2011 - 19:44 #18
kan du ikke prøv at udskrive:

$total_rows
$total_pages
$offset
$limit

og
$pages


?
Avatar billede Milla-Tigerdyr Praktikant
21. september 2011 - 22:14 #19
Ehm..hvad mener du? Hvordan det?
Avatar billede majbom Novice
22. september 2011 - 00:07 #20
echo $page;
Avatar billede Milla-Tigerdyr Praktikant
22. september 2011 - 18:52 #21
Ja, men hvor henne?
Avatar billede majbom Novice
22. september 2011 - 19:20 #22
umiddelbart efter de bliver sat
Avatar billede Milla-Tigerdyr Praktikant
24. september 2011 - 18:22 #23
Så siger den at man er på side 1, men den viser altså med indlæggende at man er på side 2, plus man kan ikke trykke ind på side 1.
Så man kan f.eks ikke se de 16 første emner der er lavet :s
Avatar billede majbom Novice
24. september 2011 - 19:05 #24
kan du ikke bare skrive hvad den skriver, når du udskriver de 5 variabler jeg bad om i #18?
Avatar billede Milla-Tigerdyr Praktikant
24. september 2011 - 19:14 #25
echo $line;
echo $pages;
echo $total_rows;
echo $total_pages;
echo $limit;
bliver til:

1 | 2 >Array250
Avatar billede majbom Novice
24. september 2011 - 19:40 #26
kunne du gøre det lidt mere overskueligt? det er jo ikke til at se hvad der kommer fra hvilken variabel?
Avatar billede Milla-Tigerdyr Praktikant
24. september 2011 - 19:53 #27
Jamen hvordan får jeg lavet mellemrum? Den vil jo ikke bruge <br> koden?:S
Avatar billede pstidsen Novice
24. september 2011 - 22:22 #28
prøv at bruge \r og/eller \n. Tror nok det kan bruges som linjeskift i PHP.
Avatar billede majbom Novice
25. september 2011 - 07:40 #29
her kommer sølvfadet så:

echo "line: " . $line . "<br>";
echo "pages: " . $pages . "<br>";
echo "total_rows: " . $total_rows . "<br>";
echo "total_pages: " . $total_pages . "<br>";
echo "limit: " . $limit . "<br>";
Avatar billede Milla-Tigerdyr Praktikant
30. september 2011 - 15:46 #30
line: 1
pages:
total_rows: Array
total_pages: 1
limit: 500
Avatar billede Milla-Tigerdyr Praktikant
30. september 2011 - 15:47 #31
(grunden til limit er 500 lige nu, er fordi at ellers kunne man jo ikke se de første indlæg)
Avatar billede majbom Novice
30. september 2011 - 19:55 #32
må jeg se hele koden?
Avatar billede Milla-Tigerdyr Praktikant
01. oktober 2011 - 13:24 #33
<?
session_start();
include("functions.php");
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<a href="fora_regler.php"><h2>FORUM REGLER - LÆS!</h2></a>
<?php
$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }

$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
$tbl_name="forum_question"; // Table name
$limit = 500; //antal poster pr side
$page = (isset($_GET['side'])) ? $_GET['side'] : 1;

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$res = mysql_query("SELECT COUNT(*) FROM $tbl_name");
$total_rows = mysql_fetch_row($res);
$total_pages = ceil($total_rows[0] / $limit);

$offset = ($page - 1) * $limit;

$sql="SELECT * FROM $tbl_name ORDER BY sticky DESC,last_answer DESC LIMIT $offset, $limit";
// OREDER BY id DESC is order result by descending
$result=mysql_query($sql);
?>
<table width="100%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#8FC1D5">
<tr>
<td width="6%" align="center" bgcolor="#C3E4F2"><strong>#</strong></td>
<td width="53%" align="center" bgcolor="#C3E4F2"><strong>Emne</strong></td>
<td width="53%" align="center" bgcolor="#C3E4F2"><strong>Oprettet af</strong></td>
<td width="13%" align="center" bgcolor="#C3E4F2"><strong>Svar</strong></td>
<td width="13%" align="center" bgcolor="#C3E4F2"><strong>Dato</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){ // Start looping table row
  $name = $rows["name"];
  $hvem = $rows["name"];
?>
<tr>
<td bgcolor="#E6F4F8"><? echo $rows['id']; ?></td>
<td bgcolor="#E6F4F8"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a><BR></td>
<td align="center" bgcolor="#E6F4F8"><a href="profil.php?hvem=<? echo "$hvem"; ?>"><?
//ADMINISTRATOR
if($name=='Admin')
{
  echo "<font style='color: red;'>WEB/$name</font> <font style='color: orange;'>VHT</font>";
}
//MODERATORE
else
if($name=='Cupcake')
{
  echo "<font style='color: #FF0080;'>MOD/$name</font>";
}
else
if($name=='Adornetto')
{
  echo "<font style='color: green;'>MOD/$name</font>";
}
else
if($name=='Tears')
{
  echo "<font style='color: #1D6787;'>MOD/$name</font> <font style='color: orange;'>VHT</font>";
}
else
if($name=='Fixon')
{
  echo "<font style='color: green;'>MOD/$name</font>";
}
//VANDHESTETEGNERE
else
if($name=='Ignited')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Dipper')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='HuffelPuff')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Teardrop')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Funny')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Esrow')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Kagetsu')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Sighthounds')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
else
if($name=='Salvatore')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
//ANDRE
else
{
  echo "$name";
}
?></td>
<td align="center" bgcolor="#E6F4F8"><? echo $rows['reply']; ?></td>
<td align="center" bgcolor="#E6F4F8"><? echo $rows['datetime']; ?></td>
</tr>

<?php
// Exit looping and close connection
}
mysql_close();
?>
<link href="style.css" rel="stylesheet" type="text/css">
<tr>
<td colspan="5" align="right" bgcolor="#C3E4F2"><a href="create_topic.php"><strong>Opret emne</strong> </a></td>
</tr>
</table>
<?php
if ($page != 1)
        $line .= "<a href=\"main_forum.php?page=" . ($page - 1) . "\">&lt;</a>"; 

for ($i = 1; $i <= $total_pages; $i++) { 
        if($i == 1){
                $line .= " ";
        }else{
                $line .= " | ";
        }
        if ($i == $page) 
                $line .= "<span style=\"font-weight: bold;\">$i</span>"; 
        else
                $line .= "<a href=\"main_forum.php?page=$i\">$i</a>"; 

if ($page != $total_pages)
        $line .= " <a href=\"main_forum.php?page=" . ($page + 1) . "\">&gt;</a>";

echo "line: " . $line . "<br>";
echo "pages: " . $pages . "<br>";
echo "total_rows: " . $total_rows . "<br>";
echo "total_pages: " . $total_pages . "<br>";
echo "limit: " . $limit . "<br>";
?>
<small><center><a href="main_forum3.php">VHT-forum</a>-<a href="main_forum2.php">MOD-forum</a></center></small>
<br>
<? include("footer.php"); ?>
Avatar billede majbom Novice
03. oktober 2011 - 20:06 #34
prøv lige at lav limit tilbage til det du vil have den til at være og så ændre $pages til $page i bunden...
Avatar billede majbom Novice
03. oktober 2011 - 20:07 #35
og så fortæl hvad den echo'er...
Avatar billede Milla-Tigerdyr Praktikant
09. oktober 2011 - 22:24 #36
page: 1
total_rows: Array
total_pages: 6
limit: 20

- Nu kommer der 6 sider op i bunden, men den bliver ved med at være på side 1 :S
Avatar billede majbom Novice
10. oktober 2011 - 08:21 #37
hvordan ser $line ud?
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 14:39 #38
line: 1 | 2 | 3 | 4 | 5 | 6 >

Også er 1-tallet med fed skrift ^^
Avatar billede majbom Novice
10. oktober 2011 - 14:45 #39
hvad med selve de links der er i linjen?
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 14:52 #40
Nede i URL-adresse-dimsen (til venstre), der siger den at den går til f.eks "http://www.waterhorses.yup.dk/main_forum.php?page=2" men der sker ingen forandring når man trykker :s
Avatar billede majbom Novice
10. oktober 2011 - 15:08 #41
sker der ingen ting? altså du kommer ikke til en anden side, når man trykker, eller?
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 15:13 #42
Nej det gør man ikke. Jeg tænker det måske har noget at gøre med, at jeg sortere efter nyeste svar?
Avatar billede majbom Novice
10. oktober 2011 - 18:00 #43
ændrer den heller ikke variablen i din url? (page=2/3/4/5...)
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 18:37 #44
Jeg kører iframe så man kan ikke se det for oven, men nede til venstre viser den URL-adressen, og der ændre den sig, jo.
Avatar billede majbom Novice
10. oktober 2011 - 19:00 #45
kan du ikke prøve at udskrive denne:

$sql="SELECT * FROM $tbl_name ORDER BY sticky DESC,last_answer DESC LIMIT $offset, $limit";


?
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 20:19 #46
Den har jeg jo allerede i min kode;

$sql="SELECT * FROM $tbl_name ORDER BY sticky DESC,last_answer DESC LIMIT $offset, $limit";
// OREDER BY id DESC is order result by descending
$result=mysql_query($sql);

??
Avatar billede majbom Novice
10. oktober 2011 - 20:31 #47
jeg vil gerne vide hvordan den ser ud når koden bliver kørt

echo $sql;
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 20:59 #48
Den ser sådan ud;
SELECT * FROM forum_question ORDER BY sticky DESC,last_answer DESC LIMIT 0, 20
Avatar billede majbom Novice
10. oktober 2011 - 21:00 #49
hvordan ser den ud på side 2 eller 3?
Avatar billede Milla-Tigerdyr Praktikant
10. oktober 2011 - 21:11 #50
Præcis det samme
Avatar billede majbom Novice
10. oktober 2011 - 21:20 #51
det er jo klart:

$page = (isset($_GET['side'])) ? $_GET['side'] : 1;

og i dine links står der ?page=2 - men 'side' er ikke sat, så $page bliver altid sat til 1

kan du se hvad jeg mener?
Avatar billede Milla-Tigerdyr Praktikant
11. oktober 2011 - 15:59 #52
Nej, forstår det ikke..hvorfor bliver page altid sat til 1? :S
Avatar billede majbom Novice
11. oktober 2011 - 17:36 #53
$page = (isset($_GET['side'])) ? $_GET['side'] : 1;


skal være:

$page = (isset($_GET['page'])) ? $_GET['page'] : 1;
Avatar billede Milla-Tigerdyr Praktikant
11. oktober 2011 - 17:41 #54
Så virker det :D
Avatar billede majbom Novice
11. oktober 2011 - 17:49 #55
OPTUR!

svartid?
Avatar billede Milla-Tigerdyr Praktikant
11. oktober 2011 - 17:49 #56
Ja, lig et svar :D
Avatar billede majbom Novice
11. oktober 2011 - 18:01 #57
kommer her :)
Avatar billede majbom Novice
11. oktober 2011 - 18:32 #58
tfp :)
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