Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87

    Motore Ricerca php con ricerca fulltext

    Salve raga, mysql non è proprio il mio forte ho difficoltà con le join e con le ricerche fulltext

    ho realizzato un sito dove esistono 2 tabelle:

    codice:
    tabella utenti:    
    campi ( id, nome, cognome, citta, regione, data_nascita, data_registrazione, data_ultima_modifica, email, password )
    
    tabella annunci_attivi:
    campi (id, id_utente, data_inserimento, titolo, descrizione, prezzo, nome_foto, dimensione_foto)
    Il mio obbiettivo è quello di creare un motore di ricerca degli annunci inseriti tramite un semplice form con i seguenti input

    Codice PHP:
    <form name="cerca_annunci" action="cerca_annunci.php" method="post" >
    <
    input type="text" name="parola_annuncio" size="40" />
    <
    select name="categoria" >..............</select>
    <
    select name="modprovincia" >
    <
    option value="Tutte le provincie">Tutte le provincie</option>
    <
    option value="agrigento">Agrigento</option>
    ......
    </
    select>
    <
    select name="modregione" >
    <
    option value="Tutta Italia">Tutta Italia</option>
    <
    option value="abruzzo">Abruzzo</option>
    ......
    </
    select>
    <
    input name="cerca_annuncio" type="submit" value="  cerca" title="cerca annuncio" width="89" height="17">        
    </
    form
    e fin qui ci siamo, i problemi li incontro quando mi trovo nella pagina:
    cerca_annunci.php

    ecco il codice

    Codice PHP:
    <?php
    //ottieni risultati dal post
    $parola_annuncio mysql_real_escape_string($_POST['parola_negozio']);
    $categoria_annuncio mysql_real_escape_string($_POST['categoria']);
    $citta_annuncio mysql_real_escape_string($_POST['modprovincia']);
    $regione_annuncio mysql_real_escape_string($_POST['modregione']);

    //situazione in cui tutti i campi del form vengono compilati
    $query_cerca_annunci mysql_query("SELECT *, MATCH(titolo, descrizione) AGAINST('$parola_annuncio') as score FROM annunci_attivi 
    WHERE MATCH(titolo, descrizione) AGAINST('MYSQL') ORDER BY& score DESC"
    );

    //se la query funziona
        
    if($query_cerca_annunci){
            
    $conta_righe_annunci_trovati mysql_num_rows($query_cerca_annunci);
        }
        
    ecc ecc...............
    ?>
    così facendo però il motore di ricerca seleziona soltanto gli annunci a seconda della parola chiave che si inserisce nel campo text, mntre io vorrei che effettui ricerche anche in base alla categoria alla città e alla regione, non so come muovermi con le ricerche fulltext aiutatemi come posso modificare la query?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    sono sconfortato, tutte queste visite e nessuna risposta, se mi sono espresso male fatemi capire dove

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    raga ho risolto il mio primo problema ( almeno credo )

    ho modificato la query in questo modo

    Codice PHP:
    //situazione in cui tutti i campi del form vengono compilati
    $query_cerca_annunci mysql_query("SELECT *, MATCH(titolo, descrizione, categoria, citta, regione) AGAINST('+$regione_annuncio +$citta_annuncio +$categoria_annuncio $parola_annuncio') as score FROM annunci_attivi WHERE MATCH(titolo, descrizione, categoria, citta, regione) AGAINST('+$regione_annuncio +$citta_annuncio +$categoria_annuncio $parola_annuncio') ORDER BY& score DESC"); 
    però così facendo ovvimamente non funziona perchè non ho ancora creato un join per collegare le due tabelle e come ho gia detto prima non ho capito bene come e dove piazzare il join

    ps: nel primo messaggio ho dimenticato di inserire nella tabella annunci il campo descrizione

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    up

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    continuo a non ricevere iuto da nessuno in ogni caso ho elaborato la seguente query, volevo sapere da qualcuno se questa è corretta:

    Codice PHP:
    //situazione in cui tutti i campi del form vengono compilati
    $query_cerca_annunci mysql_query("SELECT annunci_attivi.id_utente, annunci_attivi.titolo, annunci_attivi.descrizione, annunci_attivi.categoria, MATCH(annunci_attivi.titolo, annunci_attivi.descrizione, annunci_attivi.categoria) 
    AGAINST('+
    $regione_annuncio +$citta_annuncio +$categoria_annuncio $parola_annuncio' IN BOOLEAN MODE) 
    as score FROM annunci_attivi 
    INNER JOIN utenti ON annunci_attivi.id_utente = utenti.id
    WHERE MATCH(utenti.citta, utenti.regione) AGAINST('+
    $regione_annuncio +$citta_annuncio +$categoria_annuncio $parola_annuncio' IN BOOLEAN MODE) ORDER BY& score DESC"); 

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    per tutto il giorno ho chiesto aiuto senza nemmeno una risposta, ma non mi arrendo continuo a scrivervi i miei progressi:

    ho implementato in questo modo cerca_annunci.php

    Codice PHP:
    //ottieni risultati dal post
        
    $parola_annuncio mysql_real_escape_string($_GET['parola_annuncio']);
        
    $categoria_annuncio mysql_real_escape_string($_GET['categoria']);
        
    $citta_annuncio mysql_real_escape_string($_GET['modprovincia']);
        
    $regione_annuncio mysql_real_escape_string($_GET['modregione']);

        
    //situazione in cui tutti i campi del form vengono compilati
        
    $query_cerca_annunci mysql_query("SELECT annunci_attivi.id_utente, annunci_attivi.titolo, annunci_attivi.descrizione,     annunci_attivi.categoria, MATCH(annunci_attivi.titolo, annunci_attivi.descrizione, annunci_attivi.categoria) 
        AGAINST('+
    $regione_annuncio +$citta_annuncio +$categoria_annuncio $parola_annuncio' IN BOOLEAN MODE) 
        as score FROM annunci_attivi 
        INNER JOIN utenti ON annunci_attivi.id_utente = utenti.id
        WHERE MATCH(utenti.citta, utenti.regione) AGAINST('+
    $regione_annuncio +$citta_annuncio +$categoria_annuncio $parola_annuncio
        IN     BOOLEAN MODE) ORDER BY& score DESC"
    );

        
    //se la query funziona
            
    if($query_cerca_annunci){
                
    $conta_righe_annunci_trovati mysql_num_rows($query_cerca_annunci);
            
                if(
    $conta_righe_annunci_trovati 0){
            
                    
    $id_utenti_annunci = array();
                    
    $id_annunci = array();
                    
    $categorie_annunci = array();
                    
    $prezzi_annunci = array();
                    
    $citta_annunci = array();
                    
    $regioni_annunci = array();
                    
    $titoli_annunci = array();
                    
    $descrizioni_annunci = array();
        
                    
    $i 0;
                    while(
    $rows_annunci_trovati mysql_fetch_array($query_cerca_annunci)){
                        
    $i++;
                        
    $id_annunci[$i] = $rows_annunci_trovati['id'];
                        
    $categorie_annunci[$i] = $rows_annunci_trovati['categoria'];
                        
    $prezzi_annunci[$i] = $rows_annunci_trovati['prezzo'];
                        
    $citta_annunci[$i] = $rows_annunci_trovati['citta'];
                        
    $regioni_annunci[$i] = $rows_annunci_trovati['regione'];
                        
    $titoli_annunci[$i] = $rows_annunci_trovati['titolo'];
                        
    $descrizioni_annunci[$i] = $rows_annunci_trovati['descrizione'];                                        
                    }
                    
                echo 
    $citta_annunci[1];
                
                }else{
                    echo 
    'Nessun annuncio trovato';
                }
                
            }else{
                echo 
    'La query non è andata a buon fine';
            } 
    ed il risultato è sempre la query non è andata a buon fine

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    ho trovato questo errore

    Codice PHP:
    ORDER BYscore DESC
    non so come ci è finita adesso ho eliminato la "&",

    non so dirvi se la query è scritta bene so che non mi manda piu nel ramo else dove stampavo

    Codice PHP:
    echo 'La query non è andata a buon fine'
    so però che adesso mi da i seguenti errori:

    Codice PHP:
    NoticeUndefined indexid in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 76

    Notice
    Undefined indexcategoria in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 77

    Notice
    Undefined indexprezzo in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 78

    Notice
    Undefined indexcitta in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 79

    Notice
    Undefined indexregione in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 80

    Notice
    Undefined indexid in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 76

    Notice
    Undefined indexcategoria in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 77

    Notice
    Undefined indexprezzo in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 78

    Notice
    Undefined indexcitta in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 79

    Notice
    Undefined indexregione in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 80

    Notice
    Undefined indexid in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 76

    Notice
    Undefined indexcategoria in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 77

    Notice
    Undefined indexprezzo in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 78

    Notice
    Undefined indexcitta in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 79

    Notice
    Undefined indexregione in C:\EasyPHP\www\thesocialcommerce\cerca_annunci.php on line 80 
    credo che quando si effettua una join non si estrapolano i dati in questo modo

    Codice PHP:
    while($rows_annunci_trovati mysql_fetch_array($query_cerca_annunci)){ 
                        
    $i++; 
                        
    $id_annunci[$i] = $rows_annunci_trovati['id']; 
                        
    $categorie_annunci[$i] = $rows_annunci_trovati['categoria']; 
                        
    $prezzi_annunci[$i] = $rows_annunci_trovati['prezzo']; 
                        
    $citta_annunci[$i] = $rows_annunci_trovati['citta']; 
                        
    $regioni_annunci[$i] = $rows_annunci_trovati['regione']; 
                        
    $titoli_annunci[$i] = $rows_annunci_trovati['titolo']; 
                        
    $descrizioni_annunci[$i] = $rows_annunci_trovati['descrizione'];                                         
                    } 
    qualcuno sa come fare?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    Prova a sostituire i campi di questo mio motore di ricerca con i tuoi e mi sai dire se funziona...

    cerca.php

    Codice PHP:
    <?php

    $db_host 
    "localhost";
    $db_user "root";
    $db_password "root";
    $db_name "nome_db";

    //connetto il database

    $db mysql_connect($db_host$db_user$db_password) or die ('Errore durante la connessione');
    mysql_select_db($db_name$db) or die ('Errore durante la selezione del db');

    // recuperiamo il valore ricerca inviato con get

    $ricerca $_GET['ricerca'];

    // vediamo se è stato inviato, e quindi uguale a ok

    if ( $ricerca == 'ok' ) {

    // recuperiamo ora cerca inviato con post

    $cerca $_POST['cerca'];

    // vediamo se è stato compilato il campo

    if ( $cerca == TRUE && $cerca != "" ) {

    // ora vediamo se supera i tre caratteri

    if ( strlen($cerca) >= ) {

    // ora depuriamo la stringa da cercare sul database 

    $cerca =  mysql_escape_string(stripslashes($cerca)); 

    // ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi

    $query "SELECT * FROM
        annunci INNER JOIN regione ON (annunci.regioneid=regione.id )
        INNER JOIN provincia ON (annunci.provinciaid=provincia.id)
         INNER JOIN citta ON (annunci.cittaid=citta.id)
         INNER JOIN cliente ON (annunci.clienteid=cliente.id)
        
        WHERE id_annunci LIKE '%
    $cerca%'  OR name LIKE '%$cerca%' OR regione LIKE '%$cerca%' OR citta LIKE '%$cerca%' OR descrizione LIKE '%$cerca%' OR prezzo LIKE '%$cerca%' OR via LIKE '%$cerca%' "

    $risultato mysql_query($query) or die (mysql_error()); 

    $risposta mysql_query($query) or die ("Utilizza termini più specifici!");

    $dentro_la_querymysql_fetch_assoc($risposta);

    if ( 
    $dentro_la_query == TRUE ) {

    while(
    $rowmysql_fetch_assoc($risultato)) { 
    $click_annuncio $row['click_annuncio'];
    $id_annunci $row['id_annunci'];
     
      
    $descrizione substr($row['descrizione'], 050); 
      
    $mq $row['mq'];
      
    $prezzo $row['prezzo'];
      
    $tipologia $row['tipologia'];
        
    $sigla $row['sigla'];
      
      
    $name $row['name'];
       
    $locali $row['locali'];
      
    $via $row['via'];
      
    $citta $row['citta'];
      
    $user_name $row['user_name'];
      
    $user_email $row['user_email'];
       
    $condizioni $row['condizioni'];
        
    $regione $row['regione'];
         
    $tipo $row['tipo'];
          
    $condizioni $row['condizioni'];
           
    $logo_cliente $row['logo_cliente'];
             
      
       
    $nome_file $row['nome_file'];
      
    $tipo_file $row['tipo_file'];
      
    $dati_file $row['dati_file'];
      






    // stampiamo i nostri dati 


     
    echo" <table width='100%'>";
      echo
    " <tr>";
       echo
    " <p class='three'><td colspan='3'> <a href=\"http://localhost:8888/annunci/rannunci.php?id=$id_annunci\"/>$via,$citta,$name,$sigla,$regione</a></td>";
     echo
    " </tr>";
     echo
    " <tr>";
      echo
    "  <td width='14%' bgcolor='#f4f9fd'> <a href=\"http://http://localhost:8888/annunci/rannunci.php?id=$id_annunci\"/>[img]immagini1.php?id=$id_annunci[/img]</a></td>";
      echo
    "  <td width='45%' bgcolor='#f4f9fd'><table width='100%'>";
       echo
    "   <tr>";
        echo
    "    <td>$descrizione</td>";
        echo
    "  </tr>";
        echo
    "  <tr>";
          echo
    "  <td>$id_annunci</td>";
    echo
    "</tr>";
     echo
    "     <tr>";
        echo
    "    <td></td>";
        echo
    "  </tr>";
       echo
    " </table></td>";
      echo
    "  <td width='31%' bgcolor='#f4f9fd'>$logo_cliente
    Prezzo:
    $prezzo
    Mq:
    $mq
    Locali:
    $locali</p></td>";
      echo
    "</tr>";
    echo
    "</table>";




    } else {

    echo 
    "Nessun temine alla ricerca trovato";

    }


    } else {

    echo 
    "Devi inserire almeno 3 caratteri";

    }

    } else {

    echo 
    "Non hai compilato il modulo ricerca";

    }

    }

    ?>
    Form ricerca da integrare nelle tue pagine

    Codice PHP:
      <form action='cerca.php?ricerca=ok' method='POST'>





      <
    input type='text' tabindex='15' name='cerca' class='input' size="15" >
      
      
      </
    td>
                <
    td width="9%"><input type="image" src="immagini/trova.gif"  value='Cerca'

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    ti ringrazio per l'aiuto che mi hai dato, ma la mia viene chiamata da un form con un campo text e 3 campi select, se fosse stato come il tuo forse avrei avuto meno grattacapi

    inoltre preferisco non utilizzare LYKE ma MATCH e AGAINST

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    Okkk

    prova intanto la mia che ha il campo text e mi tira fuori i risultati necessari poi la estendi ..

    cmq come non detto

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.