Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 44
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343

    problemino con motore di ricerca :(

    Ciao a tutti, chi mi puo' aiutare plesa...

    Ho sul mio sito un motore di ricerca che funziona correttamente se interrogo una tabella, ora io vorrei fargli interrogare più tabelle del db ma mi da errore

    Column 'tipo' in where clause is ambiguous

    Le ho provate tutte ma niente, vi posto lo script se qualcuno sa dove sbaglio e mi aiuta grazie mille

    Modulo di ricerca:

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





      <
    input type='text' tabindex='15' name='cerca' class='input' size="15" >
      

      <
    input type="image" src="immagini/trova.gif"  value='Cerca'>

            </
    form

    Motore che cerca e restituisce i link :



    Codice PHP:
    <?php

    // connettiamoci il nostro database

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

    //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 antipasti, primo, secondo WHERE tipo LIKE '%$cerca%' OR titolo LIKE '%$cerca%' OR descrizione LIKE '%$cerca%' OR ingredienti LIKE '%$cerca%' OR breve LIKE '%$cerca%' OR title LIKE '%$cerca%' OR ricerca 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)) { 


    $tipo $row['tipo'];
    $foto $row['foto'];

    $ricerca $row['ricerca'];


    // stampiamo i nostri dati





    echo "<a href=\"http://www.cites.com/testcerca_ricette.php?id=$id\"/>$foto</a>
    "


    echo 
    "<a href=\"http://www.cites.com/testcerca_ricette.php?id=$id\"/>$ricerca</a>
    "

    echo 
    "Descrizione Breve : $tipo
    "
    ;


    }

    } else {

    echo 
    "Nessun temine alla ricerca trovato";

    }


    } else {

    echo 
    "Devi inserire almeno 3 caratteri";

    }

    } else {

    echo 
    "Non hai compilato il modulo ricerca";

    }

    }

    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    ciao
    1.ritengo che non serva mandare ricerca= 0k
    2. invece di post potresti usare get per la variabile cerca...pensaci se tu in futuro vuoi puntare su categorie degli articoli puoi sfruttare ilmotore di ricerca per la ricerca in categorie..
    esempio:
    categoria: chimica
    potresti fare un link del genere
    <a href=ricerca.php?cerca=chimica>chimica</a>
    3. secondo me dovresti affidare la ricerca a match against invece di like...
    cioè Where match(campo su cui ricercare) against(variabile passata con il form)
    per fare questo devi indicizzare in modo fulltext il campo da ricercare....
    quindi ricapitoliamo
    io farei cosi
    nel form al posto di post metti get
    Codice PHP:
    $cerca$_GET['cerca'];
    if (isset(
    $cerca)){
    allora fai la ricerca

    mettici l'index fulltext ai campi a cui sottoporre la ricerca e usa match against

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    CIao E grazie mille ...

    Intendi qualcosa di simile !?!?!'

    Codice PHP:
    <?php  // connettiamoci il nostro database  
    $db_host "localhost"
    $db_user "";
     
    $db_password ""
    $db_name ""

     
    //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$_GET['cerca']; if (isset($cerca)){ allora fai la ricerca }   $cerca =  mysql_escape_string(stripslashes($cerca)); 
     
     
    // ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi  $query = "SELECT * FROM antipasti, primo, secondo WHERE  match (tipo) agaist (tipo) ";

    $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)) {    $tipo $row['tipo']; $foto $row['foto'];  $ricerca $row['ricerca'];

       
    // stampiamo i nostri dati     

     
    echo "<a href=\"http://www.cites.com/testcerca_ricette.php?id=$id\"/>$foto</a>
    "
    ;  

     echo 
    "<a href=\"http://www.cites.com/testcerca_ricette.php?id=$id\"/>$ricerca</a>
    "
    ;

      echo 
    "Descrizione Breve : $tipo
    "
    ;   

     } else {  echo 
    "Nessun temine alla ricerca trovato";  
    }   
    } else {  echo 
    "Devi inserire almeno 3 caratteri"
     } 
    } else {  echo 
    "Non hai compilato il modulo ricerca";  

     } 
     
    ?>


    Potresti essere più chiaro ?!?!


    2. invece di post potresti usare get per la variabile cerca...pensaci se tu in futuro vuoi puntare su categorie degli articoli puoi sfruttare ilmotore di ricerca per la ricerca in categorie.. esempio: categoria: chimica potresti fare un link del genere <a href=ricerca.php?cerca=chimica>chimica</a>

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    Codice PHP:
    //vedi se cerca è settato con isset 
    if(isset($_GET['cerca'])){
    if(
    strlen($cerca) >= ) {

    //qui puoi mettere i tuoi controlli


     
    $cerca =  mysql_escape_string(stripslashes($cerca)); 
     
     
    // ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi  $query = "SELECT * FROM antipasti, primo, secondo WHERE  match (tipo) agaist ($cerca) ";

    $risultato mysql_query($query) or die (mysql_error());  
    if(
    mysql_num_rows($risultao) > 0){
    //estrai i record qui
    }
    else{
    echo 
    "nessun risultato trovato";
    }
    }
    else{
    echo 
    "devi inserire termini con almeno 3 caratteri";
    }
    else{
    echo 
    "non hai compilato il modulo ricerca";

    in linea di massima una cosa cosi

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    nella fretta non ho controllato la sintassi potrei aver dimenticato parentesi graffa da qualche parte

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    io credo che l'errore sia nel from..me ne sono reso conto ora che ho letto il codice un pò più piano

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    Codice PHP:
    <?php

    // connettiamoci il nostro database

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

    //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');



    $cerca trim($_GET['cerca']);

    // vediamo se è stato compilato il campo
    if(isset($cerca)){
    if(
    strlen($cerca) >= 3){
    $cerca =  mysql_escape_string(stripslashes($cerca));
    $querymysql_query("SELECT * FROM antipasti,primo,secondo WHERE MATCH (inserisci qui tutti i nomi dei campi della tabella separati da virgola) AGAINST ($cerca) ");
    if(
    mysql_num_rows($query) > 0){
    //qui estrai i dati 
    }
    else{
    echo 
    "nessun risultato trovato";
    }
    }
    else{
    echo 
    "Devi inserire almeno 3 caratteri";
    }
    }
    else{
    echo 
    "devi compilare il modulo";
    }
    diciamo che sommariamente questo potrebbe essere il codice
    scusa se ho scritto sessanta messaggi
    se i campi delle tabelle sono gli stessi potresti fare un'unica tabella in cui inserire antipasti primi e secondi...
    in quest'unica tabella aggiungi un campo text categoria per identificare i piatti come antipasti primi e secondi...

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    Figurati, è già tanto che mi aiuti .....
    2 cose ..

    La prima perchè dici che l'errore sta nel form ?!??!

    la seconda mi sa che mi renderei la vita più facile tentando la strada dell'unica tabella con il campo test categoria.

    se i campi delle tabelle sono gli stessi potresti fare un'unica tabella in cui inserire antipasti primi e secondi... in quest'unica tabella aggiungi un campo text categoria per identificare i piatti come antipasti primi e secondi...
    +

    tra l'altro questo è lo script originale ma a me serve per un'altra cosa ....

    Giusto perchè sei gentilissimo sarò molto più chiaro ....

    Io devo fare una tabella ho più tabelle dove ho dentro tutte le città più importanti d'italia e all'interno un nome una via una tipologia.

    Avevo inzialmente pensato di creare tante tabelle dove il motore doveva andare a cercare ...

    Ma dopo la tua riflessione sto pensando di fare una tabella unica ( potrei chiamarla città ) con all'interno tutti i campi ( città più importanti d'italia e all'interno un nome una via una tipologia ) e quando il mio motore che solitamente è molto chirurgico va a metchare dovrebbe trovarmi in base a come si dgt es citta, pippo, pesce dovrebbe matcarmi solo quei dati ...

    Sbaglio qualcosa oppure secondo te potrebbe andare !??!??!?'

  9. #9
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    Originariamente inviato da amphioxus
    se i campi delle tabelle sono gli stessi potresti fare un'unica tabella in cui inserire antipasti primi e secondi...
    in quest'unica tabella aggiungi un campo text categoria per identificare i piatti come antipasti primi e secondi...
    Secondo me dovresti NORMALIZZARE il DB e mettere un campo INT per identificare le categorie.
    Poi crei un'altra tabella dove inserisci le categorie stesse, e RELAZIONI le tabelle in base a quel numero. esempio:
    tabella portate:
    nome_portata - id_relazione
    pasta con le sarde - 1
    risotto alla milanese - 1
    riso in bianco - 1
    carne alla brace - 2
    insalatina triste - 3

    categorie:
    nome_categoria - id_portata
    primi piatti - 1
    secondi piatti - 2
    contorni - 3

    in questo modo potrai con una semplice join sapere SEMPRE e SENZA errore e in maniera PULITA cosa hai nel DB.. e se cambierai la dicitura "primi piatti" in PRIMI" questo avrà effetto su tutto il DB, ovviamente senza dover aggiornare ogni record che ha quel campo.
    in più è elastico perchè ti permette di aggiungere alla tabella ad esempio la frutta.. certo inizialmente sarà più tosta da gestire, ma avrai moooolte soddisfazioni quando l'avrai "recepita" perchè potrai utilizzarla in mille modi
    ah!!! e altrettanto OVVVIAMENTE tutti i piatti devono stare in una tabella sola..

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    secondo me basta un'unica tabella e aggiungere un campo categoria senza scomodare join ma va bene anche l'idea di telegio
    comunque pensa che dovresti indicizzare tante tabelle e la query si allunga come tempi perchè deve fare la ricerca su più tabelle

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.