Avatar billede YoJonas Nybegynder
21. marts 2013 - 19:10 Der er 29 kommentarer

Næste og forrige

Jeg har et problem med en nyhedsside. Lige nu har jeg en LIMIT på 10, men der er jo naturligvis mere en 10 nyheder. Jeg skulle gerne have lavet en "Næste" knap, så den tager 10 nyheder pr. gang, og det samme med forrige. Men jeg er lidt lost omkring hvordan jeg skal gøre det?

Håber der er nogen som kan hjælpe mig! :)


<?php
$db_con = mysql_connect('localhost','USERNAME','PASSWORD');
if (!$db_con)
           
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db('DATABASE', $db_con);

$result = mysql_query("SELECT * FROM nyheder ORDER BY id DESC LIMIT 10");

while($row = mysql_fetch_array($result))
{
?>

NÆSTE og FORRIGE-knapper her imellem.

<?php                     
}

mysql_close($db_con);
?>
Avatar billede olebole Juniormester
21. marts 2013 - 20:04 #1
<ole>

Der er skrevet en del guides om emnet her på Eksperten.

Når det er sagt, bør du nok skifte din databasekode ud til noget mere tidsvarende. PHP's MySQL-API er dybt forældet og forsvinder helt i en af de næste versioner af PHP - så det betaler sig ikke at rode med det længere  =)

/mvh
</bole>
Avatar billede YoJonas Nybegynder
08. april 2013 - 17:12 #2
Tak for tippet Ole! Det fungerer, jeg dog stadig et lille spørgsmål. Når jeg skriver kode i echo, så virker det ikke. Hvordan skal koden omskrives, hvis jeg skal kunne trække tabeller fra databasen, skrive kode osv.?

Den ser so far således ud:

<?php

$connection = mysql_pconnect("localhost", "root", "");
mysql_select_db("kongeligaen_dk");

$pr_side = 10;

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM nyheder"),0) or die(mysql_error());

$vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;

$query = mysql_query ("SELECT * FROM nyheder ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());

while ($row = mysql_fetch_array($query)) {
    echo $row['id']."<br>";
}
echo "<hr />";

if ($vis_fra > 0) {
    $back= $vis_fra - $pr_side;
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$back'>Forrige</a> ";
}
$page = 1;

for ($start = 0; $antal > $start; $start = $start + $pr_side) {
    if($vis_fra != $page * $pr_side - $pr_side) {
        echo "<a href='$_SERVER[PHP_SELF]?visfra=$start'>$page</a> ";
    } else {
        echo $page." ";
    }
    $page++;
}

if ($vis_fra < $antal - $pr_side) {
    $next = $vis_fra + $pr_side;
    echo " <a href='$_SERVER[PHP_SELF]?visfra=$next'>Næste</a>";
}
?>
Avatar billede olebole Juniormester
08. april 2013 - 18:03 #3
Hvad betyder 'virker ikke'?
Avatar billede YoJonas Nybegynder
08. april 2013 - 19:14 #4
Hvis jeg ændre "echo"-linjen til f.eks.:

while ($row = mysql_fetch_array($query)) {
    echo $row['id']."<?php $id = $row['id']; $overskrift = $row['overskrift']; $url = "artikel.php?ID=$id $overskrift"; $url = str_replace(' ', '-', $url); echo "<a href=\"$url\">$overskrift</a>";?><br>";
}



Så får jeg følgende fejl:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Avatar billede olebole Juniormester
08. april 2013 - 19:37 #5
Hvad prøver du med den kode?
Avatar billede YoJonas Nybegynder
09. april 2013 - 16:10 #6
At indsætte tabellen "overskrift" med link i min echo.
Avatar billede arne_v Ekspert
09. april 2013 - 17:11 #7
Det ser ud som du forsoeger at outputte PHP fra PHP.
Avatar billede olebole Juniormester
09. april 2013 - 17:40 #8
Er det noget i denne stil, du prøver?

while ($row = mysql_fetch_array($query)) {
    $id = $row['id'];
    $overskrift = $row['overskrift'];
    $url = "artikel.php?ID=$id $overskrift";
    $url = str_replace(' ', '-', $url);
    echo "<a href=\"$url\">$overskrift</a><br>";
}
Avatar billede olebole Juniormester
09. april 2013 - 17:42 #9
- men linjen her, er jeg ikke helt sikker på, gør, hvad du forventer:

$url = "artikel.php?ID=$id $overskrift";

Hvordan skal linket ende med at se ud?
Avatar billede YoJonas Nybegynder
09. april 2013 - 20:16 #10
Tak, det gør faktisk lige præcis det jeg havde håbet på. Hvordan skal jeg gøre når jeg også skal have div'er omkring linket der bliver lavet?
Avatar billede olebole Juniormester
09. april 2013 - 20:29 #11
Måske:

echo "<div><a href=\"$url\">$overskrift</a></div>";
Avatar billede YoJonas Nybegynder
10. april 2013 - 19:46 #12
Igen tusind tak! Det virker helt perfekt. Jeg har kun de sidste to spørgsmål.

Jeg har tidligere haft en dato, som har heddet:

<p>Skrevet den <?php echo date("d. M Y", strtotime ($row['dato'])); ?></p>


Nu har jeg ændret det til:

$dato = date_parse_from_format("d. M Y", $row['dato']);
echo "<p>Skrevet den $dato</p>";


Men i sidste ende kommer den bare til at hedde:

Skrevet den Array


Jeg vil egentlig gerne have den til at vise som eksemplet her eller hele måneden (på dansk):

Skrevet den 26. Mar 2013




Den sidste ting er Facebook-like's som jeg gerne vil have sat ind. Tidligere har den set ud på følgende måde:


<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/da_DK/all.js#xfbml=1&appId=173569332782592";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<div class="fb-like" data-href="http://www.minhjemmeside.dk/<?php $id = $row['id']; $overskrift = $row['overskrift']; $url = "nyhed.php?ID=$id $overskrift"; $url = str_replace(' ', '-', $url); echo "$url\"$overskrift";?>" data-send="false" data-layout="button_count" data-width="250" data-show-faces="false"></div>


Den skal selvfølgelig være på samme måde som "overskrift"-linket bliver. Jeg har prøvet at skrive det ind på følgende måde:

echo "<div class='fb-root'></div>";
echo "<script>(function(d, s, id) {";
echo "var js, fjs = d.getElementsByTagName(s)[0];";
echo "if (d.getElementById(id)) return;";
echo "js = d.createElement(s); js.id = id;";
echo "js.src = '//connect.facebook.net/da_DK/all.js#xfbml=1&appId=173569332782592';";
echo "fjs.parentNode.insertBefore(js, fjs);";
echo "}(document, 'script', 'facebook-jssdk'));</script>";
echo "<div class='fb-like' data-href='http://www.kongeligaen.dk/\"$url\">$overskrift' data-send='false' data-layout='button_count' data-width='250' data-show-faces='false'></div>";


Jeg ved at det går galt cirka omkring "$url\" men jeg ved ikke, hvordan jeg ellers skal skrive det. Lige nu kommer den til at se
Avatar billede olebole Juniormester
10. april 2013 - 20:01 #13
date_parse_from_format returnerer et array, så det er der ikke noget mærkeligt i.

Det sidste kan jeg ikke svare på, da jeg ikke kan se, hvor dine PHP-variabler kommer fra
Avatar billede YoJonas Nybegynder
13. april 2013 - 14:06 #14
Puha. Hele min kode ser på stående fod således ud:

<?php

$connection = mysql_pconnect("localhost", "root", "");
mysql_select_db("kongeligaen_dk");

$pr_side = 10;

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM nyheder"),0) or die(mysql_error());

$vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;

$query = mysql_query ("SELECT * FROM nyheder ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());

while ($row = mysql_fetch_array($query)) {
    $id = $row['id'];
    $overskrift = $row['overskrift'];
    $url = "nyhed.php?ID=$id $overskrift";
    $url = str_replace(' ', '-', $url);
    $billede = $row['billede'];
    $dato = date_parse_from_format("d. M Y", $row['dato']);
    echo "<div class='nyheder_single'>";
    echo "<div class='alle_nyheder_billede' style='background-image:url(images/nyheder/$billede)'>";
    echo "<a href=\"$url\"></a>";
    echo "</div>";
    echo "<div class='alle_nyheder_hojre'>";
    echo "<div class='alle_nyheder_overskrift'>";
    echo "<h2><a href=\"$url\">$overskrift</a></h2>";
    echo "</div>";
    echo "<div class='alle_nyheder_dato'>";
    echo "<p>Skrevet den $dato</p>";
    echo "</div>";
    echo "<div class='alle_nyheder_tekst'>";
    echo "";
    echo "</div>";
    echo "<div class='alle_nyheder_facebook_like'>";
        echo "<div class='fb-root'></div>";
        echo "<script>(function(d, s, id) {";
            echo "var js, fjs = d.getElementsByTagName(s)[0];";
            echo "if (d.getElementById(id)) return;";
            echo "js = d.createElement(s); js.id = id;";
            echo "js.src = '//connect.facebook.net/da_DK/all.js#xfbml=1&appId=173569332782592';";
            echo "fjs.parentNode.insertBefore(js, fjs);";
            echo "}(document, 'script', 'facebook-jssdk'));</script>";
        echo "<div class='fb-like' data-href='http://www.kongeligaen.dk/\"$url\">$overskrift' data-send='false' data-layout='button_count' data-width='250' data-show-faces='false'></div>";
    echo "";
    echo "</div>";
    echo "</div>";
    echo "</div>";
}
echo "<div class='skillelinje'></div>";

if ($vis_fra > 0) {
    $back= $vis_fra - $pr_side;
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$back'>Forrige</a> ";
}
$page = 1;

for ($start = 0; $antal > $start; $start = $start + $pr_side) {
    if($vis_fra != $page * $pr_side - $pr_side) {
        echo "<a href='$_SERVER[PHP_SELF]?visfra=$start'>$page</a> ";
    } else {
        echo $page." ";
    }
    $page++;
}

if ($vis_fra < $antal - $pr_side) {
    $next = $vis_fra + $pr_side;
    echo " <a href='$_SERVER[PHP_SELF]?visfra=$next'>Næste</a>";
}
?>


Jeg er lidt lost når det kommer til php. Men de tre ting, som jeg ikke kan få til at virker er følgende:

1. Datoen skal vises, som før, hvor den så således ud:

<?php echo date("d. M Y", strtotime ($row['dato'])); ?>


2. Mit felt "tekst" skal kun vise de første 175 tegn, hvor den før så således ud:

<?php echo substr($row['tekst'], 0, 175) .((strlen($row['tekst']) > 175) ? '...' : ''); ?>


3. Og så min facebook kode, der tidligere så således ud:

<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/da_DK/all.js#xfbml=1&appId=173569332782592";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<div class="fb-like" data-href="http://www.kongeligaen.dk/<?php $id = $row['id']; $overskrift = $row['overskrift']; $url = "nyhed.php?ID=$id $overskrift"; $url = str_replace(' ', '-', $url); echo "$url\"$overskrift";?>" data-send="false" data-layout="button_count" data-width="250" data-show-faces="false"></div>


Som sagt, så er jeg lidt lost når det kommer til det her.
Avatar billede olebole Juniormester
13. april 2013 - 15:53 #15
Hvad er det, du ikke kan finde ud af omkring datoen? Hvad er det præcist, du ikke forstår på siden om date_parse_from_format?
Avatar billede YoJonas Nybegynder
16. april 2013 - 15:25 #16
Jamen, hvorfor den ikke skriver datoen i stedet for "Array"?
Avatar billede olebole Juniormester
16. april 2013 - 15:33 #17
Fordi det er et array - ikke en streng. Klik på linket, jeg lagde i #13
Avatar billede YoJonas Nybegynder
19. april 2013 - 15:12 #18
Hmm, men det er ligesom om, at den ikke fanger mit tidsformat for $dato, som jeg vil have til at være d. M Y. Det skal siges at i databasen står datoen indskrevet i tabellen som eksempelvis "2012-08-15".
Avatar billede olebole Juniormester
19. april 2013 - 15:19 #19
Prøv at forklare, hvori dit problem består. Der er næppe nogen, der forstår, hvad du skriver  =)
Avatar billede YoJonas Nybegynder
19. april 2013 - 15:37 #20
Hehe, okay jeg prøver engang til. Min hjemmeside skal vise tabellen "dato" som eksempelvis "17. Apr 2013", men i min database er datoer skrevet ind således "2013-04-17".

Iøjeblikket har jeg i min "while" skrevet det ind således:

$dato = date_parse_from_format('d. M Y', $row['dato']);
echo "<p>Skrevet den $dato</p>";


Men det eneste den giver mig tilbage når jeg kigger i browseren, er at den skriver "Array"? Håber det giver mere mening? :)
Avatar billede olebole Juniormester
19. april 2013 - 16:23 #21
Ja naturligvis, alt andet burde da chokere dig dybt! Det er halvanden uge siden, du første gang fik at vide, at $dato er et array, fordi date_parse_from_format returnerer et array.

I #13 skrev jeg et link. Hvis du havde prøvet at klikke på det, havde du øjeblikkelig forstået. Siden bag linket bukker problematikken i meter høj neon.

Du bruger i forvejen masser af arrays i din kode, så du burde vel vide, hvad et array er, og hvordan det bruges. Gør du ikke det, viser siden bag linket dig som sagt tydelige eksempler på, hvordan du bruger funktionen.

Det er blot at læse 'de andres' indlæg og derefter selv gøre en indsats  *o)
Avatar billede YoJonas Nybegynder
26. april 2013 - 22:19 #22
Jeg har mildest talt ikke rigtig vidst, hvad jeg har lavet da jeg opbyggede siden, men til gengæld så hjalp det mig en del, bare at du fortalte mig præcist hvad et array var. Og jeg fik det rent faktisk til at virker.

Tilgengæld så opfører den sig totalt mærkeligt nogle steder på siden. Hvis du kigger på www.kongeligaen.dk, går under artikler og i bunden og trykker "Næste", så ligger den lige pludselig nogle div'er inden i hinanden som den ikke burde? Kan du se nogen logik i det når den nu ikke går i kluddermudder på alle siderne? :S
Avatar billede olebole Juniormester
26. april 2013 - 22:49 #23
Prøv at validere koden. Når jeg har trykket på 'Næste', indeholder den kommende side 164 HTML-fejl - nogle mere alvorlige end andre.

Derudover er der noget script, som laver noget helt knald. Bl.a. indsættes en hel masse DIV i STRONG elementer. Hvad der præcist sker, gider jeg ikke lede efter
Avatar billede YoJonas Nybegynder
29. april 2013 - 16:58 #24
Okay, det lyder lidt voldsomt(!) Er det da helt ved siden af, det jeg har gjort her?

<?php

$pr_side = 10;

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM nyheder"),0) or die(mysql_error());

$vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;

$query = mysql_query ("SELECT * FROM nyheder ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());

while ($row = mysql_fetch_array($query)) {
    $id = $row['id'];
    $overskrift = $row['overskrift'];
    $url = "nyhed.php?ID=$id $overskrift";
    $url = str_replace(' ', '-', $url);
    $billede = $row['billede'];
    $dato = $row['dato'];
    $tekst = $row['tekst'];
    echo "<div class='nyheder_single'>";
    echo "<div class='alle_nyheder_billede' style='background-image:url(images/nyheder/$billede)'>";
    echo "<a href=\"$url\"></a>";
    echo "</div>";
    echo "<div class='alle_nyheder_hojre'>";
    echo "<div class='alle_nyheder_overskrift'>";
    echo "<h2><a href=\"$url\">$overskrift</a></h2>";
    echo "</div>";
    echo "<div class='alle_nyheder_dato'>";
    echo "<p>Skrevet den ";
    echo date('d. M Y', strtotime("$dato"));
    echo "</p>";
    echo "</div>";
    echo "<div class='alle_nyheder_tekst'>";
    echo substr("$tekst", 0, 150) .((strlen("$tekst") > 150) ? '...' : '');
    echo "</div>";
    echo "<div class='alle_nyheder_facebook_like'>";
        echo "<div class='fb-root'></div>";
        echo "<script>(function(d, s, id) {";
            echo "var js, fjs = d.getElementsByTagName(s)[0];";
            echo "if (d.getElementById(id)) return;";
            echo "js = d.createElement(s); js.id = id;";
            echo "js.src = '//connect.facebook.net/da_DK/all.js#xfbml=1&appId=173569332782592';";
            echo "fjs.parentNode.insertBefore(js, fjs);";
            echo "}(document, 'script', 'facebook-jssdk'));</script>";
        echo "<div class='fb-like' data-href='http://www.kongeligaen.dk/";
        echo "$url'";
        echo "data-send='false' data-layout='button_count' data-width='250' data-show-faces='false'></div>";
    echo "</div>";
    echo "</div>";
    echo "</div>";
}
echo "<div class='skillelinje'></div>";

if ($vis_fra > 0) {
    $back= $vis_fra - $pr_side;
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$back'>Forrige</a> ";
}
$page = 1;

for ($start = 0; $antal > $start; $start = $start + $pr_side) {
    if($vis_fra != $page * $pr_side - $pr_side) {
        echo "<a href='$_SERVER[PHP_SELF]?visfra=$start'>$page</a> ";
    } else {
        echo $page." ";
    }
    $page++;
}

if ($vis_fra < $antal - $pr_side) {
    $next = $vis_fra + $pr_side;
    echo " <a href='$_SERVER[PHP_SELF]?visfra=$next'>Næste</a>";
}
?>
Avatar billede YoJonas Nybegynder
02. maj 2013 - 21:31 #25
Jeg er kommet frem til at det er den her som ødelægger min side:

echo substr("$tekst", 0, 150) .((strlen("$tekst") > 150) ? '...' : '');

Jeg har googlet, om der er andre måder at skrive det på, men kan ikke finde noget som får siden til at virke?
Avatar billede olebole Juniormester
02. maj 2013 - 21:42 #26
Hvorfor mener du, det skulle skabe problemer? For mig virker det her fint:

$tekst = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis arcu massa, ut commodo leo. Proin eget eros nec sapien hendrerit dictum. Proin venenatis arcu at ipsum convallis sed rutrum urna condimentum.';
echo substr("$tekst", 0, 150) .((strlen("$tekst") > 150) ? '...' : '');
Avatar billede YoJonas Nybegynder
02. maj 2013 - 22:06 #27
Det virker også fint hos mig, men hvis jeg så skriver $tekst = $row['tekst']; i stedet for, så ligger diverne sig nogle gange ind i hinanden. Det har ellers ikke givet problemer ved nogle af de andre.
Avatar billede olebole Juniormester
02. maj 2013 - 22:58 #28
Det forstår jeg ikke
Avatar billede YoJonas Nybegynder
17. maj 2013 - 15:21 #29
Eksempelvis på den her side: http://www.kongeligaen.dk/nyheder.php?visfra=100 kan du se, hvordan diverne lige pludselig ligger sig ind i hinanden, selvom det ikke gør det på nogle af de andre sider?
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

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