Visualizzazione risultati 1 fino 26 di 26

Discussione: script motore di ricerca che evidenzia testo ricercato

  1. #1
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito script motore di ricerca che evidenzia testo ricercato

    ciao a tutti
    qualcuno sa qualke link di qualche tutorial dove insegnano a fare un motore di ricerca ke mostri tipo in un articolo la parte trovata evidenziata?? tipo quello di stoner e di phpbb

  2. #2
    Guest

    Predefinito

    Io il mio me lo sono fatto da solo (senza leggere nulla sinceramente :D).
    Comunque se usi mysql per immagazzinare i dati non ci vuole nulla a farlo.
    Praticamente il principio è quello di cercare all'interno delle colonne della tabella la parola cercata.
    Ad esempio... se io cerco PHP e ho due tabelle (news e sorgenti, tanto per fare un esempio),
    farò delle query del tipo
    Codice:
    SELECT * FROM news WHERE titolo LIKE '%PHP%' OR testo LIKE '%PHP%'
    SELECT * FROM news WHERE titolo LIKE '%PHP%' OR descrizione LIKE '%PHP%' OR linguaggio = 'PHP'
    a questo punto estrapoli i dati con le funzioni predefinite e per evidenziate la sintassi vai di str_replace.

  3. #3
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    sisi questo lo so gia l'ho gia creato
    solo che volevo sapere come fare quello tipo il tuo e che non so proprio da dove iniziare

  4. #4
    Guest

    Predefinito

    Cioè? Spiegati meglio.. fammi un esempio

  5. #5
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    io ho creato un motore di ricerca con LIKE solo che volevo provare a fare un motore di ricerca tipo il tuo nel caso avessi degli articoli o delle news nel sito

  6. #6
    Guest

    Predefinito

    Ma intendi il modulo di ricerca avanzato?
    Se intendi quello, è molto più elaborato.. per ogni modulo del CMS tira fuori dalle tabelle nelle quali salva i dati le informazioni per poter effettuare le ricerche (tipo le categorie le mette nella combobox, stessa cosa per le date di pubblicazione o il linguaggio per il modulo sorgenti) e in più accetta le parole chiave per gli altri campi. Insomma.. quello è molto più complesso ma non impossibile.

    Prima di tutto ti converrebbe mettere in un menu a tendina i dati che l'utente non può modificare (categorie, date di pubblicazione ecc) per gli altri campi metti una normale textbox, e poi nella pagina che elabora devi tener conto di tutti gli input...

    prova a buttar giù qualcosa.

  7. #7
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    nono intendevo che tu cerchi in un articolo per esempio e i risultati sono nn so circa 50 caratteri e ti evidenzia quello che hai cercato

  8. #8
    Guest

    Predefinito

    Per fare quello uso un misto di strpos, substr e str_replace.
    Codice PHP:
    if(strpos($rr['testo'],$value)>50)
    $cc = "... ". str_replace($value,$nvalue,substr(htmlentities($rr['testo']),strpos($rr['testo'],$value)-50,150));
    else
    $cc = str_replace($value,$nvalue,substr(htmlentities($rr['testo']),0,150));
    sono tutte funzioni predefinite.
    $value e il valore cercato nel box, $nvalue è quello in grassetto. $rr['testo'] è il testo tirato fuori da db.
    Ultima modifica di stoner : 29-03-2009 alle ore 12.29.40

  9. #9
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    ok grazie ma nn ho capito come imposto $nvalue...

  10. #10
    Guest

    Predefinito

    $value lo prendi dal form che ne so.. $_POST['campo'];
    mentre $nvalue = "<strong>".$value."</strong>";
    non è nient'altro che il valore che l'utente inserisce nel form ma in grassetto.

  11. #11
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    aaaaaaa ok grazie provo e ti faccio sapere

  12. #12
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    ciao ho provato a modificare il codice del motore con il tuo ma nn va mi da sempre che non trova niente ti posto il codice

    Codice PHP:
    <?php
    include("config.php");

    if(isset(
    $_GET['s'])) {
    $search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%$_GET[s]%'" );
    $total = mysql_num_rows($search);
    if(
    $total == 0){

    ?>
    <html>
    <head>
    <title>Cerca</title>
    </head>
    <body>
    <form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
    Cerca: <input type="text" name="s" /><br/>
    <input type="submit" value="Cerca" />
    </form>
    </body>
    </html>

    <?php

    echo "Non è stato trovato nessun risultato";

    }else{


    ?>
    <html>
    <head>
    <title>Cerca</title>
    </head>
    <body>
    <form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
    Cerca: <input type="text" name="s" /><br/>
    <input type="submit" value="Cerca" />
    </form>
    </body>
    </html>

    <?php

    $value
    = $_GET['s'];
    $nvalue = "<strong>".$value."</strong>";

    echo
    "Termine della ricerca: <b>".$value."</b><br /><br />";

    while(
    $r = mysql_fetch_array($search)) {

    if(
    strpos($r['art_articolo'],$value)>50) {
    $cc = "... ". str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),strpos($r['art_articolo'],$value)-50,150));
    } else {
    $cc = str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),0,150));
    }
    //fine else

    } // fine while.
    } // fine else.
    } else {
    ?>
    <html>
    <head>
    <title>Cerca</title>
    </head>
    <body>
    <form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
    Cerca: <input type="text" name="s" /><br/>
    <input type="submit" value="Cerca" />
    </form>
    </body>
    </html>
    <?php

    }

    ?>
    in config.php ce solo la connessione al db
    Ultima modifica di palla000 : 30-03-2009 alle ore 21.50.22

  13. #13
    Guest

    Predefinito

    Prova a modificare la query così
    Codice PHP:
    $search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%".$_GET['s']."%'" );
    comunque c'è una pagina per provarlo eventualmente=

  14. #14
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    ho modificato ma non va... cerca.php

  15. #15
    Guest

    Predefinito

    boh ad occhio non vedo niente di sbagliato..
    domanda stupida: c'è qualche articolo nella tabella ?

  16. #16
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    si ho scritto prova articolo e poi lettere a caso percio qualcosa dovrebbe trovare per forza

  17. #17
    Guest

    Predefinito

    Mi sembra strano. Prova a dare la stessa query su phpmyadmin.

  18. #18
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    l'ho provata e funziona nn capisco cosa puo essere

  19. #19
    Guest

    Predefinito

    Intanto cominciamo a fare ordine nel codice. Il form lo stampi sempre, quindi non ha senso metterlo in tutti gli if. lo lasci fuori e fai prima
    Codice PHP:
    <?php
    include("config.php");
    ?>

    <html>
    <head>
    <title>Cerca</title>
    </head>
    <body>
    <form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
    Cerca: <input type="text" name="s" /><br/>
    <input type="submit" value="Cerca" />
    </form>

    <?php

    if(isset($_GET['s'])) {
    $search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%".mysql_real_escape_string($_GET['s'])."%'");
    $total = mysql_num_rows($search);
    if(
    $total == 0){
    echo
    "Non è stato trovato nessun risultato";
    }else {
    $value = $_GET['s'];
    $nvalue = "<strong>".$value."</strong>";

    echo
    "Termine della ricerca: <b>".$value."</b><br /><br />";

    while(
    $r = mysql_fetch_array($search)) {
    if(
    strpos($r['art_articolo'],$value)>50)
    $cc = "... ". str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),strpos($r['art_articolo'],$value)-50,150));
    else
    $cc = str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),0,150));
    }
    }
    ?>
    </body>
    </html>
    Prova a postare il file config.php

  20. #20
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    cosi mi da errore alla fine
    Parse error: syntax error, unexpected $end in /membri/palla000/cerca.php on line 37 che è l'ultima riga non capisco cosa è...

  21. #21
    Guest

    Predefinito

    Mi sono scordato di chiudere una parentesi
    metti } prima di ?>

  22. #22
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    ok ora va

    ho provato a levare la funzione che mi hai detto tu e non mi da lo stesso risultati
    Ultima modifica di palla000 : 31-03-2009 alle ore 19.11.18

  23. #23
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    ciao di nuovo ho trovato l'errore della pagina e ora funziona... solo che con la funzione che mi hai dato (stoner) non mi stampa niente però non dice che non ha trovato risultati perciò l'errore sta nel tuo miscuglio di informazioni...

    p.s. scusate il doppio post ma così il topic non andrebbe tra quelli non letti

  24. #24
    Guest

    Predefinito

    Che tipo di errore hai trovato????

    P.S.
    Citazione Originalmente inviato da palla000 Visualizza messaggio
    p.s. scusate il doppio post ma così il topic non andrebbe tra quelli non letti
    Per questo non è consentito fare UP!

  25. #25
    Guest

    Predefinito

    Se non stampi quello che imposti è normale che non funziona :D
    Codice PHP:
    <?php
    include("config.php");
    ?>

    <html>
    <head>
    <title>Cerca</title>
    </head>
    <body>
    <form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
    Cerca: <input type="text" name="s" /><br/>
    <input type="submit" value="Cerca" />
    </form>

    <?php

    if(isset($_GET['s'])) {
    $search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%".mysql_real_escape_string($_GET['s'])."%'");
    $total = mysql_num_rows($search);
    if(
    $total == 0){
    echo
    "Non è stato trovato nessun risultato";
    }else {
    $value = $_GET['s'];
    $nvalue = "<strong>".$value."</strong>";

    echo
    "Termine della ricerca: <b>".$value."</b><br /><br />";
    $out = "";
    while(
    $r = mysql_fetch_array($search)) {
    if(
    strpos($r['art_articolo'],$value)>50)
    $cc = "... ". str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),strpos($r['art_articolo'],$value)-50,150));
    else
    $cc = str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),0,150));

    $out.=$cc;
    }
    echo
    $out;
    }
    ?>
    </body>
    </html>

  26. #26
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    giusto che idiota... grazie ora funziona perfettamente!!! grazie!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •