Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143

    Ricerca interna senza database

    Salve a tutti,

    Vi chiedo aiuto per la realizzazione di un piccolo motore di ricerca in PHP senza database.

    In pratica, vorrei sapere prima di tutto se è possibile crearlo semplicemente usando un form e una pagina in cui vengono conservati tutti gli articoli con le relative proprietà/caratteristiche (chessò, magari a mò di array).

    Facciamo conto che volessi realizzare un form di ricerca sulle auto:



    Le domande sono: come dovrei impostare il file che archivia le auto e le relative caratteristiche? E come potrei far interagire il form con questo archivio?

    Non sono tanto bravo con gli array. Potrei arrivarci con miliardi di if, else ed echo, ma prima vorrei sapere se c'è una soluzione più comoda e più corretta.

    Aspetto risposte e grazie in anticipo!

  2. #2
    direi che la soluzione più comoda è quella di utilizzare un database

  3. #3
    beh una possibile soluzione potrebbe essere quella di utilizzare un file XML contenente i dettagli delle auto strutturato in modo da poter usare XPath/XQuery senza diventare pazzi

    Ovviamente la soluzione più comoda è l'usare un database, in quanto sono stati fatti anche per questo, però se non si può in alcun altro modo la soluzione più semplice, per questo caso, mi sembra l'utilizzo di archiviare i dati su XML e ricercarli con XPath/XQuery

    Alternativamente, sqlite va su file e non hai bisogno di mysql ... ma soprattutto funziona perfettamente

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Grazie mille per le risposte ragazzi!

    @core.master, si effettivamente con un database mi semplificherei la vita. Il problema è che il sito non necessita di nessuna applicazione dinamica, ma di questo semplice motore di ricerca. Quindi vorrei trovare una soluzione alternativa, evitando così di acquistare un db solo per metterci 1 o 2 tabelle.

    @daniele_dll, ti dirò che le due soluzioni che mi hai consigliato per me sono arabo, però è già un punto da cui partire. Soprattutto mi incuriosisce sqlite; sinceramente lo scopro adesso e mi piacerebbe capirne di più. Non credo di riuscire subito nell'impresa, ma tentare non nuoce e imparare qualcosa in più non ha mai fatto male; quindi, speriamo che me la cavo...

    Grazie mille ancora!

  5. #5
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    No, si può fare benissimo anche senza Database.
    Si tratta di lavorare con Array multidimensionali.
    Non ti spaventare.


    Considera questo Array:
    codice:
    <?php
    
     $parcoauto = array(
    
       0 => 'ciao',
       1 => array('Fuoristrada', 'Lada', 'Niva', 'rosso'),
       2 => array('Utilitaria',  'FIAT', 'Panda', 'bianco'),
       3 => array('Utilitaria',  'Lancia', 'Y', 'verde'),
       4 => array('Sportiva',   'Lancia', 'Beta Montecarlo', 'rosso') //no virgola at ultimo
    
     );
    
    ?>
    Alle varie posizioni (=>) ci sono gli articoli contenuti, senonché questi possono a loro volta essere degli altri Array.
    Quindi, se con echo $parcoauto[0]; accedo-a e stampo ciao nella consueta via mono-dimensionale,
    echo $parcoauto[1]; mi farebbe invece accedere all' Array 'Fuoristrada', 'Lada', 'Niva', 'rosso'
    che tuttavia non posso stampare per intero con un semplice echo; lo potrei fare con la funzione print_r()
    print_r($parcoauto[1]);

    Ma quello che a noi ora interessa sapere, è che:

    con $parcoauto[1][1]; accedo a Lada
    con $parcoauto[2][0]; accedo a Utilitaria
    e questi li posso pure stampare in echo. Stiamo gestendo un Array bi-dimensionale.

    Quindi posso fare ciclare degli if dove se a posizione [0] nella seconda dimensione trovo Utilitaria allora faccio stampare anche tutti gli altri articoli dell' Array interno.
    codice:
    $cosacerco = 'Utilitaria';
    
    for($i=1; $i<5; $i++){
     if($parcoauto[$i][0]==$cosacerco){
       echo 'Qui mi aspetto un altro ciclo for per stampare la/le righe
    ';
     };
    };
    $cosacerco mi dovrà venir valorizzata in $_POST o in $_GET al submit del form di ricerca.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Non ci sono parole per ringraziarti! Sei stato gentilissimo Enzaccio; hai colto nel segno quello che cercavo di fare.

    SQLite ho iniziato a studiarlo, ma visto che si tratta di qualcosa di troppo grande per me, cercherò di adattare la tua soluzione e nel frattempo studierò come consigliato da daniele_dll

    Se dovessi avere dei grattacapi con gli array mi rifaccio senz'altro vivo!

  7. #7
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530

    include() o require()

    L' Array ti potrà convenire compilarlo senza gli indici
    0 =>
    1 =>

    ecc.
    che io ho specificato a scopo dimostrativo nell' Array di primo livello, ma ho già omesso in quelli del secondo; supponendo al momento che l' Array verrà aggiornato/editato direttamente con editor di testo, può essere preferibile non averli, gli indici.
    Così, volendo aggiungere un' ulteriore vettura alle disponibilità, sarà possibile semplicemente aggiungere una nuova riga del tipo:

    ,
    &#160; &#160;array('Utilitaria', &#160;'Skoda', 'Fabia', &#160;'celeste', &#160; 'altre note')

    inframezzata alle altre senza trovarsi indici da dover ritoccare: gli indici numerici saranno impliciti ed aggiornati, tenendo presente che si parte con [0] nella conta.
    Lo stesso per togliere una vettura dalle disponibilità: si cancella del tutto la riga, o la si commenta anteponendo // come anche in JavaScript.

    Ancora, potrei suggerirti di salvare l' Array come file distinto, da richiamare nella pagina con le funzioni PHP include() o require()
    analogamente a come si fa col

    &#60;script type="text/javascript" src="nomefile.js"&#62;&#60;/script&#62;

    per importare file esterni in JavaScript.

    Il "Database" potrà essere quindi rappresentato dal file: carsarray.php
    codice:
    <?php
    
     $parcoauto = array(
    
       array('Fuoristrada', 'Lada',   'Niva',  'rosso'),
       array('Utilitaria',  'FIAT',   'Panda', 'bianco'),
       array('Utilitaria',  'Lancia', 'Y',     'verde'),
       array('Sportiva',    'Lancia', 'Beta Montecarlo', 'rosso')
    
     );
    
    ?>
    mentre nel Documento verrà sostituito da: include ("carsarray.php");
    continuando ad utilizzare la variabile $parcoauto[i][n] per l' accesso.
    Bisogna accertarsi che la SSI include () sia supportata sul Server (ormai è comune); basta provare.
    L' amministratore eviterà così di mettere le mani sull' intera pagina col rischio di comprometterla, trovando altresì più duttile scorrere l' Array da solo.


    Il Futuro Astrale ...
    L' Array come Database, può anche essere aggiornato/editato da un pannello di amministrazione; in pratica, un altro file .php da dove, previo inserimento di una password (altrimenti chiunque potrebbe editarti il magazzino) dai corso alla funzione fwrite() nei riguardi del carsarray.php
    SELECT e campi INPUT entreranno a far parte del pannello di admin consentendo (anche a mano inesperta) di costruire correttamente e speditamente il nuovo sub-Array da aggiungere, senza rischio di "impallare" tutto l' Array-Database perché si dimentica una , o un ' come pure, di inserire termini inesatti che non rispondono a quelli di ricerca.
    Quando si usa fwrite() non si deve dimenticare di rendere writable quel file, assegnandogli gli opportuni Attributi (right-mouse click); dal programma FTP o dal Filemanager dell' hosting, se fornito.

    Ma per ora, hai ben da fare altro ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Grazie mille Enzaccio,

    Tutto chiarissimo!

    Ho capito perfettamente come utilizzare gli array multidimensionali, ma adesso mi sto inceppando sulla cosa che credevo fosse più semplice... il form.

    Se $cosacerco dovesse corrispondere soltanto ad un'opzione di ricerca (rappresentata da un input ad esempio o da un campo testo), potrei anche arrivarci, ma come si fa quando i risultati devono corrispondere a tutti i criteri di ricerca? (per esempio come il form che ho "disegnato" nell'immagine sopra).

    Sto provando a far si che $cosacerco rappresenti un array che contiene tutti i criteri di ricerca, per poi essere confontato con il db e quindi filtrare i risultati... Sono sulla buona strada o sto facendo un casino totale?

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.