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 2006
    Messaggi
    69

    motore di ricerca con tre form

    ciao a tutti
    sto cercando di realizzare un motore di ricerca per il mio sito.
    ho tre form che mi inviano variabili (esempio: nome, citta, età)
    se compilati tutti mi prende dal db i record con i tre parametri.
    se ne compilo solo 2 mi prende quelli con i due parametri.
    se ne compilo uno solo mi prende quelli con quel parametro.
    se non compilo nulla mi prende tutto.
    (tipo ricerca avanzata presente in molti motori di ricerca)

    avevo provato con:
    <?
    if(isset($nome)){ operazione }
    ?>
    <?
    if(isset($citta)){ operazione }
    ?>
    <?
    if(isset($eta)){ operazione }
    ?>
    <?
    if( $nome == "" and $citta == "" and $eta == "" ){ operazione }
    ?>
    ma logicamente non va bene perche compilando i tre campi mi restituisce tre volte lo stesso record e tutti gli altri che contengono almeno uno di quei valori.

    come posso reimpostare lo script?
    ciao e grazie

  2. #2
    Esempio
    Codice PHP:
    $nome = ...
    $citta = ...
    $eta = ...

    $result mysql_query("SELECT * FROM tabella WHERE nome LIKE '%$nome%' OR citta LIKE '%$citta%' OR eta LIKE '%$eta%'");
    while (
    $row mysql_fetch_assoc($result)) {
       
    $nome $row['nome'];
       
    $citta...
       
    $eta...

       echo 
    ".....";


  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    69
    grazie per aver risposto. ho provato a fare come dici tu ma adesso mi visualizza sempre tutti i record. ecco cosa ho fatto


    codice:
    <?
    $numero_pratica = $_POST['id'];
    $cognome = $_POST['cognome'];
    $stato = $_POST['stato'];
    $nominativo = $_POST['inserito_da'];
    $db= mysql_connect("xxxxxxxxxx","xxxxxxxxx","xxxxxxxxx");
    mysql_select_db("xxxxxxxxxxxxx",$db);
    if( $nominativo == "giulio cesare"){
    $result = mysql_query("SELECT id, dr_cognome, dr_nome, tipologia, valore_bene_servizio, rate, stato, inserito_da FROM pratica WHERE id LIKE '%$numero_pratica%' OR dr_cognome LIKE '%$cognome%' OR stato LIKE '%$stato%'");
    }
    else { $result = mysql_query("SELECT id, dr_cognome, dr_nome, tipologia, valore_bene_servizio, rate, stato, inserito_da FROM pratica WHERE id LIKE '%$numero_pratica%' OR dr_cognome LIKE '%$cognome%' OR stato LIKE '%$stato%' AND inserito_da = '$nominativo'");}
    while ($row = mysql_fetch_assoc($result)) { 
    ?>
    <TD style=height="12"><font color="#0000FF"><? echo $row[id];?></font></TD>
    <td style=height="12"><font color="#0000FF"><? echo $row[dr_cognome];?></font></td>
    <td style=height="12"><font color="#0000FF"><? echo $row[dr_nome];?></font></td>
    <td style=height="12"><font color="#0000FF"><? echo $row[stato];?></font></td>
    <td style=height="12"><font color="#0000FF"><? echo $row[tipologia];?></font></td>
    <td style=height="12"><font color="#0000FF"><? echo $row[valore_bene_servizio];?></font></td>
    <td style=height="12"><font color="#0000FF"><? echo $row[rate];?></font></td>
    </tr>
    <?
    }
    mysql_close($db);
    }
    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    69
    ho sostituito OR con AND e sembra funzionare adesso. adesso provo meglio
    grazie per l aiuto

  5. #5
    ma se provassi a fare le cose semplici invece?!

    codice:
    <?PHP
    
        $where_clausole = "";
        if ( isset($_POST['nome']) ) {
            $nome = $_POST['nome'];
            $where_clausole .= "AND nome LIKE '%$nome%' ";
        }
    
        if ( isset($_POST['citta']) ) {
            $citta = $_POST['citta'];
            $where_clausole .= "AND citta LIKE '%$citta%' ";
        }
        
        if ( isset($_POST['eta']) ) {
            $eta = $_POST['eta'];
            $where_clausole .= "AND eta LIKE '%$eta%' ";
        }
        
        $idconnessione = mysql_connect('localhost', 'username', 'password');
        mysql_select_db('dbname');
        
        $query = "
            SELECT *
            FROM pratica
            WHERE id > 0 $where_clausole
        ";
        $idquery = mysql_query($query, $idconnessione)
        
        while ( $row = mysql_fetch_array($idquery, MYSQL_ASSOC) ) {
            // ...
        }
        
    ?>
    ci ho messo, nella clausola WHERE, anche "id > 0" in modo da poterci aggiungere con più facilità il "$where_clausole" costruito...

    cmq se non sbaglio difficilmente un motore di ricerca ti fà cercare qualcosa se non specifici niente dato che potrebbero esserci 100 milioni di tuple da cercare...e non sarebbe positivo

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    69
    è la stessa cosa che ho detto anche io al cliente, ma lui lo vuole cosi

    cmq c è differenza tra il primo metodo e quello che mi hai scritto tu?

  7. #7
    si perchè il mio effettua 1 sola operazione al database che a seconda dei campi compilati estrare il risultato giusto.

    Se inoltre dovesse dare qualche campo doppio fai
    codice:
    SELECT DISTINCT ...
    FROM ...
    WHERE ...

  8. #8
    Nel "secondo" metodo la ricerca avviene solo se quel campo è specificato, ma il risultato dello script è lo stesso. Il numero di righe di codice è però maggiore, mettiti d'accordo con il tuo cliente visto che ti ha posto vincoli a mio parere controproducenti

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    69
    capito. grazie ad entrambi per l aiuto.
    un ultima richiesta:
    nei vostri script vedo l utilizzo di LIKE. ho cercato nel manuale online di php questa parola ma non l ho trovata. in breve cosa fa?

  10. #10
    Dovresti cercare nel manuale MySQL :P

    Logicamente è simile all'operatore == (uguale)

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.