• User Attivo

    Evidenziare risultati ricerca

    Ciao a tutti,
    ho implementato uno script (questo: w w w. phpro.org/articles/Highlight-Search-Words.html) per evidenziare i risultati di una ricerca.

    Il problema è che mi effettua la ricerca solo sulla prima riga del database.

    questo è il codice:

    [php]
    <?php
    $query_rs_scheda = sprintf("SELECT *, MATCH(scheda_field) AGAINST('$colname_rs_scheda' IN BOOLEAN MODE) AS score FROM schede WHERE MATCH(scheda_field)
    AGAINST ('$colname_rs_scheda' IN BOOLEAN MODE) ORDER BY score DESC", GetSQLValueString($colname_rs_scheda, "text"));
    $rs_scheda = mysql_query($query_rs_scheda, $conn) or die(mysql_error());
    $row_rs_scheda = mysql_fetch_assoc($rs_scheda);
    $totalRows_rs_scheda = mysql_num_rows($rs_scheda);

    function highlightWords($risultati, $words)
    {
    foreach ( $words as $word )
    {
    $risultati = str_ireplace($word, '<span class="highlight_word">'.$word.'</span>', $risultati);
    }
    return $risultati;
    }
    $risultati = $row_rs_scheda['scheda_field'];

    $words = $_POST['ricerca']; *// il problema forse è qui
    
    $risultati =  highlightWords($risultati, $words);
    

    ?>

    stampo i risultati

    <?php echo $risultati?>

    [/php]

    cosa sbaglio?

    grazie mille.


  • User Attivo

    Ho dato uno sguardo rapido, prova a cambiare:
    [php] $risultati = str_ireplace($word, '<span class="highlight_word">'.$word.'</span>', $risultati);[/php]
    con
    [php] $risultati .= str_ireplace($word, '<span class="highlight_word">'.$word.'</span>', $risultati);[/php]


  • User Attivo

    Ciao codencode,
    grazie per la risposta.

    Ho provato a modificare il codice come mi hai detto ma ottengo sempre lo stesso risultato duplicato per più volte.

    In realtà la soluzione l'ho trovata però vorrei avere un aiuto per realizzarlo senza modificare di molto il codice.


  • User Attivo

    Questa è la soluzione di cui parlavo, però ho un problema perché ho un campo 'foto' che dovrei stampare a video come immagine, un aiuto?

    [php]
    <?php
    mysql_select_db($database_conn, $conn);
    $query_rs_scheda = sprintf("SELECT *, MATCH(scheda_field) AGAINST('$colname_rs_scheda' IN BOOLEAN MODE) AS score FROM schede WHERE MATCH(scheda_field)
    AGAINST ('$colname_rs_scheda' IN BOOLEAN MODE) ORDER BY score DESC", GetSQLValueString($colname_rs_scheda, "text"));
    $rs_scheda = mysql_query($query_rs_scheda, $conn) or die(mysql_error());

    while ($query=mysql_fetch_row ($rs_scheda))
    {
    $risultati[] = $query[1];
    $risultati[] = $query[2]; */campo foto
    }
    mysql_free_result ($rs_scheda);

    function highlightWords($risultati, $words)
    {
    foreach ( $words as $word )
    {
    $risultati = str_ireplace($word, '<span class="highlight_word">'.$word.'</span>', $risultati);
    }
    return $risultati;
    }
    $words = $_POST['ricerca'];

    $risultati =  highlightWords($risultati, $words);
    

    ?>
    [/php]

    e poi stampo a video così

    [php]
    <?php echo "\n" ;
    foreach ($risultati as $v)
    {
    echo '<ul class="lista-risultati">';

    echo $v. "</ul>";
    

    }
    echo "\n" ;
    ?>
    [/php]


  • User Attivo

    Ho risolto modificando questa riga così
    [php]
    <?php
    $risultati2[] = $query[2];
    ?>
    [/php]

    e poi stampando i risultati a video così:

    [php]
    <?php
    echo "\n" ;
    foreach (array_combine($risultati,$risultati2) as $chiave => $valore)
    {
    $foto = '<img src="'.$valore.'" />';
    echo $chiave;
    echo $foto;
    }
    echo "\n" ;
    ?>
    [/php]

    Anche se il mio intento era quello di risolvere con il metodo iniziale.