Avatar billede frustrator Nybegynder
22. juni 2008 - 22:28 Der er 27 kommentarer

Paging og dato-sortering

Hey

Jeg har et problem med at få paging til at virke på en side med udtræk fra MySQL, og samtidig driller dato-sorteringen. Koden ser således ud:

--------------------------------------------

<?php
mysql_connect("xxxxx", "xxxxxx", "xxxxx") or die (mysql_error());
mysql_select_db("xxxxxx") or die (mysql_error());


$pr_side = "50";

if (!isset($s)) {
    $s = "0";
}
$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato, Artist, Titel DESC limit $s,$pr_side") or die(mysql_error());


echo "<table width=100% align=left border=0>";
while($row = mysql_fetch_array($query)){
extract($row);
echo "<tr><td rowspan=2 valign=top width=200><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'>$SmallPic</a></td>\n";
echo "<td valign=top background='../../gfx/maingfx/bckg_header11.jpg'><p><em>$Dag</em></p></td>\n";
echo "</tr>\n";
echo "<tr><td><p><br><strong>$Artist:</strong><br><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'><em>$Titel</em></a><br>($Year)</p></td>\n";
echo "</tr>\n";
}

echo "</table>";


$g_total = mysql_query("select count(id) as total from v2_sang WHERE Dato <= CURDATE()") or die(mysql_error());
$total = mysql_result($g_total,0);
echo"<br>";

if ($s >= $pr_side) {
    $previous_s = $s-$pr_side;
    echo "<a href='listsang2.php?s=$previous_s class='mere'>Forrige</a> ";
}


$page = 1;
for($start=0; $total > $start; $start=$start+$pr_side){

    if ($start != $s) {
        echo "<a href='listsang2.php?s=$start class='mere'>$page</a> ";
    } else {
        echo "$page ";
    }
    $page++;
}


if ($total > $s+$pr_side) {
    $next_s = $s+$pr_side;
    echo "<a href='listsang2.php?s=$next_s class='mere'>N&aelig;ste</a>";
}

?>

-------------------------------------------------

Se selve siden her: http://ultimative-80ere.dk/v2/content/musik/listsang2.php

Jeg er ingen ørn til PHP, men bruger dette script uden fejl andetsteds på mit site - se her: http://ultimative-80ere.dk/v2/content/shared/arkiv.php?News=Yes

Hvorfor kan jeg ikke få paging'en frem på ovenstående eksempel? Der skal være 50 emner pr. side...

Problem nr. 2:
Dato-sorteringen er helt ad H... til. Rækkefølgen skal være den senest nye sang først (dvs. dags dato) og så ellers bagud (i går, i forgårs osv.). Ja, jeg ved godt at sorteringen i koden herover er helt hen i vejret, men har prøvet med utallige andre varianter, alle med et ubrugeligt resultat.

Nogen der har nogle gode, brugbare idéer til en amatør som mig?
Avatar billede jakobdo Ekspert
22. juni 2008 - 22:34 #1
De steder hvor du har:

echo "<a href='listsang2.php?s=$previous_s class='mere'>Forrige</a> ";
echo "<a href='listsang2.php?s=$start class='mere'>$page</a> ";
og
echo "<a href='listsang2.php?s=$next_s class='mere'>N&aelig;ste</a>";

Skal du huske at lukke href.
ret til:

echo "<a href='listsang2.php?s=$previous_s' class='mere'>Forrige</a> ";
echo "<a href='listsang2.php?s=$start' class='mere'>$page</a> ";
og
echo "<a href='listsang2.php?s=$next_s' class='mere'>N&aelig;ste</a>";
Avatar billede jakobdo Ekspert
22. juni 2008 - 22:34 #2
Ang. sortering, så prøv denne SQL:

$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato DESC, Artist, Titel DESC limit $s,$pr_side") or die(mysql_error());
Avatar billede frustrator Nybegynder
22. juni 2008 - 22:56 #3
Okay, datosorteringen fungerer perfekt nu - SUPER!

Men det kniber stadig med paging, det funker ikke. Men kunne nu heller ikke se den store forskel på de linjer du kom med ;o)
Avatar billede jakobdo Ekspert
22. juni 2008 - 23:06 #4
Du mangler en ' efter $previous_s, $start, $next_s
Avatar billede frustrator Nybegynder
23. juni 2008 - 20:14 #5
De er nu alle rettet efter dine forskrifter, men det virker stadig ikke. Koden ser nu således ud:

----------------------------------------------------------

<?php
mysql_connect("xxxxx", "xxxxx", "xxxxx") or die (mysql_error());
mysql_select_db("xxxxx") or die (mysql_error());


$pr_side = "50";

if (!isset($s)) {
    $s = "0";
}
$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato DESC, Artist, Titel DESC limit $s,$pr_side") or die(mysql_error());


echo "<table width=100% align=left border=0>";
while($row = mysql_fetch_array($query)){
extract($row);
echo "<tr><td rowspan=2 valign=top width=200><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'>$SmallPic</a></td>\n";
echo "<td valign=top background='../../gfx/maingfx/bckg_header11.jpg'><p><em>$Dag</em></p></td>\n";
echo "</tr>\n";
echo "<tr><td><p><br><strong>$Artist:</strong><br><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'><em>$Titel</em></a><br>($Year)</p></td>\n";
echo "</tr>\n";
}

echo "</table>";


$g_total = mysql_query("select count(id) as total from v2_sang WHERE Dato <= CURDATE()") or die(mysql_error());
$total = mysql_result($g_total,0);
echo"<br>";

if ($s >= $pr_side) {
    $previous_s = $s-$pr_side;
echo "<a href='listsang2.php?s=$previous_s' class='mere'>Forrige</a> ";
}


$page = 1;
for($start=0; $total > $start; $start=$start+$pr_side){

    if ($start != $s) {
echo "<a href='listsang2.php?s=$start' class='mere'>$page</a> ";
    } else {
        echo "$page ";
    }
    $page++;
}


if ($total > $s+$pr_side) {
    $next_s = $s+$pr_side;
echo "<a href='listsang2.php?s=$next_s' class='mere'>N&aelig;ste</a>";
}

?>

-------------------------------------------------------

Nogen gode forslag?
Avatar billede supersquirrel Nybegynder
23. juni 2008 - 20:26 #6
<?php
mysql_connect("xxxxx", "xxxxx", "xxxxx") or die (mysql_error());
mysql_select_db("xxxxx") or die (mysql_error());


        $offset = $_GET[offset];
        $range = 10;
$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato DESC, Artist, Titel DESC LIMIT $offset,$range") or die(mysql_error());


echo "<table width=100% align=left border=0>";
while($row = mysql_fetch_array($query)){
extract($row);
echo "<tr><td rowspan=2 valign=top width=200><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'>$SmallPic</a></td>\n";
echo "<td valign=top background='../../gfx/maingfx/bckg_header11.jpg'><p><em>$Dag</em></p></td>\n";
echo "</tr>\n";
echo "<tr><td><p><br><strong>$Artist:</strong><br><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'><em>$Titel</em></a><br>($Year)</p></td>\n";
echo "</tr>\n";
}

echo "</table>";

            $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM v2_sang WHERE Dato <= CURDATE()"),0);
            if ($offset >= $range) {
                $forrige = $offset-$range;
                echo "<a href='listsang2.php?offset=$forrige'>< Forrige</a> | ";
            } else {
                echo '< Forrige | ';
            }
            if ($antal > $offset+$range) {
                $naeste = $offset+$range;
                echo "<a href='listsang2.php?offset=$naeste'>Næste ></a> ";
            } else {
                echo 'Næste >';
            }

?>


Prøv den
Avatar billede supersquirrel Nybegynder
23. juni 2008 - 20:27 #7
** Rettelse !!! **


<?php
mysql_connect("xxxxx", "xxxxx", "xxxxx") or die (mysql_error());
mysql_select_db("xxxxx") or die (mysql_error());


        $offset = $_GET[offset];
        $range = 50;
$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato DESC, Artist, Titel DESC LIMIT $offset,$range") or die(mysql_error());


echo "<table width=100% align=left border=0>";
while($row = mysql_fetch_array($query)){
extract($row);
echo "<tr><td rowspan=2 valign=top width=200><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'>$SmallPic</a></td>\n";
echo "<td valign=top background='../../gfx/maingfx/bckg_header11.jpg'><p><em>$Dag</em></p></td>\n";
echo "</tr>\n";
echo "<tr><td><p><br><strong>$Artist:</strong><br><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'><em>$Titel</em></a><br>($Year)</p></td>\n";
echo "</tr>\n";
}

echo "</table>";

            $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM v2_sang WHERE Dato <= CURDATE()"),0);
            if ($offset >= $range) {
                $forrige = $offset-$range;
                echo "<a href='listsang2.php?offset=$forrige'>< Forrige</a> | ";
            } else {
                echo '< Forrige | ';
            }
            if ($antal > $offset+$range) {
                $naeste = $offset+$range;
                echo "<a href='listsang2.php?offset=$naeste'>Næste ></a> ";
            } else {
                echo 'Næste >';
            }

?>
Avatar billede jakobdo Ekspert
24. juni 2008 - 08:21 #8
Test lige denne kode:

<?php
mysql_connect("xxxxx", "xxxxxx", "xxxxx") or die (mysql_error());
mysql_select_db("xxxxxx") or die (mysql_error());

$pr_side = 50;
$s = (isset($_GET['s']) && is_numeric($_GET['s']) && $_GET['s'] > 0) ? intval($_GET['s']) : 0;
$g_total = mysql_query("select count(id) as total from v2_sang WHERE Dato <= CURDATE()") or die(mysql_error());
$total = mysql_result($g_total,0);

$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato, Artist, Titel DESC limit $s,$pr_side") or die(mysql_error());
if(mysql_num_rows($query)>0){
    echo "<table width=100% align=left border=0>";
    while($row = mysql_fetch_array($query)){
        extract($row);
        echo "<tr><td rowspan=2 valign=top width=200><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'>$SmallPic</a></td>\n";
        echo "<td valign=top background='../../gfx/maingfx/bckg_header11.jpg'><p><em>$Dag</em></p></td>\n";
        echo "</tr>\n";
        echo "<tr><td><p><br><strong>$Artist:</strong><br><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'><em>$Titel</em></a><br>($Year)</p></td>\n";
        echo "</tr>\n";
    }
    echo "</table>";
}

echo"<br>";

if ($s >= $pr_side) {
    $previous_s = $s-$pr_side;
    echo '<a href="listsang2.php?s='.$previous_s.'" class="mere">Forrige</a> ';
}

$page = 1;
for($start=0; $total > $start; $start=$start+$pr_side){
    if ($start != $s) {
        echo '<a href="listsang2.php?s='.$start.'" class="mere">'.$page.'</a> ';
    } else {
        echo $page . ' ';
    }
    $page++;
}

if ($total > $s+$pr_side) {
    $next_s = $s+$pr_side;
    echo '<a href="listsang2.php?s='.$next_s.'" class="mere">N&aelig;ste</a>';
}

?>
Avatar billede frustrator Nybegynder
24. juni 2008 - 20:42 #9
Thanks, guys...

... men ingen af dem fungerer :o(

>> Supersquirrel: Får denne fejlmeddelelse: "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '50' at line 1
"

>> Jakobdo: Får denne fejlmeddelelse: Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in /home/virtual/ultimative-80ere.dk/public_html/v2/content/musik/listsang2.php on line 80
Avatar billede supersquirrel Nybegynder
24. juni 2008 - 20:45 #10
hvis du prøver det her link:

http://dinside.dk/listsang2.php?offset=0
Avatar billede supersquirrel Nybegynder
24. juni 2008 - 20:47 #11
eller prøv at rette:

        $offset = $_GET[offset];
        $range = 50;

til:

if($_GET[offset] == ""){
$offset = 0;
}else{
$offset = $_GET[offset];
}
$range = 50;
Avatar billede frustrator Nybegynder
24. juni 2008 - 20:52 #12
>>Supersquirrel: Okay, ingen fejlmeddelelse denne gang, men heller ingen paging :o/
Avatar billede supersquirrel Nybegynder
24. juni 2008 - 20:56 #13
Brugte du nederste rettelse?
* lad mig lige få koden du bruger ind *
Avatar billede jakobdo Ekspert
25. juni 2008 - 08:16 #14
frustrator: Prøv denne kode:

<?php
//http://www.eksperten.dk/spm/835878

mysql_connect("xxxxx", "xxxxxx", "xxxxx") or die (mysql_error());
mysql_select_db("xxxxxx") or die (mysql_error());

$pr_side = 50;
$s = (isset($_GET['s']) && is_numeric($_GET['s']) && $_GET['s'] > 0) ? intval($_GET['s']) : 0;
$g_total = mysql_query("select count(id) as total from v2_sang WHERE Dato <= CURDATE()") or die(mysql_error());
$total = mysql_result($g_total,0);

$query = mysql_query("SELECT Id, Titel, Dato, Artist, Year, SmallPic, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dag FROM v2_sang WHERE Dato <= CURDATE() ORDER BY Dato, Artist, Titel DESC limit $s,$pr_side") or die(mysql_error());
if(mysql_num_rows($query)>0){
    echo "<table width=100% align=left border=0>";
    while($row = mysql_fetch_array($query)){
        extract($row);
        echo "<tr><td rowspan=2 valign=top width=200><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'>$SmallPic</a></td>\n";
        echo "<td valign=top background='../../gfx/maingfx/bckg_header11.jpg'><p><em>$Dag</em></p></td>\n";
        echo "</tr>\n";
        echo "<tr><td><p><br><strong>$Artist:</strong><br><a href='http://ultimative-80ere.dk/v2/content/musik/sang.php?Id=$row[Id]'><em>$Titel</em></a><br>($Year)</p></td>\n";
        echo "</tr>\n";
    }
    echo "</table>";
}

echo"<br>";

if ($s >= $pr_side) {
    $previous_s = $s-$pr_side;
    echo '<a href="listsang2.php?s='.$previous_s.'" class="mere">Forrige</a> ';
}

$page = 1;
for($start=0; $total > $start; $start=$start+$pr_side){
    if ($start != $s) {
        echo '<a href="listsang2.php?s='.$start.'" class="mere">'.$page.'</a> ';
    } else {
        echo $page . ' ';
    }
    $page++;
}

if ($total > $s+$pr_side) {
    $next_s = $s+$pr_side;
    echo '<a href="listsang2.php?s='.$next_s.'" class="mere">N&aelig;ste</a>';
}

?>
Avatar billede frustrator Nybegynder
25. juni 2008 - 20:37 #15
Supersquirrel.... ja, brugte den nederste rettelse og quadro-tjekkede das ganze molevitten ;o)
Avatar billede frustrator Nybegynder
25. juni 2008 - 20:42 #16
Jakobdo.... giver denne fejl: Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in bla/bla/bla/bla/bla/content/musik/listsang2.php on line 82

Linje 82 ser pt. således ud:

    echo '<a href="listsang2.php?s='.$previous_s" class="mere">Forrige</a> ';

Denne her er vist en grimmer nød at knække, hm?
Avatar billede jakobdo Ekspert
25. juni 2008 - 21:16 #17
Ha, det er ikke mig som laver fejl, det er eksperten som formattere forkert...

Du må lige rette det manuelt.
Disse 3 linjer:

echo '<a href="listsang2.php?s='.$previous_s" class="mere">Forrige</a> ';
echo '<a href="listsang2.php?s='.$start" class="mere">'.$page.'</a> ';
echo '<a href="listsang2.php?s='.$next_s" class="mere">N&aelig;ste</a>';

Du skal efter:
'.$previous_s
'.$start
'.$next_s

tilføje: . '
Avatar billede supersquirrel Nybegynder
25. juni 2008 - 21:23 #18
Står pagingen der ikke? Altså "Forrige  |  Næste" der ikke?
Eller er der bare ikke link i pagingen?
Avatar billede supersquirrel Nybegynder
25. juni 2008 - 21:23 #19
Hvis der intet link er, er det fordi du ikke har 50 poster.. Når der kommer 50+, vil den give links
Avatar billede frustrator Nybegynder
26. juni 2008 - 16:49 #20
Supersquirrel: Der er pt. 283 poster i den database ;o)

Jakobdo: Okay, siden virker igen... men stadig ingen paging. Der kommer end ikke nogen links eller andet frem, som kunne indikerer, at der var mere end de 50 seneste poster. Hmmm.....
Avatar billede jakobdo Ekspert
26. juni 2008 - 17:26 #21
Du gør jo også stardig noget forkert.

Se dine links:
...listsang2.php?s=50%20class=

Du skal lukke href=", så der efter tallet kommer " class="...."

Dine link bliver:
$tal = 50;
href="listsang2.php?s=$tal class="mere"
De skal være:
href="listsang2.php?s=' . $tal . '" class="mere"
Avatar billede jakobdo Ekspert
26. juni 2008 - 17:26 #22
Skide eksperten, de kan ikke håndtere ' og " lige efter hinanden...
href="listsang2.php?s=' . $tal . " class="mere"
skal være:
href="listsang2.php?s=' . $tal . ' FJERN_MIG_OG_MELLEMRUM " class="mere"
Avatar billede frustrator Nybegynder
26. juni 2008 - 20:38 #23
Jakobdo.... se hvilke links, der er jo ingen links på selve siden ?!?!?

Har rettet til efter dine anvisninger, bortset fra at der jo altså står .$previous_s., .$start. og .$next_s. - ikke noget med .$tal.

Vil du have en email-kopi af selve koden?
Avatar billede jakobdo Ekspert
26. juni 2008 - 21:06 #24
Meget gerne, send filen til: jakobdo (at) hotmail [dot] com
Avatar billede jakobdo Ekspert
26. juni 2008 - 21:06 #25
Og du har altså links, dine 1, 2, 3, 4...
Forrige og Næste er jo links.
Avatar billede frustrator Nybegynder
28. juni 2008 - 17:09 #26
Jakobdo.... fik du nogensinde min mail? der har været frygtelig stille.... ;o)
Avatar billede jakobdo Ekspert
28. juni 2008 - 17:54 #27
Email afsendt.
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