Avatar billede sthen Nybegynder
23. december 2004 - 18:11 Der er 2 kommentarer og
1 løsning

Hvor indsætter jeg "Søgningen gav intet resultat"

Har følgende søgescript, som fungerer "næsten" tilfredsstillende:

<?php

if(isset($_POST['sogning']) && ($_POST['sogning']!="")) {

$text = "Hvordan kringler jeg det nu, så det ikke er HELE teksten der vises som output, men kun en del af den (naturligvis den del hvor søgeordet indgår).
Det kan jo godt være at søgeordet står midt nede i teksten, og derfor skal tekstoutputtet i så fald vises med ...... - men naturligvis skal vi kun have de tre prikker HVIS der udelades noget på den side af det viste hvor prikkerne står.";

if(! function_exists('stripos') ) {
function stripos($haystack, $needle, $offset=0) {
  return strpos(strtolower($haystack), strtolower($needle), $offset);
}
}

$term = $_POST['sogning']; // Hvad der søges efter
$display = 20;  // antal tegn der vises før/efter

$pos = stripos($text,$term);
$beginpos = $pos - $display;
$endpos = $pos + $display + strlen($term);
if( $beginpos < 0 )
    $beginpos = 0;
if( $beginpos == 0 )
    $pre = '';
else
    $pre = '...';
if( $endpos >= strlen($text) )
    $post = '';
else
    $post = '...';
$text =  substr($text,$beginpos,($endpos-$beginpos+strlen($term)));
$term_preg = preg_quote($term);
$text = preg_replace("/($term_preg)/im",'<b>\1</b>',$text);

echo $pre.$text.$post;
}

else
{
?>

<FORM ACTION="<? echo $_SERVER['PHP_SELF']; ?>" METHOD="POST" NAME=formnavn>
    <INPUT TYPE="text" NAME="sogning">
    <INPUT TYPE="submit" VALUE="søg">
</FORM>
<?}?>

Mit eneste problem med scriptet er, at hvis der IKKE er noget match, så skriver det blot begyndelsen af $text i stedet for at skrive "Din søgning gav intet resultat".
Hvor skal jeg sætte det ind - for at få dette mulige output?
Avatar billede coderdk Praktikant
23. december 2004 - 20:15 #1
Noget i stil med:

<?php

  if(isset($_POST['sogning']) && ($_POST['sogning']!=""))
  {

    $text = "Hvordan kringler jeg det nu, så det ikke er HELE teksten der vises som output, men kun en del af den (naturligvis den del hvor søgeordet indgår).
Det kan jo godt være at søgeordet står midt nede i teksten, og derfor skal tekstoutputtet i så fald vises med ...... - men naturligvis skal vi kun have de tre prikker HVIS der udelades noget på den side af det viste hvor prikkerne står.";

    if(! function_exists('stripos') ) {
      function stripos($haystack, $needle, $offset=0) {
        return strpos(strtolower($haystack), strtolower($needle), $offset);
      }
    }

    $term = $_POST['sogning']; // Hvad der søges efter
    $display = 20;  // antal tegn der vises før/efter

    $pos = stripos($text,$term);
    if ( $pos === false )
    {
      echo "Søgningen gav intet resultat...";
    }
    else
    {
      $beginpos = $pos - $display;
      $endpos = $pos + $display + strlen($term);
      if( $beginpos < 0 )
          $beginpos = 0;
      if( $beginpos == 0 )
          $pre = '';
      else
          $pre = '...';
      if( $endpos >= strlen($text) )
          $post = '';
      else
          $post = '...';
      $text =  substr($text,$beginpos,($endpos-$beginpos+strlen($term)));
      $term_preg = preg_quote($term);
      $text = preg_replace("/($term_preg)/im",'<b>\1</b>',$text);

      echo $pre.$text.$post;
    }
  }
  else
  {
     
?>

<FORM ACTION="<? echo $_SERVER['PHP_SELF']; ?>" METHOD="POST" NAME=formnavn>
    <INPUT TYPE="text" NAME="sogning">
    <INPUT TYPE="submit" VALUE="søg">
</FORM>
<?php

  }

?>

stripos returnerer false hvis den ikke finder noget: http://dk2.php.net/stripos - Det samme gør strpos som du laver fall-back på hvis den ikke findes...
Avatar billede coderdk Praktikant
23. december 2004 - 20:15 #2
Og et svar :)
Avatar billede sthen Nybegynder
23. december 2004 - 22:11 #3
Tak tak
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