Avatar billede Allankc Nybegynder
30. juni 2009 - 12:52 Der er 12 kommentarer og
2 løsninger

php mysql opdel sider

Jeg fandt en side opdeler på php universet som jeg smed sammen med mit eksisterende script, problemmet efterhånden som jeg har leget med det er jeg kommet til at slå lige netop den funktion ihjel - min søgning funker, kategorier funker, det talte nummer er rigtigt - men! når du trykker på side nummer eller fremad knappen blir du ved med at være på resultaterne fra side 1

nogen gange er 4 øjne bedre end 2 - nogen der kan opdage fejlen
på forhånd 10.000 gange tak!

<?php

require_once('mysql.php');

                // GET og POST ombrydning + Standard værdi
                    $pr_side  = $_GET['pr_side'];
                   
                    if ($_GET['pr_side'] == NULL)
                    {
                        $pr_side = $_POST['pr_side'];
                    }
                   
                    if ($pr_side == NULL)
                    {
                        $pr_side = 5;
                    }
                   
                    $search  = $_GET['search'];
                   
                    if ($_GET['search'] == NULL)
                    {
                        $search = $_POST['search'];
                    }
                   
                    $kategori = $_GET['kategori'];
                   
                    if ($_GET['kategori'] == NULL)
                    {
                        $kategori = $_POST['kategori'];
                    }


?>
    <table cellpadding="0" cellspacing="0" style="width: 650px;">
        <tr>
            <td>
            <form action="?side=produkter" method="post">
            <input name="search" type="text" value="Søg her.." onfocus="if(this.value=='Søg her..') this.value='';" onblur="if(this.value=='') this.value='Søg her..';"/>
            <input name="sog" type="image" alt="Søg" title="Søg" src="admin/gfx/sog.png" style="margin-bottom: -3px;"/>
            </form><br /><br />
            </td>
            <td>
                    <form action="<?
                    if ($search !=NULL)
                    {
                    echo "?side=produkter&search=$search";   
                    }
                    else
                    {
                    echo "?side=produkter&kategori=$kategori";
                    }
                    ?>" method="post">
    Vis :     <select name="pr_side" style="width: 120px;">
        <optgroup label="Antal per side">
        <option value="5" >5 Resultater</option>
        <option value="10">10 Resultater</option>
        <option value="20">20 Resultater</option>
        <option value="50">50 Resultater</option>
        <option value="10000">Alle Resultater</option>
        </optgroup>
        </select>
           
        <input name="show"  alt="Vis" title="Vis" type="image" src="admin/gfx/vis.png" style="width: 32px; margin-bottom: -3px;"/>&nbsp;&nbsp;<a href="java script:history.back()"><img style=" margin-bottom: -3px;" src="gfx/icons/arrow_up.png" border="0" alt=" Tilbage " title=" Tilbage " /></a>
</form><br /><br />
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <table  style="width: 500px;" cellpadding="0" cellspacing="0">
                    <?php
                       
                       
                        /* Hvis visfra-variablen ikke findes i URL-feltet og den ikke er et nummer og den er større end antallet i databasen, så sættes den til 0, ellers sættes den til værdien fra URL feltet */
                       
                    $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;
                        /* laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen  */
                    if ($kategori !=NULL)
                    {
                    $sql = mysql_query("SELECT * FROM produkter WHERE kategori='".$kategori."' ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());
                    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM produkter WHERE kategori='".$kategori."'"),0) or die(mysql_error());   
                    }
                    else 
                    {
                    if ($search != NULL)
                    {
                    $sql = mysql_query("SELECT * FROM produkter WHERE title LIKE '%".$search."%' ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());
                    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM produkter WHERE title LIKE '%".$search."%'"),0) or die(mysql_error());
                    }
                    else
                    {
                    $sql = mysql_query ("SELECT * FROM produkter ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());
                    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM produkter"),0) or die(mysql_error());
                    }
                    }
                   
                    /* kører en while og udskriver data */
                   
                    while ($row = mysql_fetch_array($sql)) {
                   
                    if ($row['border'] == "on")
                    {
                    $border = "1";   
                    }
                    else
                    {
                    $border = "0";   
                    }
                   
                    ?>
                    <tr>
                        <td valign="top" width="85%" style="text-align:left;">
                            <strong><a href="?side=produkt&id=<?=$row['id']?>"><?=$row['title']?></a></strong> <br />
                <span id="text2"><img src="gfx/punkttitle-break.png" border="0" alt="" title="" /><br />
                                <?=(substr($row['beskrivelse'],0,50))?>...<br />
                        </td>
                        <td valign="top" width="15%">   
                            <a href="?side=produkt&id=<?=$row['id']?>"><img src="gfx/produkter/<?=$row['thumb']?>"  alt="Se Detaljer" title="Se Detaljer" border="<?=$border?>" /></a>
                        </td>
                    </tr>
                    <tr>
</table><br /><br />
<table cellpadding="0" cellspacing="0" style="width: 500px;">
                    <tr>
                    <?
                    }
                    ?>
                    <tr>
                        <td>
                            <?php
                            /* Antallet af poster vi ønsker vist på hver side */


/* Der undersøges om der skal udskrives et "forrige side"-link, er dette tilfældet udskrives linket */
echo "<div align='center'>";
if ($vis_fra > 0) {

$back= $vis_fra - $pr_side;
if ($search !=NULL)
{
echo "<a href='?side=produkter&pr_side=$pr_side&visfra=$back&search=$search'><img src='gfx/icons/arrow_left.png' border='0' style=' margin-bottom: -3px;' alt='Forrige' /></a> ";
}
else
{
echo "<a href='?side=produkter&pr_side=$pr_side&visfra=$back&kategori=$kategori'><img src='gfx/icons/arrow_left.png' border='0' style=' margin-bottom: -3px;' alt='Forrige' /></a> ";   
}

}


$page = 1;



/* Alle siderne udskrives så man med et klik kan få resultaterne fra fx 90-100 */

for ($start = 0; $antal > $start; $start = $start + $pr_side) {

if($vis_fra != $page * $pr_side - $pr_side) {
if ($search !=NULL)
{
echo "<a href='?side=produkter&pr_side=$pr_side&visfra=$start&search=$search'>$page</a> ";
}
else
{
echo "<a href='?side=produkter&pr_side=$pr_side&visfra=$start&kategori=$kategori'>$page</a> ";   
}
} else {

echo "<strong>".$page."</strong> ";

}

$page++;

}



/* Der undersøges om der skal udskrives et "næste side"-link, er dette tilfældet udskrives linket */

if ($vis_fra < $antal - $pr_side) {

$next = $vis_fra + $pr_side;
if ($search !=NULL)
{
echo " <a href='?side=produkter&pr_side=$pr_side&visfra=$next&search=$search'><img src='gfx/icons/arrow_right.png' border='0' style=' margin-bottom: -3px;' alt='Næste' /></a>";
}
else
{
echo " <a href='?side=produkter&pr_side=$pr_side&visfra=$next&kategori=$kategori'><img src='gfx/icons/arrow_right.png' border='0' style=' margin-bottom: -3px;' alt='Næste' /></a>";   
}
}
echo "</div><br />";
                           
                            ?>
Avatar billede majbom Novice
30. juni 2009 - 13:01 #1
du kan prøve at udskrive dine sql-strenge så du kan se om limit osv. ser ud som det skal - det kan nok hjælpe din fejlsøgning en smule
Avatar billede Allankc Nybegynder
30. juni 2009 - 13:24 #2
hvis man bare kører den:
pr_side = 5
antal = (alt efter valgt kategori - testet 3 stk, 2 - 50 - 1)
visfra = 0 - blir fint omskrevet på diverse side links og opdelt korrekt. - testetede også med at vælge flere resultater per side også her virker det.

det der bare er super funny er når man trykker eksl. visfra=25 linket - står vi stadig med resultaterne fra visfra=0

Limit virker fint også ved brug af resultater per side, det er bare lige det med at starte fra næste side der ik helt kører.
Avatar billede majbom Novice
30. juni 2009 - 13:30 #3
er det så fordi at "visfra" står forkert i adressen, eller?
Avatar billede Allankc Nybegynder
30. juni 2009 - 13:33 #4
nope også her er adressen rigtigt.. det er jo derfor jeg er super forvirret hehe
Avatar billede majbom Novice
30. juni 2009 - 13:58 #5
jeg er ikke sikker på at jeg er helt med, men lader det ikke til at:

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

altid sætter $vis_fra til 0 så?
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:02 #6
hvis visfra ikke er numre eller mindre end antal (sql rækker) = 0
så det er ikke altid - eller mig der helt væk?
Avatar billede majbom Novice
30. juni 2009 - 14:08 #7
jeg kan godt se ideen med linjen og synes også den ser korrekt ud, men det var bare et bud på hvad der ik galt.

kan du ikke prøve at udskrive $vis_fra efter den linje dér?
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:14 #8
jeg fik den !!!

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM produkter"),0) or die(mysql_error());
                      $vis_fra = (isset($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;
                      $sql = mysql_query ("SELECT * FROM produkter ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:14 #9
det er jo fordi jeg ik har den med i hver enkelte sql -!!!

dumme dumme mig!
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:18 #10
så er det bare at smide en besked om hvis der ingen resultater er på og så er det sku klar til brug :) - tak for lede tråden :)
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:23 #11
smid lige et svar hr. splazz :-)
Avatar billede majbom Novice
30. juni 2009 - 14:40 #12
ja, den havde jeg sq overset :)

lad os dele puljen!
Avatar billede Allankc Nybegynder
30. juni 2009 - 14:43 #13
Det gør vi bare :)
Avatar billede majbom Novice
30. juni 2009 - 14:51 #14
tak for point :)
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