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

    problema con motore di ricerca

    ciao,

    sto cercando di sistemare un piccolo motore di ricerca e ho questo problema.

    quando inserisco nel campo di ricerca più di una parola tipo "cane gatto", mi restituisce l'errore che la stringa contiene caratteri non compatibili per la ricerca.

    il codice:

    Codice PHP:
    if ($_POST['search'])
    {  
    if (!empty(
    $_POST['keywords'])) 
    {   
    $searchStr $_POST['keywords'];   
    if (
    ereg("^[0-9a-zA-Zà-ù&]+$"$searchStr)) 
    {  print 
    "<h1>Risultati per \"$searchStr\":</h1> <
    div style=\"margin-top:50px\"> 
    <ul class=\"motore\"> "
    ;    

    $keys explode(" "$searchStr); 
    for (
    $x 0$x count($keys); $x++) 
    {    
    $sql "SELECT * FROM tbl_servizi  WHERE note LIKE '%$keys[$x]%'               
              OR nome_servizio LIKE '%
    $keys[$x]%'                
              OR sottotitolo LIKE '%
    $keys[$x]%' "

  2. #2
    lo spazio non è compreso nella regex
    inoltre erg è deprecata (mi are che nelle ultimissime versioni di php non può essere più utlizzata)

  3. #3
    grazie,

    ho modificato la regex in questo modo
    if (preg_match("/^[0-9a-zA-Z\-\.àèìòùÀÈÌÒÙ'& ]+$/", $searchStr))

    e funziona...solo che adesso ho un altro problema.
    se inserisco nel campo di ricerca 2 parole tipo sempre il solito "cane gatto", i risultati mi vengono stampati su colonne diverse, cioè prima mi stampa tutti i risultati per "cane" e poi sotto quelli per "gatto"..perchè?

    a me serve che mi stampi tutto in un unica lista, cioè tutti i risultati che contengono la parola "cane gatto"

  4. #4
    ... codice...

  5. #5
    questo è il codice praticamente completo

    Codice PHP:
    <?php  if ($_POST['search'])
    {  
    if (!empty(
    $_POST['keywords'])) 
    {   
    $searchStr $_POST['keywords'];   
    if (
    preg_match("/^[0-9a-zA-Z\-\.àèìòùÀÈÌÒÙ'& ]+$/"$searchStr)) 
    {  
    print 
    "<h1>Risultati per \"$searchStr\":</h1> <div style=\"margin-top:50px\"> 
    <ul class=\"motore\"> "
    ;    $keys explode(" "$searchStr); for ($x 0$x count($keys); $x++) {    
    $sql "SELECT * FROM tbl_servizi WHERE note LIKE '%$keys[$x]%'               
              OR nome_servizio LIKE '%
    $keys[$x]%'                 
              OR sottotitolo LIKE '%
    $keys[$x]%' ";                                                                                                                                                                                                                                                
    $result dbQuery($sql) or die('Si è verificato un errore' mysql_error());   
     if (
    $frow mysql_fetch_array($result)) 
    {  
    $found true;  
    do {  echo
    "[*]<a href=\"index.php?id_ser=".$frow["id_servizio"]."\">"$frow["nome_servizio"] ."</a>\n";  

    while (
    $frow mysql_fetch_array($result));   
    print(
    "<input style=\"margin-top:20px\" name=\"nuova_ricerca\" type=\"button\" id=\"btnModifyProduct\" value=\"Nuova ricerca\" onclick=\"window.location.href='index.php';\"/>");   

    }

  6. #6

  7. #7
    Evita di usare il LIKE, usa il MATCH AGAINST.

    http://www.codicefacile.it/tutorials...text/category/
    Perchè uso Maxthon? | Mi piace questa chat

  8. #8
    grazie per il link.

    però non ho capito una cosa,
    visto che come condizioni di ricerca ho messo "cane gatto", e sono queste le 2 parole che devono essere trovate, da quanto ho capito devo settare AGAINST ('+cane + gatto'),
    ma come lo uso all'interno di '%$keys[$x]%' ?

    grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.