Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    26

    Semplice motore di ricerca in database MYSql

    Salve a tutti.

    io ho questo script
    Codice PHP:
        <?php    
    if ($_POST['search']){
    if (!empty(
    $_POST['keywords'])) {
    $searchStr str_replace(" ""."htmlentities($searchStrENT_QUOTES));
    $searchStr $_POST['keywords'];
    if (
    ereg("^[a-zA-Z0-9' ]+$"$searchStr)) {

    mysql_connect($host,$user,$password)or die("non riesco a connettermi");
    mysql_select_db($database)or die("non riesco a selezionare il database");

    print 
    "

    Risultati per  \"
    $searchStr\"<hr>

    </p>"
    ;
    $keys explode(" "$searchStr);
    for (
    $x 0$x count($keys); $x++) {
    $querystr "SELECT * FROM articoli WHERE testo = \"$keys[$x]\" OR testo LIKE \"%$keys[$x]%\"";
    $result mysql_query($querystr);
    if (
    $frow mysql_fetch_array($result)) {
    $found true;
    do {
    //echo "" . $frow["titolo"] . " di ".$frow["autore"] . "

     
    Url di download del driver...   ".$frow["url"]."
    </p>";
    echo "
    <table border='0' cellpadding='0' height='30' cellpadding='20'>";
    echo "
    <td bgcolor='#bfbbbb'>" . $frow["titolo"] . "</td>";
    echo "
    <td bgcolor='#a79c9c'>" . $frow["autore"] . "</td>";
    echo "
    <td bgcolor='#bfbbbb'>" . $frow["OS"] . "</td>";
    echo "
    <td bgcolor='#bfbbbb'>" . $frow["url"] . "</td>";
    echo "
    </table>";
    } while (
    $frow = mysql_fetch_array($result));
    }
    }
    if (!
    $found) {
    print("
    Nessuna corrispondenza trovata
    ");
    }

    }
    else {
    print("
    La stringa di ricerca contiene caratteri non permessi
    ");
    }
    }
    else {
    print("
    Nessuna stringa di ricerca rilevata
    ");
    }
    }
    ?>
    Fa la ricerca in un database MYSQL nel campo Titolo di una tabella. Ora il mio problema è che se inserisco uno spazio vuoto nel campo di ricerca , mi mostra tutto il contenuto del mio database, e se inserisco nel campo di ricerca 2 parole divise da uno spazio ripropone nuovamente tutto il database.

    ESEMPIO

    Nel DB esiste una tabella con 3 campi " ID , NOME , MATRICOLA "
    nel database sono presenti 5 righe:

    1 MARIO ROSSI 1234
    2 MARIA ROSSI 1235
    3 FRANCESCA ROSSI 1236

    Se faccio la ricercha di MARIO, ottengno " 1 MARIO ROSSI 1234 "
    ma se cerco MARIO (spazio) , o MARIO (spazio) ROSSI, ottengo :
    1 MARIO ROSSI 1234
    2 MARIA ROSSI 1235
    3 FRANCESCA ROSSI 1236

    Questo perchè presumo che l'algoritmo in mio possesso interpreti lo SPAZIO come un carattere da cercare nel database, e trovandolo in tutti i record li ripropone .. come faccio a far capire dal motore che MARIO ROSSI deve essere trasformato in MARIO+ROSSI ? e quindi visualizzare solo la riga inerente a MARIO ROSSI xD.

    Vi ringrazio per l'eventuale aiuto e spero di essere stato chiaro
    Ciao

  2. #2
    certo, il codice che utilizzi non fa una ricerca esatta bensì controlla per ogni termine inserito, prendendo come separatore proprio lo spazio, se esiste una corrispondenza sulla parola esatta e sulla porzione della parola (OR testo LIKE \"%$keys[$x]%\") questo significa che se cerchi mario ross ottieni lo stesso risultato di mario rossi o di mario ros

    per fare la ricerca su una frase piuttosto che su una lista di termini devi levare il ciclo for che gira sui termini e fare una query secca con where testo='frase_passata'
    Ubuntu rulez!! :P

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    26
    Grazie mille ^^

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.