Avatar billede hav0k Nybegynder
31. august 2003 - 22:48 Der er 5 kommentarer og
2 løsninger

Hjææælp! Søgefunktion med flere sider virker ikke..

Jeg har lavet en søgefunktion over en side med artikler, hvor søgningen skal blive delt op så der kommer 5 resultater pr. side (fx: << [1] 2 [3] [4] >>). Allerførst er der en fuld liste med artikler, med samme sidesystem. Dette sidesystem virker fint. Det gør sidesystemet til søgningen på artiklerne dog ikke.. Det ser sådan her ud:

                //søgning start
                $offset2 = (isset($_GET['offset2'])) ? $_GET['offset2'] : 0; // Hvis ikke $offset2 er sat, sættes den til 0
                $pr_side2 = 5; // Antal resultater pr. side
                echo "<br><br><a name=\"search\"><p class=\"header1\">";
                $search_dk = "Søg i nyhederne";
                $search_en = "Search the news";
                echo_lang($search_dk, $search_en, $langID);
                echo "</p>";
                if($langID == "dk"){
                    $echo_search = "Søg";
                }elseif($langID == "en"){
                    $echo_search = "Search";
                }
?>
                <br><br><center><FORM METHOD="post" ACTION="http://www.noekken.com/index2.php?page=news&langID=<?php echo $langID;?>">
                <INPUT TYPE="text" NAME="text_search" STYLE="background:F9D3D3;border:1px solid black;font:bold 10px verdana;">
                <INPUT TYPE="submit" STYLE="background:F9D3D3;border:1px solid black;font:bold 10px verdana;" VALUE="<?php echo $echo_search;?>">
                </FORM></center>
       
<?php
               
                //Søgning query start:
                if($text_search){
                    if($langID == "dk"){
                        global_mysql_connect();
                        $query["news4"] = mysql_query("SELECT id, date, dk_header, dk_text, file_name FROM news WHERE dk_header LIKE '%$text_search%'
                        OR dk_text LIKE '%$text_search%' ORDER BY id DESC LIMIT $offset2,$pr_side2") or die(mysql_error());;
                        echo mysql_num_rows($query["news4"]) . " forekomst(er) fundet, med ordet $text_search" . ":<br><br>";
                        while($data_news4 = mysql_fetch_array($query["news4"])){
                            echo "<p class=\"header2\"><a href=\"?page=news&langID=$langID" . "&special=$data_news4[0]" . "\">$data_news4[2]" . "</a></p>
                            <center>
                            <table border=\"0\" class=\"clean\"><tr>
                            <td class=\"clean\"><a href=\"?page=news&langID=$langID" . "&special=$data_news4[0]" . "\">
                            <img src=\"include/add/$data_news4[4]" . "\" style=\"filter: alpha(opacity=60);\" onmouseover=\"style.filter='alpha(opacity=100)';\"
                            onmouseout=\"style.filter='alpha(opacity=60)';\" width=\"100\" height=\"100\" align=\"top\" border=\"1\"></a></td><td align=\"left\" class=\"clean\">";
                            if (strlen($data_news4[3]) > 300) {
                                  $data_news4[3] = substr($data_news4[3], 0, 300) . "... <a href=\"?page=news&langID=$langID" . "&special=$data_news4[0]" . "\">[læs mere]</a>";   
                            }
                            echo $data_news4[3] . "</td><tr><td class=\"clean\" colspan=\"2\" align=\"center\">Dato: $data_news4[1]" . "</td></tr></table><hr width=\"60%\"></center><br>";
                        }                   
                    }elseif($langID == "en"){
                        global_mysql_connect();
                        $query["news4"] = mysql_query("SELECT id, date, en_header, en_text, file_name FROM news WHERE en_header LIKE '%$text_search%'
                        OR en_text LIKE '%$text_search%' ORDER BY id DESC LIMIT $offset2,$pr_side2") or die(mysql_error());;
                        echo mysql_num_rows($query["news4"]) . " result(s) found, using the word $text_search" . ":<br><br>";
                        while($data_news4 = mysql_fetch_array($query["news4"])){
                            echo "<p class=\"header2\"><a href=\"?page=news&langID=$langID" . "&special=$data_news4[0]" . "\">$data_news4[2]" . "</a></p>
                            <center>
                            <table border=\"0\" class=\"clean\"><tr>
                            <td class=\"clean\"><a href=\"?page=news&langID=$langID" . "&special=$data_news4[0]" . "\">
                            <img src=\"include/add/$data_news4[4]" . "\" style=\"filter: alpha(opacity=60);\" onmouseover=\"style.filter='alpha(opacity=100)';\"
                            onmouseout=\"style.filter='alpha(opacity=60)';\" width=\"100\" height=\"100\" align=\"top\" border=\"1\"></a></td><td align=\"left\" class=\"clean\">";
                            if (strlen($data_news4[3]) > 300) {
                                  $data_news4[3] = substr($data_news4[3], 0, 300) . "... <a href=\"?page=news&langID=$langID" . "&special=$data_news4[0]" . "\">[læs mere]</a>";   
                            }
                            echo $data_news4[3] . "</td><tr><td class=\"clean\" colspan=\"2\" align=\"center\">Date: $data_news4[1]" . "</td></tr></table><hr width=\"60%\"></center><br>";
                        }
                    } //søgning query slut
                    //Side listing start:
                    echo "<center>";
                    // Tæller antal poster i databasen
                    $tael2 = mysql_query("SELECT COUNT(*) AS antal2 FROM news") or die (mysql_error());
                    $antal2 = mysql_result($tael2,0);

                    //Koden herunder burde give sig selv, hvis du kan lidt matematik
                    if ($offset2 >= $pr_side2) {
                        $forrige2 = $offset2-$pr_side2;
                        echo "<a href=\"?offset2=$forrige2" . "&langID=$langID" . "&page=news\">&lt;&lt;</a> ";
                    }
                    $page2 = 1; //Definerer hvor sidetal skal starte
                    for($start2=0; $antal2 > $start2; $start2=$start2+$pr_side2){
                        if ($start2 != $offset2) {
                            echo "<a href=\"?offset2=$start2" . "&langID=$langID" . "&page=news\">$page</a> ";
                        } else {
                            echo "$page2 ";
                        }
                        $page2++;
                    }
                    if ($antal2 > $offset2+$pr_side2) {
                        $naeste2 = $offset2+$pr_side2;
                        echo "<a href=\"?offset2=$naeste2" . "&langID=$langID" . "&page=news\">&gt;&gt;</a>";
                    }
                    echo "</center>";
                   
                }    //Side listing slut                   
    }

I kan selv se resultatet på http://www.noekken.com/index2.php?page=articles&langID=dk -søg på "e" under artikler.. Det skulle give 6 resultater, istedet giver det 5 og I kan selv se hvordan 'sidelistingen' ser ud.. Ku godt bruge et svar så hurtigt som mulig! - TAk!
Avatar billede detox Nybegynder
01. september 2003 - 00:08 #1
Det hænger nok sammen med den begrænsning du har sat her:
DESC LIMIT $offset2,$pr_side2
da du har:
$pr_side2 = 5; // Antal resultater pr. side
får du max 5 resultater.
Avatar billede 1409 Praktikant
01. september 2003 - 02:26 #2
Jeg bruger selv dette:

http://www.sitepoint.com/print/662

Det smarte ved det, synes jeg, er at det er OO, kompakt, og nemt at bruge!
Avatar billede hav0k Nybegynder
01. september 2003 - 18:04 #3
Det er jo en længere udredning..

Der er ikke en lidt lettere alternativ løsning på problemet..? Desuden kan jeg ikke se nogen søgefunktion i det eksempel.. har dog også skimmet den igennem hurtigt..
Avatar billede 1409 Praktikant
01. september 2003 - 22:20 #4
Jeg linkede til print-siden, så derfor står det ud i et.

Det i dette tilfælde interessante: http://www.sitepoint.com/article/662/5

Selve søge-funktionen er her hurtigt tilrettet:

<?php
require('pagedresults.php');

$cnx = @mysql_connect('localhost','kyank','********');
mysql_select_db('jokes',$cnx);
$rs = new MySQLPagedResultSet("SELECT * FROM news WHERE dk_header LIKE  %$text_search%' OR dk_text LIKE '%$text_search%' ");
?>
<html>
<head>
<title>Paged Results Demo</title>
</head>
<body>
<table border="1">
<?php while ($row = $rs->fetchArray()): ?>
<tr><td><?=$row['JokeText']?></td><td><?=$row['JokeDate']?></td></tr>
<?php endwhile; ?>
</table>
<p><?=$rs->getPageNav("text_search=$text_search")?></p>
</body>
</html>
Avatar billede hav0k Nybegynder
02. september 2003 - 21:30 #5
"Det hænger nok sammen med den begrænsning du har sat her:
DESC LIMIT $offset2,$pr_side2
da du har:
$pr_side2 = 5; // Antal resultater pr. side
får du max 5 resultater."

Jeg tænkte lige på at jeg bruger nøjagtig samme funktion til oversigten over alle artiklerne/nyhederne, og der virker det fint.. burde det så ikke også virke her? Eller er det pga. at det her står der:
WHERE dk_header LIKE '%$text_search%' OR dk_text LIKE '%$text_search%' ??
Avatar billede detox Nybegynder
03. september 2003 - 01:28 #6
Det er grunden til at du kun får 5 søgeresultater i stedet for 6. At der osse er noget galt med den måde resultatet bliver præsenteret på er jo åbenlyst, men du vil aldrig få mere end 5 resultater på den måde.
Avatar billede hav0k Nybegynder
07. september 2003 - 20:01 #7
Jeg synes at ovenstående eksempel på hvordan jeg skal klare problemet er lidt for besværligt, så jeg har valgt bare at udelade 'paging' på mine søgninger.. Synes dog alligelvel at du skal have 50 point for din besværlighed.. Thx!
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