Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it L'avatar di noos
    Registrato dal
    Jul 2003
    Messaggi
    1,001

    motore di ricerca su 5 tabelle

    scusatemi se posto questo 3d, anche se l'argomento è stato postato 1000 volte, ma non ho trovato niente che facesse al caso mio nei vari thread del forum

    in pratica devo creare un motore di ricerca con un campo input e un menù a tendina dove seleziono l'area x la ricerca, questa deve avvenire su 5 tabelle del mio db

    ragazzi non so da dove iniziare x creare questo motore, ho impostato solo la parte statica del form

    vi chiedo un aiuto, anche postare un esempio da poter partire

    aiuto!

    grazie fin da ora

    ciao
    Vola solo chi ha il coraggio di farlo

  2. #2

  3. #3
    ciao! ma la ricerca la devi svolgere su 5 tabelle contemporaneamente oppure solo in una, magari quella scelta dal menù a tendina?

  4. #4
    Utente di HTML.it L'avatar di noos
    Registrato dal
    Jul 2003
    Messaggi
    1,001
    si la ricerca deve svolgersi sulle 5 tabelle
    Vola solo chi ha il coraggio di farlo

  5. #5
    ok, allora, a questo punto bisognerebbe sapere se tu devi cercare una parola chiave in tutte e 5 le tabelle e da ogni tabella estrai un set di risultati, oppure se esegui la ricerca nella prima tabella poi se non trova nulla passa alla seconda e così via fino alla quinta. Insomma, trovi 5 risultati in 5 tabelle oppure un risultato su 5 tabelle?

  6. #6
    Utente di HTML.it L'avatar di noos
    Registrato dal
    Jul 2003
    Messaggi
    1,001
    5 risultati in 5 tabelle

    ti faccio un esempio

    inserisco le caratteristiche di un tipo di computer

    in una tabella inserisco il tipo di hardware e il sistema operativo, in una seconda inserisco il softaware installato, la versione ecc e così via x tutte le 3 tabelle che rimangono

    nella pagina ricerca, nel campo input, inserisco ad esempio il sistema operativo

    nella pagina di ricerca dovrò avere tutte le macchine che avranno quel sistema operativo
    Vola solo chi ha il coraggio di farlo

  7. #7
    ok, credo di aver capito, tempo fa ho elaborato una cosa simile, insieme ad altri utenti, ci lavoro un po' e mi rifaccio vivo...

  8. #8

    Problema risolto!

    Ciao! Allora, ti spiego tutto: lo script è formato da tutti passaggi semplici concatenati in maniera logica; ti faccio presente che io di mestiere faccio il muratore, specializzato in impermeabilizzazioni di tetti e lattoneria, quindi la mia conoscenza elementare di php è relegata alla lettura di qualche libro/manuale durante le domeniche estive al mare. Se in futuro troverai il modo di elaborare lo script con formule più dirette, ben venga.
    1) MySQL:
    ho creato 3 tabelle +1 (tu ne farai 5+1): NOMI (id, valori(=> nomi di persone)), CAPELLI (id, valori(=> neri, castani, ecc...)), OCCHI (id, valori(=>azzurri, verdi, ecc...)). L'ultima tabella è di riepilogo ELENCO (id, id_nomi, id_capelli, id_occhi). Per ogni campo di ogni riga di questa tabella, è presente un valore id corrispondente alla propria "caratteristica" nella propria tabella di riferimento. Tanto per intenderci: non avrai (ANDREA, CASTANI, VERDI), ma (1, 2, 2). Questo sistema ha uno svantaggio: nella tabella elenco, quando inserisci i dati non devi inserire direttamente le caratteristiche ma il loro id di riferimento nella propria tabella di dettaglio; ma ha un grande vantaggio: se devi cambiare/modificare un valore, basta andare nella propria tabella di dettaglio e modificare una singola vocina che, al contempo modifica tutte le caselle della tabella ELENCO che hanno lo stesso id nello stesso campo.
    2) FORM:
    ho creato un form dinamico con 3 caselle di riepilogo a discesa. I dati mostrati in ogni casella li prendo direttamente dal DB, senza quindi inserirli nel html della pag. Ho settato # come valore NULL di ogni menù. La pagina in questione l'ho chiamata provamodulo.php. Ecco il codice:
    Codice PHP:
    <html>
    <head>
    <meta name="GENERATOR" content="Microsoft FrontPage 6.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Nuova pagina 1</title>
    </head>
    <?php
    require "ezine_db.inc.php";
    $ezine_db ezine_connecte_db();
    $nomiel = @mysql_query('SELECT id,dati FROM nomi');
    $capelliel = @mysql_query('SELECT id,dati FROM capelli');
    $occhiel = @mysql_query('SELECT id,dati FROM occhi');
    ?>
    <body>
    <FORM target="_blank" ACTION="pag_search.php" Method="GET">
        

    <select size="1" name="nomi">
        <option selected value=#>-</option>
    <?php
        
    while ($n_el mysql_fetch_array($nomiel)) {
            
    $n_id $n_el['id'];
            
    $n_dt htmlspecialchars($n_el['dati']);
            echo 
    "<option value='$n_id'>$n_dt</option>\n";
                    }
    ?>
        </select></p>
        

    <select size="1" name="capelli">
        <option selected value=#>-</option>
    <?php
        
    while ($c_el mysql_fetch_array($capelliel)) {
            
    $c_id $c_el['id'];
            
    $c_dt htmlspecialchars($c_el['dati']);
            echo 
    "<option value='$c_id'>$c_dt</option>\n";
                    }
    ?>
        </select></p>
        

    <select size="1" name="occhi">
        <option selected value=#>-</option>
    <?php
        
    while ($o_el mysql_fetch_array($occhiel)) {
            
    $o_id $o_el['id'];
            
    $o_dt htmlspecialchars($o_el['dati']);
            echo 
    "<option value='$o_id'>$o_dt</option>\n";
                    }
    ?>
        </select></p>
        

    <input type="submit" value="invia" name="invia"><input type="reset" value="Reimposta" name="B2"></p>
    </form>
    </body>
    </html>
    3) PHP
    ...tralasciamo la parte di connessione al DB e di gestione degli errori di connessione...
    Passiamo al settaggio delle variabili inviate dal FORM alla pag_search.php
    Codice PHP:
    //preparazione variabili
    $nm=(isset($_REQUEST['nomi'])) ? $_REQUEST['nomi'] : "";
    $cp=(isset($_REQUEST['capelli'])) ? $_REQUEST['capelli'] : "";
    $oc=(isset($_REQUEST['occhi'])) ? $_REQUEST['occhi'] : ""
    ora inserisco i parametri inviati in un array, definendo il comportamento da eseguire per ogni parametro inviato. Se scelgo un Nome devo cercare nella tabella ELENCO, alla colonna id_nomi, e così via:
    Codice PHP:
    $ext=array(); 
    if (isset(
    $_REQUEST['nomi']) && (!empty($_REQUEST['nomi'])) && ($nm != '#')) $ext['0']=" elenco.id_nomi LIKE '$nm'"
    if (isset(
    $_REQUEST['capelli']) && (!empty($_REQUEST['capelli'])) && ($cp != '#')) $ext['1']=" elenco.id_capelli LIKE '$cp'"
    if (isset(
    $_REQUEST['occhi']) && (!empty($_REQUEST['occhi'])) && ($oc != '#')) $ext['2']=" elenco.id_occhi LIKE '$oc'"
    Ora creo due query di ricerca, una funziona se tutti i parametri sono inviati # cioè vuoti. In questo caso hai due scelte o trovi tutti i risultati oppure echo"è necessario selezionare un parametro"... fai tu. L'altra funziona se anche solo un parametro è stato inviato dal FORM e, con il comando implode, recupera dall'array i parametri inviati e li esegue, ognuno nella sua colonna di pertinenza della tabella ELENCO.
    Codice PHP:
    if ($nm == '#' && $cp == '#' && $oc =='#') { 
    $stringa2 NULL;
    $stringa1 "SELECT * FROM elenco ORDER BY id"
    }

    if (
    $nm != '#' OR $cp != '#' OR $oc != '#') { 
    $stringa1 NULL;
    $stringa2 "SELECT * FROM elenco WHERE (".implode(" AND ",$ext).")";

    Ora con un semplice ciclo if, recupero quale delle due query è attiva e per sicurezza annullo l'altra:
    Codice PHP:
    if (!empty($stringa1)) { 
    $stringa2 NULL;
    $ris = @mysql_query($stringa1);
    } else if (!empty(
    $stringa2)) { 
    $stringa1 NULL;
    $ris = @mysql_query($stringa2);

    Adesso ho ottenuto un set di risultati MA, si tratta di righe piene di numeri quindi, con un ciclo WHILE, processo tutte le righe trovate e, per ognuna delle quali, per ogni id_nome, id_capelli, id_occhi ordino di andare a cercare nella propria tabella di riferimento a quale caratteristica corrisponde. In questo modo sostituisco gli id con caratteristiche e poi impagino i risultati in una tabella:
    Codice PHP:
    while ($row mysql_fetch_array($ris)) { 

    $search_nomi "SELECT * FROM nomi WHERE nomi.id LIKE ($row[1])";
    $search_capelli "SELECT * FROM capelli WHERE capelli.id LIKE ($row[2])";
    $search_occhi "SELECT * FROM occhi WHERE occhi.id LIKE ($row[3])";

    $s_nom = @mysql_query($search_nomi);
    $s_cap = @mysql_query($search_capelli);
    $s_occ = @mysql_query($search_occhi);

    while (
    $row_nomi mysql_fetch_array($s_nom)) { 
    //stampo i risultati in una tabella 
        
    echo "

    </p>"
    ;
        echo 
    "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\" id=\"table1\">";
        echo 
    "<tr>";
        echo 
    "<td style=\"border-right: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC\" align=\"center\" width=\"33%\" height=\"20\"><font color=\"#005CB9\" size=\"-1\" face=\"Arial\">" $row_nomi[1] . "</td>";
        }
    while (
    $row_cap mysql_fetch_array($s_cap)) { 
        echo 
    "<td style=\"border-right: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC\" align=\"center\" width=\"33%\" height=\"20\"><font color=\"#005CB9\" size=\"-1\" face=\"Arial\">" $row_cap[1] . "</td>";
        }
    while (
    $row_occ mysql_fetch_array($s_occ)) { 
        echo 
    "<td style=\"border-right: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC\" align=\"center\" width=\"34%\" height=\"20\"><font color=\"#005CB9\" size=\"-1\" face=\"Arial\">" $row_occ[1] . "</td>";
        echo 
    "</tr>";
    }
    }
    ?> 
    Io l'ho provato e funziona; resto a disposizione. Ciao!!!

  9. #9
    Utente di HTML.it L'avatar di noos
    Registrato dal
    Jul 2003
    Messaggi
    1,001
    non so come ringraziarti, vedo subito di studiare il codice
    grazie 1000 ciao
    Vola solo chi ha il coraggio di farlo

  10. #10
    Ovviamente se funziona vorrei vedere il risultato finito e su quale sito web lo pubblichi!

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.