Avatar billede JJ77 Juniormester
08. februar 2006 - 10:52 Der er 3 kommentarer og
1 løsning

Kan ikke huske søgeresultater når der trykkes på ny side "paging"

Hej eksperter.
Jeg har et problem med min paging. Jeg har en søgefunktion på en side, og den fungerer også fint. Problemet er bare hvis der er over 20 søgeresultater, så bliver de opdelt i sider. Hvis der så fx er 30 resultater og man trykker på næste side, er det som om at den henter alle fra databasen igen, og ikke husker de gamle søgeresultater. meget mystisk:(
PS: jeg har paging øverst og nederst på siden.

<body scroll="auto">
<div align="center">
    <form action="salgsannoncer.php" method="post">
                <div align="left">
                        <table width="339" border="0" cellspacing="5" cellpadding="0" height="42">
                        <tr height="37">
                            <td width="164" height="37"><span class="lille">Søgeord:</span><br>
                    <div align="left">
                        <input type="text" name="search"> </div>
                </td>
                <td width="175" height="37"><span class="lille">Omr&aring;de:</span><br>
                    <select name="selectName" size="1">
                        <option value="0">Sj&aelig;lland</option>
                        <option value="0">Stork&oslash;benhavn</option>
                        <option value="0">Fyn</option>
                        <option value="0">Jylland</option>
                    </select>&nbsp;&nbsp;&nbsp;<input type="submit" name="submit" value="Søg"></td>
            </tr>
                    </table>
                </div>
            </form>
        </div>


<table width="560" border="0" cellspacing="0" cellpadding="0"bgcolor="#000000">
            <tr>
                    <td><span class="mini">&nbsp;</span></td>
                </tr>
        </table>
<table width="560" border="0" cellspacing="5" cellpadding="0" bgcolor="#FFFFFF">
<tr>
        <td width="360" valign="top"><span class="stor"><b><u>Annonce</u></b></span></td>
        <td width="70" align="center" valign="top"><span class="stor"><b><u>Pris</u></b></span></td>
        <td width="130" align="center" valign="top"><span class="stor"><b><u>Område</u></b></span></td>
    </tr>
    </table>
<table width="560" border="0" cellspacing="0" cellpadding="0"bgcolor="#000000">
            <tr>
                    <td><span class="mini">&nbsp;</span></td>
                </tr>
        </table> 
   
   
   
<?php
require("../members/common.php");
//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )
// str klip(str tekst, int længde, int tolerance)

function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades
{
    $punktum  = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum
    $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum
    $mere      = "..."; // punktummer hvis mere tekst

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance
        $mere = ""; // ikke andet
    } elseif ($punktum !== false) {
        $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum
    } else {
        $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over)
    }

    return substr($tekst, 0, $slut_pos) . $mere; // udskriv del + evt. punktummer
}

echo "<table border=\"0\" cellspacing=\"5\" cellpadding=\"0\"><tr><td>";

$pr_side = "20"; //Definerer antal resultater pr. side

if (!isset($s)) {
    $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den
}

$g_total = mysql_query("select count(id) as total from salgAfProdukt WHERE produkt LIKE '%".$_POST['search']."%'") or die(mysql_error());
$total = mysql_result($g_total,0);
if($total>$pr_side)
{
if ($total > $s+5){
##
#Find ud af om derskal være et Forrige link
##
if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side
    $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes 
    echo "<a href='?s=$previous_s'><font color=\"#4682B4\">Forrige</font></a> "; //Udskriver linket
}

##
#Find ud af hvis/hvor mange sider der er rows til
##
$page = 1; //Definerer hvor sidetal skal starte
for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere
    if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på
        echo "<a href='?s=$start'><font color=\"#4682B4\">$page</font></a> "; //...hvis ikke, udskrives link med værdien af $page
    } else { //Ellers, dvs. hvis linket vil pege på den side man er på..
        echo "<font color=\"#000000\">$page </font>"; //...udskrives værdien af $page bare, altså ikke som link
    }
    $page++; //Lægger en til $page til næste gang løkken køres
}

##
#Find ud af om der skal være et næste link
##
if ($total > $s+$pr_side) { //Tjekker om der er flere sider
    $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes
    echo "<a href='?s=$next_s'><font color=\"#4682B4\">Næste</font></a>"; //Udskriver linket "næste"
}
}
}
echo "</tr></td></table>";
  echo "  <table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#CAD9EA\">
            <tr>
                    <td><span class=\"mini\">&nbsp;</span></td>
                </tr>
        </table>";
$query = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr WHERE produkt LIKE '%".$_POST['search']."%' order by id desc limit $s,$pr_side") or die(mysql_error());

while($row = mysql_fetch_array($query)){
   
echo "
  <table width=\"560\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\" bgcolor=\"#FFFFFF\">
  <tr>
  <td width=\"360\" valign=\"top\"><span class=\"mellem\"><a href=\"visSalgsannoncer.php?id=$row[Id]\" target=\"vs\">$row[produkt]</a></span> <br><span class=\"lille\">".klip($row['supplerendeTekst'])."</span></td>
  <td width=\"70\" align=\"center\" valign=\"top\"><span class=\"lilleS\">".$row['pris'].",-</span></td>
  <td width=\"130\" align=\"center\" valign=\"top\"><span class=\"lilleS\">".$row['bynavn']."</span></td></tr></table>


<table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#CAD9EA\">
            <tr>
                    <td><span class=\"mini\">&nbsp;</span></td>
                </tr>
        </table>";
   

}

echo "<table border=\"0\" cellspacing=\"5\" cellpadding=\"0\"><tr><td>";

$total = mysql_result($g_total,0);
if($total>$pr_side){

##
#Find ud af om derskal være et Forrige link
##
if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side
    $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes 
    echo "<a href='?s=$previous_s'><font color=\"#4682B4\">Forrige</font></a> "; //Udskriver linket
}

##
#Find ud af hvis/hvor mange sider der er rows til
##
$page = 1; //Definerer hvor sidetal skal starte
for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere
    if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på
        echo "<a href='?s=$start'><font color=\"#4682B4\">$page</font></a> "; //...hvis ikke, udskrives link med værdien af $page
    } else { //Ellers, dvs. hvis linket vil pege på den side man er på..
        echo "<font color=\"#000000\">$page </font>"; //...udskrives værdien af $page bare, altså ikke som link
    }
    $page++; //Lægger en til $page til næste gang løkken køres
}

##
#Find ud af om der skal være et næste link
##
if ($total > $s+$pr_side) { //Tjekker om der er flere sider
    $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes
    echo "<a href='?s=$next_s'><font color=\"#4682B4\">Næste</font></a>"; //Udskriver linket "næste"
}
}
echo "</tr></td></table>";

?>
</body>
Avatar billede doc404 Novice
08. februar 2006 - 13:32 #1
Du blander et par ting sammen.

Når du klikker på din Søg knap postes din form og du kan læse din search værdi fra $_POST[].

Når du klikker på et side link postes din form ikke - derfor kan du ikke læse din search værdi fra $_POST[]

Den nemmeste løsning er at putte din search værdi med i de links du danner (?s=<sidenr>&search=<searchværdi>)

btw: tag og lav lidt input validering...
Avatar billede JJ77 Juniormester
08. februar 2006 - 17:50 #2
Ok.. rart at der findes en løsning... men kan du ikke uddybe det bare en smule, det ville være dejligt. Er nemlig lidt lost;)
Avatar billede JJ77 Juniormester
10. februar 2006 - 11:01 #3
smider du ikke et svar:)
Avatar billede JJ77 Juniormester
19. februar 2006 - 02:13 #4
Nåå.. men så tager jeg dem selv;)
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