Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Ricerca ed evidenzia i risultati

    Salve,
    ho trovato in giro per internet un semplice script in PHP che volevo adattare alle mie esigenze. Attualmente i termini ricercati.. che vengono passati come parametro sulla variabile " q " vengono ricercati nella variabile " testo " e se vengono trovati, vengono evidenziati in giallo.

    Posto il codice:

    Codice PHP:
    <?
    // Creo una variabile con un testo di esempio in cui effettuare la ricerca.
    // Normalmente il testo in cui cercare verrà estratto da un DB.
    $testo "Questo è un testo di prova";

    // Recupero la Query
    $q $_GET['q'];

    // Splitto la query sulla base del carattere spazio...
    // ...e creo l'array $w con tutte le singole parole della query
    $w explode(" "$q);

    // conto gli elementi dalla array $w
    $n_w count($w);

    // ciclo l'array per verificare le corrispondenze di ogni singola parola all'interno 
    // della variabile $testo
    for ($x=0$x<=$n_w$x++)
    {
      
    $testo str_replace($w[$x], "<span style=\"background: #FFFFBC;\">".$w[$x]."</span>"$testo);
    }

    // stampo a video
    echo $testo;
    ?>
    Se ad esempio visualizzo la pagina:
    http://www.nichiweb.com/cercaprova.php?q=Questo

    Mi evidenzia la parola "Questo", ma se cerco invece "questo" in minuscolo non me la trova..! Ho già provato ad utilizzare la funzione " str_ireplace " al posto di " str_replace " che è case sensitive, ma quando cerco il termine in minuscolo, ed il testo della mia variabile è maiuscolo, me la cambia!

    Come posso risolvere questo problema? Oppure dove posso trovare un altro script per la ricerca che mi permetta di evidenziare i risultati trovati?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    dovresti usare le regexp perchè nel testo originale devi sostituire le varianti aggiungendo i tag per la colorazione senza toccare la parola stessa

  3. #3
    Grazie per la risposta, posso chiederti una dritta in più? Non riesco a trovare qualche informazione sulla sintassi.. questo " regexp " è una funzione in php, perchè trovo diverse cose in javascript. Dovrei sostituirla al posto di " str_replace " .. Potresti darmi una mano?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    le regexp sono le "espressioni regolari", a volte non facili da "costruire". La funzione utile per te potrebbe essere preg_replace con qualcosa come:

    Codice PHP:
    $testo '...Prova, questa è una prova'// testo completo
    $pattern '/prova/i'// testo da cercare secondo le regexp
    $replacement '...'// sostituzione (v. funzione php)
    echo preg_replace($pattern$replacement$testo); 

  5. #5
    Grazie per la risposta, sei stato chiarissimo sono io che ancora non riesco a metterci mano. Ho utilizzato un script già pronto per effettuare la ricerca sul database, perché il tipo di ricerca che ho fatto fino ad ora non è così affinata diciamo.. Ti posto il codice, funziona tutto perfettamente..

    Codice PHP:
    <?php
    include("Include/connessioneDB.php");

    $campo $_POST['campo'];

    if (isset(
    $campo) == false || $campo == "")
        {
            echo 
    "nessun risultato!";
        }
        else
        {
            echo 
    "[b]Termine ricercato:$campo[/b]";
        }

        if (isset(
    $campo) == false || $campo == "")
        {
    echo 
    "

    Specificare un criterio di ricerca.</p>"
    ;
        }
        else
        {
            
    $arr_txt explode(" "$campo);
            
    $sql "SELECT * FROM CategorieSezioni WHERE ";
            for (
    $i=0$i<count($arr_txt); $i++)
            {
                if (
    $i 0)
                {
                    
    $sql .= " AND ";
                }
                
    $sql .= "(NomeCategoria LIKE '%" $arr_txt[$i] . "%')";
        
            }
            
            
    $query mysql_query($sql);
            
    $quanti mysql_num_rows($query);
            if (
    $quanti == 0)
            {
              echo 
    "

    Nessun risultato!</p>"
    ;
            }
            else
            {
                
                for(
    $x=0$x<$quanti$x++)
                {
                    
    $rs mysql_fetch_row($query);
                    
    $id $rs[0];
                    
    $titolo $rs[1];
            
    ?>
            
            

    [url="pagina.php?id=<? echo "]"><? echo "$titolo"?>[/url]</p>
            
            <?
                
    }
            }
        }
    ?>
    i risultati mi vengono stampati nell'ultimo for e la parola evidenziata di fatto dovrebbe stare in $titolo.. Come posso fare.. Cioè dovrei mettere prima del for:

    Codice PHP:
    $testo $campo;
    $pattern '/prova/i'; (???? non so cosa scrivere)
    $replacement '<font style=color:#ffff00;>'
    e invece dentro il for questo?

    Codice PHP:
    echo preg_replace($pattern$replacement$testo); 

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmmh... l'unica stampa a video che vedo nella lista dei risultati mi pare sia:

    Codice PHP:

    [url="pagina.php?id=<? echo "]"><? echo "$titolo"?>[/url]</p>
    se dentro titolo (che suppongo abbia più parole) devi evidenziare quelle desiderate allora devi modificare quella riga aggiungendone qualcuna prima, tipo:

    Codice PHP:
    // ... bisogna definire $pattern e $replacement
    $titolocolorato = preg_replace($pattern, $replacement, $titolo);


    [url="pagina.php?id=<? echo "]"><? echo "$titolocolorato"?>[/url]</p>
    solo che bisogna appunto definire le vars $pattern e $replacement: $pattern va creato in base al valore di $campo che contiene i termini cercati (o di $arr_txt che è la stessa cosa, ma già in forma di array, mentre replacemente va studiata un po' meglio... se faccio in tempo ti posto la soluz. altrim. vediamo se qualcun altro ha voglia di compilare queste regexp

  7. #7
    Prima di tutto grazie mille per la pazienza.. Pensavo fosse più semplice realizzare una cosa del genere
    Comunque il titolo nel mio caso può avere più di una parola.. ad esempio nella tabella nel db ho "template blogger", "template wordpress" ecc ecc se inserisco come termine di ricerca soltanto "template" mi dovrebbe evidenziare in entrambi la parola template.. in giro su internet un signore ha scritto questo codice, che funziona a tutti quelli che lo avevano provato:

    Codice PHP:
    <?
             $postrep
    $row[Post]; // il testo da controllare
             ///////evidenzia
             //////////////////
             
    $replacement '\\1<font style=COLOR:#ffff00 ;>\\2</font>';
             
             
    reset ($keys); //le parole cercate
             
    foreach ($keys as $parola){
               if (
    $blok==1){
               
    $parola $parola ";
               }
              
    $pattern '(>[^<]*)('quotemeta($parola) .')';
              
    $postrep eregi_replace($pattern$replacement$postrep);
             }
             echo 
    $postrep;
             
    ?>
    Adesso ho provato a pasticciare un po' il mio codice.. modificando alla fine in questo modo:

    Codice PHP:
    $testo = $campo; 
                $replacement = '<font style=color:#ffff00;>';

                for($x=0; $x<$quanti; $x++)
                {
                    $rs = mysql_fetch_row($query);
                    $id = $rs[0];
                    $titolo = $rs[1];
                    
            $pattern = '(>[^<]*)('. quotemeta($titolo) .')';
                    $postrep = eregi_replace($pattern, $replacement, $testo);
            ?>
            
            

    [url="leggi.php?id=<? echo "]"><? echo "$postrep"?>[/url]</p>
            
            <?
              
    ?>
    ed ottengo i vari risultati dove il mio termine è inserito.. ma non me li evidenzia, leggo soltanto il termine. Questa è la pagina: Link se inserisci la lettera "w" visualizzerai effettivamente i 6 record in cui quella lettera è contenuta nel titolo.. ma poi non leggo più nulla, è come se mi avesse cancellato tutto

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    putroppo non ho tempo per cntrl direttam., ma nel tuo ultimo esempio vedo che in $replacement c'è solo il tag... devi mettere anche "\2" etc. etc. altrimenti stai dicendo di sostituire ciò che trovi con il tag font e il resto si perde

  9. #9
    ho provato a modificare quanto mi hai detto prima con " $replacement = '\1<font style=COLOR:#ffff00 ;>\2</font>'; "

    ma niente, continua a darmi lo stesso errore.. mi arrendo, non saprei proprio come risolvere il problema purtroppo. Grazie mille per l'aiuto! Sei stato gentilissimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.