• 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.