Pagina 2 di 2 PrimoPrimo 12
Visualizzazione risultati 31 fino 59 di 59
Like Tree1Likes

Discussione: Ricerca per filtri (o Motore a strati)

  1. #31
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Funziona benissimo
    L'hai visto l'esempio sulla pagina?

    La prima cosa che noto è che se torno indietro con il browser perde i dati scelti in precedenza. La seconda è che se torno indietro con il browser non funziona più per la marca già scelta in precedenza (Ho cercato ACM, tornato indietro non mi mostra più i risultati e per riottenerli devo visualizzare prima Adher e poi ACM)... sono le variabili già inizializzate?

    Magari c'è qualche problema di formattazione (invece di un telecomando sopra l'altro si possono mettere di fianco i risultati) ma funziona per il primo livello di filtri.
    Gioco un pò con il codice per mettere il testo sotto l'immagine e il link anche al testo.
    Codice:
        for (var i = 0; i < risultati.length; ++i) {
            var risultato = risultati[i];
            var name = risultato.marca + ' ' + risultato.modello;
            var image = $('<img>').attr('src', risultato.immagine).attr('width', 200).attr('alt', name).attr('title', name);
            var text = $('<br><strong>').html(risultato.marca + ' ' + risultato.modello);
            var link = $('<a>').attr('href', risultato.link);
            var result_container = $('<div>');
    E non va... ho guardato alcuni esempi in Jquery e non capisco perchè va con l'immagine e non col testo.
    Pensavo alla posizione (l'ho quindi spostato in fondo) l'ho sdoppiato...
    Niente.
    Perchè il link funziona solo per l'immagine e non per il testo?

  2. #32
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    La prima cosa che noto è che se torno indietro con il browser perde i dati scelti in precedenza. La seconda è che se torno indietro con il browser non funziona più per la marca già scelta in precedenza[...]
    La ricerca avviene in maniera interattiva: i risultati sono stati diversi della stessa pagina, non pagine diverse, quindi il tasto indietro non funziona.
    Una cosa che si può fare è decidere se e quali risultati mostrare all'apertura della pagina, quando non sono stati ancora impostati filtri.

    Magari c'è qualche problema di formattazione (invece di un telecomando sopra l'altro si possono mettere di fianco i risultati) ma funziona per il primo livello di filtri.
    Gioco un pò con il codice per mettere il testo sotto l'immagine e il link anche al testo.
    Si potrebbe realizzare attraverso il JavaScript, ma è molto meglio farlo tramite CSS. Qualcosa come:
    Codice:
    .risultato-ricerca {
        display: block;
        text-align: center;
    }
    
    .risultato-ricerca a img {
        display: block;
        margin: auto;
    }
    E nel JavaScript le uniche modifiche da fare sono l'aggiunta della classe risultato-ricerca al div result_container e lo spostamento del testo dal result_container al link:
    Codice:
            var risultato = risultati[i];
            var name = risultato.marca + ' ' + risultato.modello;
            var image = $('<img>').attr('src', risultato.immagine).attr('width', 200).attr('alt', name).attr('title', name);
            var link = $('<a>').attr('href', risultato.link');
            var text = $('<strong>').html(risultato.marca + ' ' + risultato.modello);
            var result_container = $('<div>').addClass('risultato-ricerca');
    
            image.appendTo(link);
            text.appendTo(link);
            link.appendTo(result_container);
            result_container.appendTo(container);

    Codice:
            var text = $('<br><strong>').html(risultato.marca + ' ' + risultato.modello);
    Il problema qui è che stai ragionando ancora come se JavaScript usasse le stringhe. Quando crei un elemento, la sintassi è $('<nome-tag>');, con quel codice stai cercando di creare un tag nella forma <br><strong>Marca Modello</br><strong> che non esiste, quindi non funziona. La procedura corretta sarebbe creare i due tag separatamente ed aggiungerli al contenitore in ordine, ma è decisamente meglio usare il CSS come sopra.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  3. #33
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    La ricerca avviene in maniera interattiva: i risultati sono stati diversi della stessa pagina, non pagine diverse, quindi il tasto indietro non funziona.
    Una cosa che si può fare è decidere se e quali risultati mostrare all'apertura della pagina, quando non sono stati ancora impostati filtri.
    Molti siti propongono tutti i prodotti (o una selezione di essi: i più visti o i più venduti) in prima pagina, se si fa una ricerca e si torna indietro si ritrovano gli stessi risultati per poter continuare ad esaminare i prodotti e non ricercarli di nuovo. Ci sono delle scomode eccezioni, ma generalmente funzionano tutti così. Dai siti di appartamenti ad Amazon.


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Si potrebbe realizzare attraverso il JavaScript, ma è molto meglio farlo tramite CSS. Qualcosa come:
    Codice:
    .risultato-ricerca {
        display: block;
        text-align: center;
    }
    
    .risultato-ricerca a img {
        display: block;
        margin: auto;
    }
    E nel JavaScript le uniche modifiche da fare sono l'aggiunta della classe risultato-ricerca al div result_container e lo spostamento del testo dal result_container al link:
    Codice:
            var risultato = risultati[i];
            var name = risultato.marca + ' ' + risultato.modello;
            var image = $('<img>').attr('src', risultato.immagine).attr('width', 200).attr('alt', name).attr('title', name);
            var link = $('<a>').attr('href', risultato.link');
            var text = $('<strong>').html(risultato.marca + ' ' + risultato.modello);
            var result_container = $('<div>').addClass('risultato-ricerca');
    
            image.appendTo(link);
            text.appendTo(link);
            link.appendTo(result_container);
            result_container.appendTo(container);
    Vedendo il CSS capisco dove usi risultato ricerca, ma ".risultato-ricerca a img " cos'è?

    Levo io l'apostrofo che ti è scappato di nuovo nella linea (volevi vedere se ero attento )
    Codice:
            var link = $('<a>').attr('href', risultato.link');
    E funziona tutto.


    Il problema qui è che stai ragionando ancora come se JavaScript usasse le stringhe. Quando crei un elemento, la sintassi è $('<nome-tag>');, con quel codice stai cercando di creare un tag nella forma <br><strong>Marca Modello</br><strong> che non esiste, quindi non funziona. La procedura corretta sarebbe creare i due tag separatamente ed aggiungerli al contenitore in ordine, ma è decisamente meglio usare il CSS come sopra.
    Si, sono ancorato alla logica html :(
    Ricapitoliamo (così chi cerca di replicare il codice non deve leggersi tutto e capire tutto).
    Abbiamo prima della chiusura dell'Head (borgia è un bordino e un table colorato, altrimenti ci si confonde tra un prodotto e l'altro. Visti in verticale con scroll-bar non è il massimo)
    Codice:
    		<style type="text/css">
    .borgia {
       border: solid 1px #cccccc;
       background-color: #fcfddf;
       margin-left: 3px;
       margin-right: 3px;
       padding: 3px;
    }
    .risultato-ricerca {
        display: block;
        text-align: center;
    }
    
    .risultato-ricerca a img {
        display: block;
        margin: auto;
    }
    </style>
    Tanto per complicare le cose ho aggiunto due parametri: la frequenza e il tipo di codifica.
    Codice:
    ACM|TX Copy|tx-copy.htm|images/TX-Copy-Bicanale-fm-433,92-.jpg|2|arancio|433.92MHz|Rolling Code
    ACM|TX Dip|tx-dip.html|images/TX-Dip.jpg|2|arancio|433.92MHz|Codice fisso
    ACM|TX2 Small|tx2-small---solo-foto.html|images/TX2-SMALL-Bicanale-fm-433,9.jpg|2|arancio|433.92MHz|Rolling Code
    ACM|TX4|tx4---solo-foto.html|images/tx4-retro.jpg|4|grigio|433.92MHz|Rolling Code
    ADHER|A433 - 433.92MHz|adher-a433-433.92mhz.html|images/Adher-A433--433.92Mhz-1-.jpg|1|bianco|433.92MHz|Codice fisso
    Poi abbiamo l'HTML (naturalmente ho aggiunto i select e messo il borgia come stile aggiuntivo)
    Codice HTML:
    <form method="GET" action="" id="ricerca-prodotti">
      <label>Marche telecomandi</label>
      <select name="marca" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="acm">Acm</option>
        <option value="adher">Adher</option>
        <option value="allducks">Allducks</option>
        <option value="aprimatic">Aprimatic</option>
        <option value="ballan">Ballan</option>
        <option value="bft">BFT</option>
        <option value="cardin">Cardin</option>
        <option value="cg2a">CG2A</option>
        <option value="dirichx">Dirickx</option>
        <option value="ducati">Ducati</option>
        <option value="faac">FAAC</option>
        <option value="genius">Genius</option>
        <option value="gobbato">Gobbato</option>
        <option value="jcm">JCM</option>
        <option value="jl">JL</option>
        <option value="label">Label</option>
        <option value="luminox">Luminox</option>
        <option value="mk-techno">MK-Techno</option>
        <option value="nice">Nice</option>
        <option value="0 e 0">O e O</option>
        <option value="quasar">Quasar</option>
        <option value="rib">Rib</option>
        <option value="siminor">Siminor</option>
        <option value="telcoma">Telcoma</option>
      </select>
    
      <label for="tasti">Numero dei tasti:</label>
    <input type="range" name="numero_tasti" class="ricerca-prodotti-input" list="tasti_list" step="1" min="0" max="4">
      <datalist id="tasti_list">
        <option value="">-</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
      </datalist>
    
      <label>Colore tasti</label>
      <select name="colore_tasti" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="rosso">Rosso</option>
        <option value="nero">Nero</option>
        <option value="bianco">Bianco</option>
        <option value="arancio">Arancio</option>
        <option value="grigio">Grigio</option>
      </select>
    
      <label>Frequenza</label>
      <select name="frequenza" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="433.92MHz">433.92MHz</option>
        <option value="30.875MHz">30.875MHz</option>
        <option value="29.997MHz">29.997MHz</option>
      </select>
        
      <label>Tipo codifica</label>
      <select name="codifica" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="Codice fisso">Codice fisso</option>
        <option value="Rolling Code">Rolling Code</option>
        <option value="entrambi">entrambi</option>
      </select>
      
    </form>
    
    <h2>Risultati ricerca:</h2>
    <div id="risultati-ricerca"></div>
    
    <script>
    function mostra_risultati(risultati) {
        var container = $('#risultati-ricerca');
    
        container.empty();
    
        if (risultati.length == 0) {
            container.append($('<p>Nessun risultato trovato</p>'));
        }
        else {
            container.append($('<p>Hai trovato ' + risultati.length + ' telecomandi.</p>'));
        }
    
        for (var i = 0; i < risultati.length; ++i) {
            var risultato = risultati[i];
            var name = risultato.marca + ' ' + risultato.modello;
            var image = $('<img>').attr('src', risultato.immagine).attr('width', 200).attr('alt', name).attr('title', name);
            var link = $('<a>').attr('href', risultato.link);
            var text = $('<strong>').html(risultato.marca + ' ' + risultato.modello);
            var result_container = $('<div>').addClass('risultato-ricerca borgia');
    
            image.appendTo(link);
            text.appendTo(link);
            link.appendTo(result_container);
            result_container.appendTo(container);
        }
    }
    
    $('.ricerca-prodotti-input').change(function () {
        var form = $('#ricerca-prodotti');
    
        $.get('motore-ricerca.php', form.serialize(), function (risultati) {
            mostra_risultati(risultati);
        });
    });
    </script>
    e il php (sono stato attento alle virgole)

    Codice PHP:
    <?php 
    $marca 
    = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any'
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';

    $items file('files/telecomandi2.txt'FILE_IGNORE_NEW_LINES); 
    $results = []; 
    foreach (
    $items as $record) { 
        
    $data explode('|'$record); 
        if ((
    $marca === 'any' || strtolower($data[0]) == $marca)) { 
            
    $results[] = [ 
                
    'marca' => $data[0], 
                
    'modello' => $data[1], 
                
    'link' => $data[2], 
                
    'immagine' => $data[3], 
                
    'numero_tasti' => $data[4],
                
    'colore_tasti' => $data[5],  
                
    'frequenza' => $data[6],
                
    'codifica' => $data[7]
            ]; 
        } 


    header('Content-Type: application/json'); 
    echo 
    json_encode($results); 
    ?>
    Funziona tutto al primo livello di filtro. nessun crash (è già tanto )

  4. #34
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Molti siti propongono tutti i prodotti (o una selezione di essi: i più visti o i più venduti) in prima pagina,
    Per realizzare questo hai bisogno di creare uno storico dei prodotti visti e venduti.

    se si fa una ricerca e si torna indietro si ritrovano gli stessi risultati per poter continuare ad esaminare i prodotti e non ricercarli di nuovo. Ci sono delle scomode eccezioni, ma generalmente funzionano tutti così. Dai siti di appartamenti ad Amazon.
    Non hai tutti i torti Poi scopri che uno sviluppatore Amazon viene pagato 100 mila dollari l'anno e capisci perché loro hanno le funzionalità più fighette...
    Il modo in realtà c'è, ad esempio leggendo Ajax and back button. Hash changes, but where is previous page state stored?, va realizzato a mano in JavaScript e non credo sia semplicissimo. Comunque se ti interessa meglio se apri una discussione a posta nella sezione JavaScript.

    Vedendo il CSS capisco dove usi risultato ricerca, ma ".risultato-ricerca a img " cos'è?
    Un selettore, vuol dire "applica lo stile seguente alle img che stanno dentro ad a che stanno dentro ad un elemento la cui classe è risultato-ricerca.

    Levo io l'apostrofo che ti è scappato di nuovo nella linea (volevi vedere se ero attento )
    Sì, sì, naturalmente, hai superato il test . No, in realtà avevo copiato il codice da un post precedente dove mancava l'apostrofo...



    Funziona tutto al primo livello di filtro. nessun crash (è già tanto )
    Beh, allora possiamo passare ai livello successivi!
    Innanzitutto bisogna leggere i nuovi parametri frequenza e codifica che hai aggiunto al form HTML. Questi li mettiamo subito dopo marca, numero e colore dei tasti. Poi bisogna intervenire sulla condizione dell'if in modo da aggiungere una condizione per ciascun filtro. Complessivamente diventa così:
    Codice PHP:
    <?php
    $marca 
    = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any';
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';
    $frequenza = isset($_GET['frequenza']) && !empty($_GET['frequenza']) ? strtolower($_GET['frequenza']) : 'any';
    $codifica = isset($_GET['codifica']) && !empty($_GET['codifica']) ? strtolower($_GET['codifica']) : 'any';

    $items file('files/telecomandi2.txt'FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach (
    $items as $record) {  
        
    $data explode('|'$record);  
        if ((
    $marca === 'any' || strtolower($data[0]) == $marca)
         && (
    $numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
         && (
    $colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
         && (
    $frequenza === 'any' || strtolower($data[6]) == $frequenza)
         && (
    $codifica === 'any' || strtolower($data[7]) == $codifica)
        ) {  
            
    $results[] = [  
                
    'marca' => $data[0],  
                
    'modello' => $data[1],  
                
    'link' => $data[2],  
                
    'immagine' => $data[3],  
                
    'numero_tasti' => $data[4], 
                
    'colore_tasti' => $data[5],   
                
    'frequenza' => $data[6], 
                
    'codifica' => $data[7
            ];  
        }  
    }  

    header('Content-Type: application/json');  
    echo 
    json_encode($results);  
    ?>
    Se non dovesse funzionare al primo colpo, cosa ahimè sempre possibile, puoi provare a commentare le righe dei filtri e decommenntarle una alla volta (tranne la prima che abbiamo verificato funzionare) finché non trovi il colpevole:
    Codice PHP:
        if (($marca === 'any' || strtolower($data[0]) == $marca)
    //     && ($numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
    //     && ($colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
    //     && ($frequenza === 'any' || strtolower($data[6]) == $frequenza)
    //     && ($codifica === 'any' || strtolower($data[7]) == $codifica)
        
    ) { 

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  5. #35
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Per realizzare questo hai bisogno di creare uno storico dei prodotti visti e venduti.
    In effetti si...

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Non hai tutti i torti Poi scopri che uno sviluppatore Amazon viene pagato 100 mila dollari l'anno e capisci perché loro hanno le funzionalità più fighette...
    Evidentemente sono soldi ben spesi...

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Il modo in realtà c'è, ad esempio leggendo Ajax and back button. Hash changes, but where is previous page state stored?, va realizzato a mano in JavaScript e non credo sia semplicissimo. Comunque se ti interessa meglio se apri una discussione a posta nella sezione JavaScript.
    Magari in un secondo momento... devo dire la verità, l'inglese lo capisco ma applicato a cose che già non capisco in Italiano mi viene ostico. Quindi non ho ben capito cosa faccia quel codice.


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Beh, allora possiamo passare ai livello successivi!
    Innanzitutto bisogna leggere i nuovi parametri frequenza e codifica che hai aggiunto al form HTML. Questi li mettiamo subito dopo marca, numero e colore dei tasti. Poi bisogna intervenire sulla condizione dell'if in modo da aggiungere una condizione per ciascun filtro. Complessivamente diventa così:
    Codice PHP:
    <?php
    $marca 
    = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any';
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';
    $frequenza = isset($_GET['frequenza']) && !empty($_GET['frequenza']) ? strtolower($_GET['frequenza']) : 'any';
    $codifica = isset($_GET['codifica']) && !empty($_GET['codifica']) ? strtolower($_GET['codifica']) : 'any';

    $items file('files/telecomandi2.txt'FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach (
    $items as $record) {  
        
    $data explode('|'$record);  
        if ((
    $marca === 'any' || strtolower($data[0]) == $marca)
         && (
    $numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
         && (
    $colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
         && (
    $frequenza === 'any' || strtolower($data[6]) == $frequenza)
         && (
    $codifica === 'any' || strtolower($data[7]) == $codifica)
        ) {  
            
    $results[] = [  
                
    'marca' => $data[0],  
                
    'modello' => $data[1],  
                
    'link' => $data[2],  
                
    'immagine' => $data[3],  
                
    'numero_tasti' => $data[4], 
                
    'colore_tasti' => $data[5],   
                
    'frequenza' => $data[6], 
                
    'codifica' => $data[7
            ];  
        }  
    }  

    header('Content-Type: application/json');  
    echo 
    json_encode($results);  
    ?>
    Se non dovesse funzionare al primo colpo, cosa ahimè sempre possibile, puoi provare a commentare le righe dei filtri e decommenntarle una alla volta (tranne la prima che abbiamo verificato funzionare) finché non trovi il colpevole:
    Codice PHP:
        if (($marca === 'any' || strtolower($data[0]) == $marca)
    //     && ($numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
    //     && ($colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
    //     && ($frequenza === 'any' || strtolower($data[6]) == $frequenza)
    //     && ($codifica === 'any' || strtolower($data[7]) == $codifica)
        
    ) { 
    E in effetti non funziona, o meglio funzionano i primi tre livelli di filtro ma non frequenza e tipo di codifica. Ho guardato se fosse un problema di notazione (io sono abituato a scrivere le cifre decimali col punto, ma non per le descrizioni in cui in Italiano di solito si usa la virgola e io vado un po' a casaccio) e non ho visto incongruenze.
    Ho remmato prima l'uno, poi l'altro poi entrambi i campi e il risultato è sempre identico. Non si possono effettuare scelte con quei parametri. Nè scelte che prevedano un prodotto esistente nel DB nè prodotti non esistenti.
    Semplicemente bloccano la ricerca.
    Ho guardato anche il nome delle variabili, se per caso da qualche parte usassimo lettere maiuscole (es. nell'HTML) ma nulla. L'unica differenza è nel nome variabile con l'underscore.

    Quindi come ultimo tentativo ho usato

    Codice HTML:
      <label>Frequenza</label>
      <select name="freq_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="433.92MHz">433.92MHz</option>
        <option value="30.875MHz">30.875MHz</option>
        <option value="29.997MHz">29.997MHz</option>
      </select>
        
      <label>Tipo codifica</label>
      <select name="codif_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="Codice fisso">Codice fisso</option>
        <option value="Rolling Code">Rolling Code</option>
        <option value="entrambi">entrambi</option>
      </select>
    e nel php

    Codice PHP:
    <?php
    $marca 
    = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any';
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';
    $freq_telec = isset($_GET['freq_telec']) && !empty($_GET['frequenza']) ? strtolower($_GET['freq_telec']) : 'any';
    $codif_telec = isset($_GET['codif_telec']) && !empty($_GET['codifica']) ? strtolower($_GET['codif_telec']) : 'any';

    $items file('files/telecomandi2.txt'FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach (
    $items as $record) {  
        
    $data explode('|'$record);  
        if ((
    $marca === 'any' || strtolower($data[0]) == $marca)
         && (
    $numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
         && (
    $colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
         && (
    $freq_telec === 'any' || strtolower($data[6]) == $freq_telec)
         && (
    $codif_telec === 'any' || strtolower($data[7]) == $codif_telec)
        ) {  
            
    $results[] = [  
                
    'marca' => $data[0],  
                
    'modello' => $data[1],  
                
    'link' => $data[2],  
                
    'immagine' => $data[3],  
                
    'numero_tasti' => $data[4], 
                
    'colore_tasti' => $data[5],   
                
    'freq_telec' => $data[6], 
                
    'codif_telec' => $data[7
            ];  
        }  
    }  

    header('Content-Type: application/json');  
    echo 
    json_encode($results);  
    ?>
    Ma a parte la pagina html che diventa sempre più pesante in risorse (lo vedo in Gestione attività windows) non ci sono differenze.
    Allora mi sono messo a riflettere sulle stringhe proposte per gli ultimi due campi...

    Codice:
    ACM|TX Copy|tx-copy.htm|images/TX-Copy-Bicanale-fm-433,92-.jpg|2|arancio|433.92MHz|Rolling Code
    ACM|TX Dip|tx-dip.html|images/TX-Dip.jpg|2|arancio|433.92MHz|Codice fisso
    ACM|TX2 Small|tx2-small---solo-foto.html|images/TX2-SMALL-Bicanale-fm-433,9.jpg|2|arancio|433.92MHz|Rolling Code
    ACM|TX4|tx4---solo-foto.html|images/tx4-retro.jpg|4|grigio|433.92MHz|Rolling Code
    ADHER|A433 - 433,92MHz|adher-a433-433.92mhz.html|images/Adher-A433--433.92Mhz-1-.jpg|1|bianco|433.92MHz|Codice fisso
    In apparenza sono stringhe di testo, hanno lettere e numeri, spazi, esattamente come la prima parte del codice. Nulla li differenzia.
    Ho fatto altre prove mettendo tutti i punti o solo virgole e nulla... gli ultimi due campi bloccano il motore di ricerca...


    Avevo scritto questa risposta ieri sera, poi l'ho salvata col blocco e oggi prima di spedirla, nel rileggerla scopro l'errore nelle variabili
    Codice:
    $freq_telec = isset($_GET['freq_telec']) && !empty($_GET['frequenza']) ? strtolower($_GET['freq_telec']) : 'any';
    $codif_telec = isset($_GET['codif_telec']) && !empty($_GET['codifica']) ? strtolower($_GET['codif_telec']) : 'any';
    Ho corretto il codifica in codif_telec e ora non si blocca (tra la tua versione e la mia ero riuscito a far si che non apparisse nulla), ignora quei due parametri per la ricerca.
    Ultima modifica di legaitalianalibera : 10-01-2019 alle ore 16.20.55

  6. #36
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    E in effetti non funziona, o meglio funzionano i primi tre livelli di filtro ma non frequenza e tipo di codifica. Ho guardato se fosse un problema di notazione (io sono abituato a scrivere le cifre decimali col punto, ma non per le descrizioni in cui in Italiano di solito si usa la virgola e io vado un po' a casaccio) e non ho visto incongruenze.
    E invece un'incongruenza c'è: nell'HTML utilizzi il punto come separatore dei decimali, mentre nel file telecomandi2.txt utilizzi la virgola. Quando applichi il filtro "433.92MHz" non risultano corrispondenze, perché fallisce il controllo con la stringa "433,92MHz". Sistema il file di testo (o l'HTML).

    Riguardo ai nomi dei parametri passati tramite GET, quando li avevo presi da un messaggio precedente si chiamavano frequenza e codifica, se li hai modificati nell'HTML bisogna aggiornare anche il PHP .

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  7. #37
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    E invece un'incongruenza c'è: nell'HTML utilizzi il punto come separatore dei decimali, mentre nel file telecomandi2.txt utilizzi la virgola. Quando applichi il filtro "433.92MHz" non risultano corrispondenze, perché fallisce il controllo con la stringa "433,92MHz". Sistema il file di testo (o l'HTML).
    No, in effetti utilizzo la virgola nella descrizione o nel nome del file, ma per la frequenza utilizzo sempre il punto (è il penultimo dato)

    Codice:
    ACM|TX Copy|tx-copy.htm|images/TX-Copy-Bicanale-fm-433,92-.jpg|2|arancio|433.92MHz|Rolling Code
    ACM|TX Dip|tx-dip.html|images/TX-Dip.jpg|2|arancio|433.92MHz|Codice fisso
    ACM|TX2 Small|tx2-small---solo-foto.html|images/TX2-SMALL-Bicanale-fm-433,9.jpg|2|arancio|433.92MHz|Rolling Code
    ACM|TX4|tx4---solo-foto.html|images/tx4-retro.jpg|4|grigio|433.92MHz|Rolling Code
    ADHER|A433 - 433,92MHz|adher-a433-433.92mhz.html|images/Adher-A433--433.92Mhz-1-.jpg|1|bianco|433.92MHz|Codice fisso
    Codice HTML:
      <label>Frequenza</label>
      <select name="freq_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="433.92MHz">433.92MHz</option>
        <option value="30.875MHz">30.875MHz</option>
        <option value="29.997MHz">29.997MHz</option>
      </select>
    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Riguardo ai nomi dei parametri passati tramite GET, quando li avevo presi da un messaggio precedente si chiamavano frequenza e codifica, se li hai modificati nell'HTML bisogna aggiornare anche il PHP .
    Si, li ho aggiornati in entrambi i posti...

    Codice PHP:
    <?php
    $marca 
    = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any';
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';
    $freq_telec = isset($_GET['freq_telec']) && !empty($_GET['freq_telec']) ? strtolower($_GET['freq_telec']) : 'any';
    $codif_telec = isset($_GET['codif_telec']) && !empty($_GET['codif_telec']) ? strtolower($_GET['codif_telec']) : 'any';

    $items file('files/telecomandi2.txt'FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach (
    $items as $record) {  
        
    $data explode('|'$record);  
        if ((
    $marca === 'any' || strtolower($data[0]) == $marca)
         && (
    $numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
         && (
    $colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
         && (
    $freq_telec === 'any' || strtolower($data[6]) == $freq_telec)
         && (
    $codif_telec === 'any' || strtolower($data[7]) == $codif_telec)
        ) {  
            
    $results[] = [  
                
    'marca' => $data[0],  
                
    'modello' => $data[1],  
                
    'link' => $data[2],  
                
    'immagine' => $data[3],  
                
    'numero_tasti' => $data[4], 
                
    'colore_tasti' => $data[5],   
                
    'freq_telec' => $data[6], 
                
    'codif_telec' => $data[7
            ];  
        }  
    }  

    header('Content-Type: application/json');  
    echo 
    json_encode($results);  
    ?>
    Codice HTML:
    <form method="GET" action="" id="ricerca-prodotti">
      <label>Marche telecomandi</label>
      <select name="marca" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="acm">Acm</option>
        <option value="adher">Adher</option>
        <option value="allducks">Allducks</option>
        <option value="aprimatic">Aprimatic</option>
        <option value="ballan">Ballan</option>
        <option value="bft">BFT</option>
        <option value="cardin">Cardin</option>
        <option value="cg2a">CG2A</option>
        <option value="dirichx">Dirickx</option>
        <option value="ducati">Ducati</option>
        <option value="faac">FAAC</option>
        <option value="genius">Genius</option>
        <option value="gobbato">Gobbato</option>
        <option value="jcm">JCM</option>
        <option value="jl">JL</option>
        <option value="label">Label</option>
        <option value="luminox">Luminox</option>
        <option value="mk-techno">MK-Techno</option>
        <option value="nice">Nice</option>
        <option value="0 e 0">O e O</option>
        <option value="quasar">Quasar</option>
        <option value="rib">Rib</option>
        <option value="siminor">Siminor</option>
        <option value="telcoma">Telcoma</option>
      </select>
    
      <label for="tasti">Numero dei tasti:</label>
    <input type="range" name="numero_tasti" class="ricerca-prodotti-input" list="tasti_list" step="1" min="0" max="4">
      <datalist id="tasti_list">
        <option value="">-</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
      </datalist>
    
      <label>Colore tasti</label>
      <select name="colore_tasti" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="rosso">Rosso</option>
        <option value="nero">Nero</option>
        <option value="bianco">Bianco</option>
        <option value="arancio">Arancio</option>
        <option value="grigio">Grigio</option>
      </select>
    
      <label>Frequenza</label>
      <select name="freq_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="433.92MHz">433.92MHz</option>
        <option value="30.875MHz">30.875MHz</option>
        <option value="29.997MHz">29.997MHz</option>
      </select>
        
      <label>Tipo codifica</label>
      <select name="codif_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="Codice fisso">Codice fisso</option>
        <option value="Rolling Code">Rolling Code</option>
        <option value="entrambi">entrambi</option>
      </select>
      
    </form>
    
    <h2>Risultati ricerca:</h2>
    <div id="risultati-ricerca"></div>
    
    <script>
    function mostra_risultati(risultati) {
        var container = $('#risultati-ricerca');
    
        container.empty();
    
        if (risultati.length == 0) {
            container.append($('<p>Nessun risultato trovato</p>'));
        }
        else {
            container.append($('<p>Hai trovato ' + risultati.length + ' telecomandi.</p>'));
        }
    
        for (var i = 0; i < risultati.length; ++i) {
            var risultato = risultati[i];
            var name = risultato.marca + ' ' + risultato.modello;
            var image = $('<img>').attr('src', risultato.immagine).attr('width', 200).attr('alt', name).attr('title', name);
            var link = $('<a>').attr('href', risultato.link);
            var text = $('<strong>').html(risultato.marca + ' ' + risultato.modello);
            var result_container = $('<div>').addClass('risultato-ricerca borgia');
    
            image.appendTo(link);
            text.appendTo(link);
            link.appendTo(result_container);
            result_container.appendTo(container);
        }
    }
    
    $('.ricerca-prodotti-input').change(function () {
        var form = $('#ricerca-prodotti');
    
        $.get('motore-ricerca.php', form.serialize(), function (risultati) {
            mostra_risultati(risultati);
        });
    });
    </script>
    Ci dev'essere dell'altro... non il nome della variabile, non il valore in se...
    Ultima modifica di legaitalianalibera : 10-01-2019 alle ore 17.54.14

  8. #38
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    No, in effetti utilizzo la virgola nella descrizione o nel nome del file, ma per la frequenza utilizzo sempre il punto (è il penultimo dato)
    Visitando il solito indirizzo http://veronacitysera.altervista.org...lecomandi2.txt vedo ancora le virgole, non i punti.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  9. #39
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Visitando il solito indirizzo http://veronacitysera.altervista.org...lecomandi2.txt vedo ancora le virgole, non i punti.
    Formidabile, avrò passato 20 volte quel file, ma qualcosa è andato storto... ora uppato con filezilla funziona.
    Per provare ho aggiunto un telecomando a frequenza diversa (305MHz) e tutto funziona.
    Un problema è che l'option select <input type="range" non mi permette di azzerare il numero tasti, ma parte sempre da 2

    Ho cercato online una soluzione senza trovarla malvolentieri ho cambiato
    Codice:
      <label for="tasti">Numero dei tasti:</label>
    <input type="range" name="numero_tasti" class="ricerca-prodotti-input" list="tasti_list" step="1" min="0" max="4">
      <datalist id="tasti_list">
        <option value="">-</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
      </datalist>
    con
    Codice:
      <label>Numero dei tasti</label>
      <select name="numero_tasti" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="+">+ di 4</option>
      </select>
    Il più è perchè esistono telecomandi con 6 o 12 tasti...

    A questo punto si vedono due problemi.
    Il primo è slegare il motore di ricerca dai risultati. Cioè non dovrebbe scrollare con i prodotti
    Il secondo è la formattazione dei prodotti non in colonna, ma con <table> e più elementi per riga.

    Domanda? Se io faccio una tablella posso mettere il
    Codice:
    <label>Numero dei tasti</label>
    in un <TR>
    e
    Codice:
      <select name="numero_tasti" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="+">+ di 4</option>
      </select>
    in un'altro?
    Per logica direi di si, ma sono andato a vedere su https://www.mrwebmaster.it/html/label_8911.html in cui vedo che fa parte del selettore.
    Però tu non l'hai usato come selettore, ma come testo, giusto? Quindi posso metterlo in un table...

  10. #40
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Bene !

    Sono tutte cose che si possono fare con CSS/HTML (materia che non conosco bene quanto la programmazione ). Quello che so per certo è che più o meno tutti sconsigliano di usare le tabelle per creare il layout della pagina, è una pratica che risale agli anni '90 quando non c'era altra scelta se si volevano strutture di una certa complessità. Da quando c'è il CSS ciò non è più necessario.

    Per esempio
    Il primo è slegare il motore di ricerca dai risultati. Cioè non dovrebbe scrollare con i prodotti
    Si può realizzare applicando l'attributo overflow: auto al div risultati-ricerca:
    Codice:
    #risultati-ricerca {
        overflow: auto;
        height: 640px;
    }
    Il secondo è la formattazione dei prodotti non in colonna, ma con <table> e più elementi per riga.
    Questo immagino si possa realizzare applicando l'attributo float: left ai div risultato-ricerca ed impostandone la larghezza:
    Codice:
    .risultato-ricerca {
        display: block;
        text-align: center;
        float: left;
        width: 25%;
    }
    Ma il CSS resta per me un'arte oscura e a tratti incomprensibile...

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  11. #41
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Bene !

    Sono tutte cose che si possono fare con CSS/HTML (materia che non conosco bene quanto la programmazione ). Quello che so per certo è che più o meno tutti sconsigliano di usare le tabelle per creare il layout della pagina, è una pratica che risale agli anni '90 quando non c'era altra scelta se si volevano strutture di una certa complessità. Da quando c'è il CSS ciò non è più necessario.
    Ho guardato un pò in giro, si usano cose tipo
    Codice:
    <style>
    caption {
    caption-side: bottom;
    text-align: right;
    padding: 10px 0;
    font-size: 14px;
    }
    </style>.
    <table>
    <caption>Tabella № 1</caption>
    <tr>
    <th>Company</th>
    <th>Q1</th>
    <th>Q2</th>
    <th>Q3</th>
    <th>Q4</th>
    </tr>
    ...
    </table>
    Preso da http://www.ioeweb.it/lezioni/css/tabelle-nei-css, ma alla fine i <td></td> rimangono

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Per esempio

    Si può realizzare applicando l'attributo overflow: auto al div risultati-ricerca:
    Codice:
    #risultati-ricerca {
        overflow: auto;
        height: 640px;
    }
    apparentemente questo non fa nulla... sei sicuro?

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Questo immagino si possa realizzare applicando l'attributo float: left ai div risultato-ricerca ed impostandone la larghezza:
    Codice:
    .risultato-ricerca {
        display: block;
        text-align: center;
        float: left;
        width: 25%;
    }
    Questo funziona

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Ma il CSS resta per me un'arte oscura e a tratti incomprensibile...
    anche per me...
    ricapitoliamo.
    Ho messo prima della chiusura di <head>
    Codice:
    		<style type="text/css">
    .borgia {
       border: solid 1px #cccccc;
       background-color: #fcfddf;
       margin-left: 3px;
       margin-right: 3px;
       padding: 3px;
    }
    h2.nome_telecomando {
        display: inline;
    }
    .risultato-ricerca {
        display: block;
        text-align: center;
    }
    
    .risultato-ricerca a img {
        display: block;
        margin: auto;
    }
    #risultati-ricerca {
        overflow: auto;
        height: 640px;
    }
    .risultato-ricerca {
        display: block;
        text-align: center;
        float: left;
        width: 25%;
    }
    table {border: 1px solid grey; border-collapse: separate; border-spacing: 10px;}
    </style>
    Poi ho tabellato i campi di ricerca, il programma che uso definisce la pagina web in zone, celle e colonne separate.
    In una riga/cella larga quanto la pagina ho messo:
    Codice HTML:
    <form method="GET" action="" id="ricerca-prodotti">
    <table>
    <tr>  
    <td><label>Marche telecomandi</label></td>
    <td><label>Numero dei tasti</label></td>
    <td><label>Colore tasti</label></td>
    <td><label>Frequenza</label></td>
    <td><label>Tipo codifica</label></td>
    </tr>
    <tr>
    <td>
      <select name="marca" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="acm">Acm</option>
        <option value="adher">Adher</option>
        <option value="allducks">Allducks</option>
        <option value="aprimatic">Aprimatic</option>
        <option value="ballan">Ballan</option>
        <option value="bft">BFT</option>
        <option value="cardin">Cardin</option>
        <option value="cg2a">CG2A</option>
        <option value="dirichx">Dirickx</option>
        <option value="ducati">Ducati</option>
        <option value="faac">FAAC</option>
        <option value="genius">Genius</option>
        <option value="gobbato">Gobbato</option>
        <option value="jcm">JCM</option>
        <option value="jl">JL</option>
        <option value="label">Label</option>
        <option value="luminox">Luminox</option>
        <option value="mk-techno">MK-Techno</option>
        <option value="nice">Nice</option>
        <option value="0 e 0">O e O</option>
        <option value="quasar">Quasar</option>
        <option value="rib">Rib</option>
        <option value="siminor">Siminor</option>
        <option value="telcoma">Telcoma</option>
      </select>
      </td><td>
    
      <select name="numero_tasti" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="+">+ di 4</option>
      </select>
      </td><td>
      
      <select name="colore_tasti" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="rosso">Rosso</option>
        <option value="nero">Nero</option>
        <option value="bianco">Bianco</option>
        <option value="arancio">Arancio</option>
        <option value="grigio">Grigio</option>
      </select>
      </td><td>
      
      <select name="freq_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="433.92MHz">433.92MHz</option>
        <option value="305MHz">305MHz</option>
        <option value="30.875MHz">30.875MHz</option>
        <option value="29.997MHz">29.997MHz</option>
      </select>
      </td><td>
      
      <select name="codif_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="Codice fisso">Codice fisso</option>
        <option value="Rolling Code">Rolling Code</option>
        <option value="entrambi">entrambi</option>
      </select>
      </td><td>
        </tr>
    </table>
      
    </form>
    nella riga sottostante
    Codice HTML:
    <h2>Risultati ricerca:</h2>
    <div id="risultati-ricerca"></div>
    
    <script>
    function mostra_risultati(risultati) {
        var container = $('#risultati-ricerca');
    
        container.empty();
    
        if (risultati.length == 0) {
            container.append($('<p>Nessun risultato trovato</p>'));
        }
        else {
            container.append($('<p>Hai trovato ' + risultati.length + ' telecomandi.</p>'));
        }
    
        for (var i = 0; i < risultati.length; ++i) {
            var risultato = risultati[i];
            var name = risultato.marca + ' ' + risultato.modello;
            var image = $('<img>').attr('src', risultato.immagine).attr('width', 200).attr('alt', name).attr('title', name);
            var link = $('<a>').attr('href', risultato.link);
            var text = $('<strong>').html(risultato.marca + ' ' + risultato.modello);
            var result_container = $('<div>').addClass('risultato-ricerca borgia');
    
            image.appendTo(link);
            text.appendTo(link);
            link.appendTo(result_container);
            result_container.appendTo(container);
        }
    }
    
    $('.ricerca-prodotti-input').change(function () {
        var form = $('#ricerca-prodotti');
    
        $.get('motore-ricerca.php', form.serialize(), function (risultati) {
            mostra_risultati(risultati);
        });
    });
    </script>
    E il risultato è quello sperato: una zona fissa col motore di ricerca e una con il risultato.
    Ho ancora degli spazi assurdi tra le celle e la barra di scorrimento che non dovrebbe esistere se non ci sono elementi da mostrare, ma il risultato è molto vicino a quello sperato

  12. #42
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Bene !


    Codice:
    #risultati-ricerca {
        overflow: auto;
        height: 640px;
    }
    Ho levato la definizione dell'altezza
    height: 640px;
    e le cose funzionano meglio!

  13. #43
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Preso da http://www.ioeweb.it/lezioni/css/tabelle-nei-css, ma alla fine i <td></td> rimangono
    Quel link spiega come modificare le stile delle tabelle, non suggerisce di usarle per impostare il layout di una pagina. Infatti nello stesso sito le guide dedicate al layout non usano le tabelle, ma il CSS: http://www.ioeweb.it/lezioni/css/pos...a-float-di-css, http://www.ioeweb.it/videoCorsoCSS/#float_carcassa.

    apparentemente questo non fa nulla... sei sicuro?
    overflow: auto; indica di mostrare una barra di scorrimento qualora il contenuto del div sfori il contenitore. In questo caso vuol dire che se i prodotti sono così tanti da sforare dal riquadro vengono mostrate le barre.
    height: 640px; fissa l'altezza del contenitore: se non vuoi che abbia un'altezza fissa basta toglierlo come hai fatto .

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  14. #44
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    12,922

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Ma il CSS resta per me un'arte oscura e a tratti incomprensibile...
    È normale, credo che per chiunque non lo utilizzi (quasi) tutti i giorni sia così: ogni volta lo devo re-imparare .

    Segnalo però che ora con flexbox il CSS è diventato molto più facile.

    Ciao!
    mzanella likes this.

  15. #45
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quel link spiega come modificare le stile delle tabelle, non suggerisce di usarle per impostare il layout di una pagina. Infatti nello stesso sito le guide dedicate al layout non usano le tabelle, ma il CSS: http://www.ioeweb.it/lezioni/css/pos...a-float-di-css, http://www.ioeweb.it/videoCorsoCSS/#float_carcassa.
    Ho dato un occhiata, ma per incasellare i testi e le caselle dici di cambiare il table?


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    overflow: auto; indica di mostrare una barra di scorrimento qualora il contenuto del div sfori il contenitore. In questo caso vuol dire che se i prodotti sono così tanti da sforare dal riquadro vengono mostrate le barre.
    height: 640px; fissa l'altezza del contenitore: se non vuoi che abbia un'altezza fissa basta toglierlo come hai fatto .
    Infatti, ora da più soddisfazioni

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Segnalo però che ora con flexbox il CSS è diventato molto più facile.
    A me sembra sempre poco user friendly

  16. #46
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Ho dato un occhiata, ma per incasellare i testi e le caselle dici di cambiare il table?
    Sì dai... adesso che il motore funziona puoi spendere del tempo in questo aspetto di HTML/CSS, tutta esperienza per il futuro .

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  17. #47
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Sì dai... adesso che il motore funziona puoi spendere del tempo in questo aspetto di HTML/CSS, tutta esperienza per il futuro .
    Ho ancora il problema dell'altezza assurda delle righe che avevo tentato di risolvere con
    Codice:
      <style type="text/css">
    div[id^="imCellStyle_"] {
      padding-bottom: 3px !important;
    }
    #imContentContainer {
      min-height: initial !important;
    }
    div[id^="imCell_"], div[id^="imCellStyle_"] {
      min-height: initial !important;
    }
    dici di usare la proprietà float?

  18. #48
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Intendi lo spazio tra il form di ricerca ed i risultati? Per quello basta togliere height: 350px da qui:
    Codice HTML:
    <div id="imHTMLObject_169_09" class="imHTMLObject" style="height: 350px; overflow: auto; text-align: center;">

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  19. #49
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Intendi lo spazio tra il form di ricerca ed i risultati? Per quello basta togliere height: 350px da qui:
    Codice HTML:
    <div id="imHTMLObject_169_09" class="imHTMLObject" style="height: 350px; overflow: auto; text-align: center;">
    Magari, ci sono problemi diversi...
    Il primo problema è che in home page non funziona più nulla... :(
    http://veronacitysera.altervista.org/caravelli2/... ho cambiato il percorso del file .txt, ho cambiato il nome del file del motore, ma non risponde più il motore.
    Controllo, cerco i percorsi... ma... dove sono i risultati?

    Come vedi però l'impaginazione è assurda. Il programma che uso gestisce righe e colonne in modo suo (per poterle anche ottimizzare per dispositivi mobili).

    Come si vede ho impostato nel corpo della pagina (footer e heather sono gestiti a parte) a destra tutti i widget di gestione facebook, del blog etc... a sinistra il motore di ricerca.
    Prima riga l'option select
    Il resto della pagina i risultati.

    ... non viene fuori nulla (e si impagina da schifo)
    Ora a parte l'impaginazione, come mai il motore muore?

  20. #50
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    [qoute]
    Il primo problema è che in home page non funziona più nulla... :(
    [/quote]
    Usa la console del browser, può darti informazioni preziose sugli errori. O almeno una vaga indicazione di dove sono. Aprendo la pagina, ad esempio, riporta: Uncaught SyntaxError: missing ) after argument list (index 1292). Visualizzando il sorgente della pagina, alla riga 1292, c'è questo:
    Codice:
    container.append($('<p>Hai trovato '   risultati.length   ' telecomandi.</p>'));
    mancano i + tra le varie stringhe. Volendo fare i fini si può migliorare in:
    Codice:
    container.append($('<p>').html('Hai trovato ' + risultati.length + ' telecomandi.'));
    ho cambiato il percorso del file .txt, ho cambiato il nome del file del motore, ma non risponde più il motore.
    Quando qualcosa non va non modificare selvaggiamente tutto finché non trovi l'errore: è assai più probabile che facendo così si rompa qualcosa che prima funzionava .

    Ora a parte l'impaginazione, come mai il motore muore?
    Allo stato attuale funziona. Una cosa che forse ho dato erroneamente per scontato: uno dei vantaggi di avere il motore-ricerca.php "separato" dalla pagina HTML è che anche i test e lo sviluppo possono essere separati. Per esempio puoi visitare direttamente la pagina http://veronacitysera.altervista.org...re-ricerca.php per vedere se il motore funziona. Puoi anche passargli a mano i parametri GET, ad esempio http://veronacitysera.altervista.org...hp?marca=Adher. Essendo il risultato un JSON non è pratico da leggere, ma puoi verificare facilmente se almeno funziona.

    ... non viene fuori nulla (e si impagina da schifo)
    Questo dipende probabilmente dal programma (che non conosco)...

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  21. #51
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Il primo problema è che in home page non funziona più nulla... :(
    Usa la console del browser, può darti informazioni preziose sugli errori. O almeno una vaga indicazione di dove sono. Aprendo la pagina, ad esempio, riporta: Uncaught SyntaxError: missing ) after argument list (index 1292). Visualizzando il sorgente della pagina, alla riga 1292, c'è questo:
    Codice:
    container.append($('<p>Hai trovato '   risultati.length   ' telecomandi.</p>'));
    Vedo....

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    mancano i + tra le varie stringhe. Volendo fare i fini si può migliorare in:
    Codice:
    container.append($('<p>').html('Hai trovato ' + risultati.length + ' telecomandi.'));
    Il problema è che avevo passato correttamente quel che c'è nell'altra pagina...
    Perché l'ha cambiato?
    Era
    Codice:
            container.append($('<p>Hai trovato ' + risultati.length + ' telecomandi.</p>'));
    ... .html?
    Come mai?

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quando qualcosa non va non modificare selvaggiamente tutto finché non trovi l'errore: è assai più probabile che facendo così si rompa qualcosa che prima funzionava .
    No, ho cambiato i file di riferimento per poterli modificare senza toccare quel che funzionava nella pagina di prova. Quindi li ho sdoppiati e cambiato i path. Se qualcosa non va torno a prendere i file originali funzionanti.


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Allo stato attuale funziona.
    No, per qualche misterioso motivo mi si cambia il codice... non so come mai, ho fatto la modifica e ora ho Uncaught SyntaxError: Unexpected string alla riga 1234
    Quindi mi ha cambiato
    Codice:
            var name = risultato.marca + ' ' + risultato.modello;
    in
    Codice:
            var name = risultato.marca   ' '   risultato.modello;
    Non ha molto senso...
    Rimetto tutto il codice nel programma e lo uppo sul server...
    ... ora funziona...
    Mistero? Tanto l'impaginazione va ancora a donnine dai facili costumi

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Una cosa che forse ho dato erroneamente per scontato: uno dei vantaggi di avere il motore-ricerca.php "separato" dalla pagina HTML è che anche i test e lo sviluppo possono essere separati. Per esempio puoi visitare direttamente la pagina http://veronacitysera.altervista.org...re-ricerca.php per vedere se il motore funziona. Puoi anche passargli a mano i parametri GET, ad esempio http://veronacitysera.altervista.org...hp?marca=Adher. Essendo il risultato un JSON non è pratico da leggere, ma puoi verificare facilmente se almeno funziona.
    Il che riporta allo step successivo, una pagina per leggere e scrivere questo testo

    [QUOTE=mzanella;1409540]
    Questo dipende probabilmente dal programma (che non conosco)...
    Ti riferivi all'impaginazione... ho provato a modificare le altezza mettendole automatiche, a mettere parametri in style...

  22. #52
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    ... .html?
    Come mai?
    .html() è il metodo di jQuery per inserire il contenuto dentro ad un elemento. Per esempio, crei un elemento con var paragraph = $('<p>'), e vi inserisci un testo con paragraph.html("Contenuto del paragrafo.");.
    Essendo un caso particolarmente semplice funziona anche con $('<p>Contenuto del paragrafo.</p>');, ma l'altro approccio è preferibile.

    No, per qualche misterioso motivo mi si cambia il codice... non so come mai, ho fatto la modifica e ora ho Uncaught SyntaxError: Unexpected string alla riga 1234
    Pensavo ti riferissi al motore-ricerca.php .

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  23. #53
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    .html() è il metodo di jQuery per inserire il contenuto dentro ad un elemento. Per esempio, crei un elemento con var paragraph = $('<p>'), e vi inserisci un testo con paragraph.html("Contenuto del paragrafo.");.
    Essendo un caso particolarmente semplice funziona anche con $('<p>Contenuto del paragrafo.</p>');, ma l'altro approccio è preferibile.


    Pensavo ti riferissi al motore-ricerca.php .
    motore-ricerca.php passa tramite ftp semplice, la pagina html è impaginata col template dal programma che uso. Ed era lui che modificava il testo passato.
    Non so perchè, non so se lo farà ancora o come mai...

  24. #54
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito ulteriori parametri

    Sto scrivendo una visualizzazione in PHP dei risultati in una pagina con tutti i prodotti per marca.
    Ci sono dei problemi di impaginazione, ma ci sto lavorando.
    Tornando al motore di ricerca, un'altro parametro importante di ricerca è il numero di dip switch. E' una codifica binaria abbastanza semplice (in realtà può essere anche ternaria).
    Il riconoscimento visivo è molto difficile, ma dai particolari (es. il numero di tasti o di dip switch) è facile riconoscere cosa si cerca.
    Ho creato quindi il relativo campo su http://veronacitysera.altervista.org...lli2/index.php, ma differenza degli altri parametri un telecomando può essere SENZA dip switch, pensavo che la cosa non avrebbe avuto importanza e ho creato una voce "senza" diversa da zero
    Codice HTML:
      <select name="dip_telec" class="ricerca-prodotti-input">
        <option value="">---</option>
        <option value="senza">Senza</option>
        <option value="8">8</option>
        <option value="10">10</option>
        <option value="12">12</option>
      </select>
    ho naturalmente aggiunto un campo ai dati cercati dal php, sono su http://veronacitysera.altervista.org...ecomandi01.txt

    Codice:
    ADHER|A433 - 433,92MHz|adher-a433-433.92mhz.html|images/Adher-A433--433.92Mhz-1-.jpg|1|bianco|433.92MHz|Codice fisso|8
    APRIMATIC|TSM/A - 305MHz|aprimatic-tsm-a---305mhz.html|images/Aprimatic-TSM-A-305MHz-3-.jpg|2|arancio|305MHz|Codice fisso|10
    ELVOX|ET03 - 433.92MHz|elvox-et03-433.92mhz.html|images/Elvox-ET-03-433.92MHz-1-.jpg|2|nero|433.92MHz|Codice fisso|10
    ELVOX|ET04 - 433.92MHz|elvox-et04-433.92mhz.html|images/Elvox-ET-04-433.92MHz--1-.jpg|4|nero|433.92MHz|Codice fisso|10
    ELVOX|ZT03 - 433.92MHz|elvox-zt03-433.92mhz.html|images/Elvox-zt03-433.92MHz.jpg|2|rosso|433.92MHz|Codice fisso|10
    ELVOX|ZT04 - 433.92MHz|elvox-zt04-433.92mhz.html|images/elvox-ZT04-433.92MHz.jpg|4|rosso|433.92MHz|Codice fisso|10
    PROMATER|1 - 224.7MHz|promater-1---224.700mhz.html|images/PROMATER-1--224.700MHz.jpg|1|nero|224.70MHz|Codice fisso|10
    PROMATER|2 - 224.7MHz|promater-2---224.700mhz.html|images/PROMATER-2--224.700MHz.jpg|2|nero|224.70MHz|Codice fisso|10
    TELCOMA|RCKT2m-white - 30.875MHz|rckt2m-white-30.875mhz.html|images/rckt2m-white-30.875MHz.jpg|2|bianco|30.875|Codice fisso|10
    TELCOMA|RCKT4m-white - 30.875MHz|rckt4m-white-30.875mhz.html|images/rckt4m-white-30_9vw75ai8.875MHz.jpg|4|bianco|30.875|Codice fisso|10
    ACM|TX Copy|tx-copy.htm|images/TX-Copy-Bicanale-fm-433,92-.jpg|2|arancio|433.92MHz|Rolling Code|senza
    ACM|TX Dip|tx-dip.html|images/TX-Dip.jpg|2|arancio|433.92MHz|Codice fisso|10
    ACM|TX2 Small|tx2-small---solo-foto.html|images/TX2-SMALL-Bicanale-fm-433,9.jpg|2|arancio|433.92MHz|Rolling Code|senza
    ACM|TX4|tx4---solo-foto.html|images/tx4-retro.jpg|4|grigio|433.92MHz|Rolling Code|senza

    E aggiunto i parametri di ricerca nel PHP (http://veronacitysera.altervista.org...-ricerca01.php)

    Codice PHP:
    <?php
    $marca 
    = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any';
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';
    $freq_telec = isset($_GET['freq_telec']) && !empty($_GET['freq_telec']) ? strtolower($_GET['freq_telec']) : 'any';
    $codif_telec = isset($_GET['codif_telec']) && !empty($_GET['codif_telec']) ? strtolower($_GET['codif_telec']) : 'any';
    $dip_telec = isset($_GET['dip_telec']) && !empty($_GET['dip_telec']) ? strtolower($_GET['dip_telec']) : 'any';

    $items file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach (
    $items as $record) {  
        
    $data explode('|'$record);  
        if ((
    $marca === 'any' || strtolower($data[0]) == $marca)
         && (
    $numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
         && (
    $colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
         && (
    $freq_telec === 'any' || strtolower($data[6]) == $freq_telec)
         && (
    $codif_telec === 'any' || strtolower($data[7]) == $codif_telec)
         && (
    $dip_telec === 'any' || strtolower($data[8]) == $dip_telec)
        ) {  
            
    $results[] = [  
                
    'marca' => $data[0],  
                
    'modello' => $data[1],  
                
    'link' => $data[2],  
                
    'immagine' => $data[3],  
                
    'numero_tasti' => $data[4], 
                
    'colore_tasti' => $data[5],   
                
    'freq_telec' => $data[6], 
                
    'codif_telec' => $data[7], 
                
    'dip_telec' => $data[8
            ];  
        }  
    }  

    header('Content-Type: application/json');  
    echo 
    json_encode($results);  
    ?>
    Avevo avuto dei problemi (una virgola mancante, non indicavo il path del file del database etc.) ma tutto funziona al momento...

    Perl debbo ancora fare la pagina con tutti i prodotti e tutte le caratteristiche, c'è la possibilità di un ordinamento (sort) in stile excel? Cioè se voglio ordinare per una categoria o l'altra? Per il momento i dati sono nell'ordine in cui sono inseriti...

  25. #55
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Perl debbo ancora fare la pagina con tutti i prodotti e tutte le caratteristiche, c'è la possibilità di un ordinamento (sort) in stile excel? Cioè se voglio ordinare per una categoria o l'altra? Per il momento i dati sono nell'ordine in cui sono inseriti...
    Certo, ci sono due possibilità:
    • realizzare l'ordinamento tramite JavaScript
    • prevedere la possibilità di ordinare i dati tramite PHP

    In JavaScript è più semplice e ti permette di realizzare l'ordinamento interattivo, ovvero ordinare gli stessi dati in base a criteri diversi al click del mouse. Con PHP dovresti invece effettuare una nuova chiamata AJAX ogni volta che vuoi ordinare.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  26. #56
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Ok, partiamo dall'inizio, la lettura di tutti i dati (che sarebbe uguale a quella del motore di ricerca senza filtri ma ho provato a estrapolare con un for-next)
    Codice PHP:
    <?php 
    $var2
    =file("database/telecomandi01.txt");
    $i=count($var2);//
    @fclose($telecomandi);
    $telecomandi file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES); 
    for(
    $a=0$a<$i$a++){

    $dati_telecomando explode('|'$telecomando); 

    echo 
    $a " <a href=\"$dati_telecomando[2]\">"
    echo 
    " <img src=\"$dati_telecomando[3]\" alt=\"$dati_telecomando[0] $dati_telecomando[1]\" title=\"$dati_telecomando[0] $dati_telecomando[1]\" width=\"150\">"
    echo 
    "<br\>"

    echo 
    "<h2 class=\"nome_telecomando\">" $dati_telecomando[0] . "</h2> - " $dati_telecomando[1];  
    echo 
    " </a>"
    echo 
    "<br\>"
    echo 
    "numero tasti " $dati_telecomando[4];
    echo 
    "<br\>"
    echo 
    "colore tasti " $dati_telecomando[5];
    echo 
    "<br\>"
    echo 
    "frequenza " $dati_telecomando[6];
    echo 
    "<br\>"
    echo 
    "tipo codifica " $dati_telecomando[7];
    echo 
    "<br\>"
    }
    ?>
    Apro il file, lo chiudo, conto le righe
    Riapro il file, faccio un ciclo for-next stampo le righe
    ... non appare nulla.
    Il contatore è giusto, ho letto le righe ma non stampa i dati (e ignora i <BR>
    ... dove sbaglio?

  27. #57
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    Anziché rifare tutto da zero puoi utilizzare il motore di ricerca per recuperare, tramite AJAX, tutti i risultati e mostrarli con JavaScript in maniera simile a quanto succede nella pagina dei risultati:
    Codice:
    function mostra_telecomandi(telecomandi) {
        var container = $('#telecomandi');
        container.empty();
    
        for (var i = 0; i < telecomandi.length; ++i) {
            // eccetera...
        }
    }
    
    $(function () {
        $.get('motore-ricerca.php', {}, mostra_telecomandi);
    });

    Se vuoi comunque usare PHP sfrutta il fatto, da te già osservato, che la procedura è analoga a quella già realizzata in motore-ricerca.php, senza "inventare" codice nuovo:
    Codice PHP:
    // Recupera i dati
    $items file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES);   
    $results = [];
    foreach (
    $items as $record) {
        
    $data explode('|'$record);
        
    $results[] = [
            
    'marca' => $data[0],
            
    'modello' => $data[1],
            
    'link' => $data[2],
            
    'immagine' => $data[3],
            
    'numero_tasti' => $data[4],
            
    'colore_tasti' => $data[5],
            
    'frequenza' => $data[6],
            
    'codifica' => $data[7],
            
    'dip' => $data[8]
        ];
    }

    // Mostra i dati
    for ($i 0$i count($results); ++$i) {
        
    $telecomando $results[$i];
        echo 
    $i "<a href=\"" $telecomando['link'] . "\">"
           
    "<img src=\"" $telecomando['immagine'] . "\" alt=\"" $telecomando['marca'] . " " $telecomando['modello'] . "\" title=\"" $telecomando['marca'] . " " $telecomando['modello'] . "\" width=\"150\">"
           
    "<br/>"
           
    "<h2 class=\"nome_telecomando\">" $telecomando['marca'] . "</h2> - " $telecomando['modello']
           . 
    "</a>"
           
    "<br/>"
           
    "numero tasti " $telecomando['numero_tasti']
           . 
    "<br/>"
           
    "colore tasti " $telecomando['colore_tasti']
           . 
    "<br/>"
           
    "frequenza " $telecomando['frequenza']
           . 
    "<br/>"
           
    "tipo codifica " $telecomando['codifica']
           . 
    "<br/>";


    Vediamo comunque perché il tuo codice non funziona.
    Codice PHP:
    $var2=file("database/telecomandi01.txt");
    $i=count($var2);//
    @fclose($telecomandi);
    $telecomandi file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES); 
    Stai leggendo due volte il file database/telecomandi01.txt, ce n'è una di troppo.
    Presta attenzione ai nomi degli identificatori che usi: che vuol dire $var2? Variabile 2, cioè "qualsiasi cosa numero 2". Molto meglio il nome $telecomandi che hai usato dopo. Lo stesso per $i: il nome suggerisce sia l'indice di un ciclo for, ma non lo è, è il numero di telecomandi, quindi dovrebbe chiamarsi $numero_telecomandi. Comunque viene utilizzato solo come limite di un ciclo, quindi non serve nemmeno creare una variabile.
    Stai chiudendo un descrittore di file che non è un descrittore di file e non è mai stato aperto. Ma, cosa più grave, stai chiedendo a PHP di non mostrarti messaggi d'errore (attraverso l'operatore @). PHP è pronto a dirti "guarda che stai chiamando fclose passandole un vettore, stai sbagliando qualcosa", ma tu non gli presti ascolto .
    L'operatore @ è il male. Se ci sono errori tu vuoi che ti vengano mostrati.


    Codice PHP:
    $dati_telecomando explode('|'$telecomando); 
    $telecomando non esiste, quindi l'explode restituisce un vettore vuoto. Dovrebbe essere $dati_telecomando = explode('|', $telecomandi[$a]);


    Il contatore è giusto, ho letto le righe ma non stampa i dati (e ignora i <BR>
    Stai scrivendo <br\> anziché <br/> .

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  28. #58
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    34

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Anziché rifare tutto da zero puoi utilizzare il motore di ricerca per recuperare, tramite AJAX, tutti i risultati e mostrarli con JavaScript in maniera simile a quanto succede nella pagina dei risultati:
    Codice:
    function mostra_telecomandi(telecomandi) {
        var container = $('#telecomandi');
        container.empty();
    
        for (var i = 0; i < telecomandi.length; ++i) {
            // eccetera...
        }
    }
    
    $(function () {
        $.get('motore-ricerca.php', {}, mostra_telecomandi);
    });
    E i vantaggi e gli svantaggi quali sono?
    Va in una nuova pagina, probabilmente accessibile solo a me. L'unica cosa in comune è il database.
    Riusando lo stesso codice che vantaggi ho? (a parte il fatto che è già fatto)
    Non ho più risultati col PHP? Non mi serve una pagina dinamica, ma un elenco...
    O meglio, magari ordino i dati in base a precisi parametri, ma non mi serve una pagina che si aggiorna automaticamente....

    Se vuoi comunque usare PHP sfrutta il fatto, da te già osservato, che la procedura è analoga a quella già realizzata in motore-ricerca.php, senza "inventare" codice nuovo:
    Codice PHP:
    // Recupera i dati
    $items file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES);   
    $results = [];
    foreach (
    $items as $record) {
        
    $data explode('|'$record);
        
    $results[] = [
            
    'marca' => $data[0],
            
    'modello' => $data[1],
            
    'link' => $data[2],
            
    'immagine' => $data[3],
            
    'numero_tasti' => $data[4],
            
    'colore_tasti' => $data[5],
            
    'frequenza' => $data[6],
            
    'codifica' => $data[7],
            
    'dip' => $data[8]
        ];
    }

    // Mostra i dati
    for ($i 0$i count($results); ++$i) {
        
    $telecomando $results[$i];
        echo 
    $i "<a href=\"" $telecomando['link'] . "\">"
           
    "<img src=\"" $telecomando['immagine'] . "\" alt=\"" $telecomando['marca'] . " " $telecomando['modello'] . "\" title=\"" $telecomando['marca'] . " " $telecomando['modello'] . "\" width=\"150\">"
           
    "<br/>"
           
    "<h2 class=\"nome_telecomando\">" $telecomando['marca'] . "</h2> - " $telecomando['modello']
           . 
    "</a>"
           
    "<br/>"
           
    "numero tasti " $telecomando['numero_tasti']
           . 
    "<br/>"
           
    "colore tasti " $telecomando['colore_tasti']
           . 
    "<br/>"
           
    "frequenza " $telecomando['frequenza']
           . 
    "<br/>"
           
    "tipo codifica " $telecomando['codifica']
           . 
    "<br/>";

    Mi sembra di conoscere questo codice...


    Vediamo comunque perché il tuo codice non funziona.
    Codice PHP:
    $var2=file("database/telecomandi01.txt");
    $i=count($var2);//
    @fclose($telecomandi);
    $telecomandi file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES); 
    Stai leggendo due volte il file database/telecomandi01.txt, ce n'è una di troppo.
    In effetti lo facevo per contare le righe. Non so come mai mi è venuto in mente.

    Presta attenzione ai nomi degli identificatori che usi: che vuol dire $var2? Variabile 2, cioè "qualsiasi cosa numero 2". Molto meglio il nome $telecomandi che hai usato dopo.
    var2 significa (in basic) una qualsiasi variabile usa e getta. Nella fattispecie la seconda variabile usa e getta del progetto.
    Debbo dire che il basic lo imparai nel lontano 1984 (pork 34 anni fa ) sullo ZX Spectrum, per poi passare al Basica, Mbasic, GW-Basic dell'MS-Dos e all'MSX Philips Basic (praticamente identico al GW-Basic).
    Come puoi capire si parla di ricordi di programmazione di 30 anni fa. All'epoca i contatori di stringhe si facevano in modi assurdi... Ogni tanto mi viene da dichiarare le variabili e mettere i numeri di linea...

    Lo stesso per $i: il nome suggerisce sia l'indice di un ciclo for, ma non lo è, è il numero di telecomandi, quindi dovrebbe chiamarsi $numero_telecomandi. Comunque viene utilizzato solo come limite di un ciclo, quindi non serve nemmeno creare una variabile.
    Stai chiudendo un descrittore di file che non è un descrittore di file e non è mai stato aperto. Ma, cosa più grave, stai chiedendo a PHP di non mostrarti messaggi d'errore (attraverso l'operatore @). PHP è pronto a dirti "guarda che stai chiamando fclose passandole un vettore, stai sbagliando qualcosa", ma tu non gli presti ascolto .
    L'operatore @ è il male. Se ci sono errori tu vuoi che ti vengano mostrati.
    Ok, li ho fatti tutti gli errori...


    Codice PHP:
    $dati_telecomando explode('|'$telecomando); 
    $telecomando non esiste, quindi l'explode restituisce un vettore vuoto. Dovrebbe essere $dati_telecomando = explode('|', $telecomandi[$a]);



    Stai scrivendo <br\> anziché <br/> .
    Ok, ripartiamo dal codice funzionante php
    Diciamo che voglio separare tra di loro le marche con il nome in H2 e una linea
    Il metodo che userei io è:

    Codice PHP:
     [...]
    If (
    $telecomando['marca'] !=  $telecomandoprec['marca']){
    echo 
    "<hr><h2 class=\"nome_telecomando\">".$telecomando['marca'] . "</h2><br/>";
    }

    [...] 
    solo che debbo memorizzare in $telecomandoprec['marca'] la marca del telecomando letta nella riga precedente...
    Normalmente passerei la variabile alla fine del loop di stampa a video
    Naturalmente il codice non funziona appena metto la stringa
    Codice PHP:
        $telecomandoprec['marca'] = $telecomando['marca']; 
    Il codice è:
    Codice PHP:
    <?php 
    // Recupera i dati 
    $items file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES);    
    $results = []; 
    foreach (
    $items as $record) { 
        
    $data explode('|'$record); 
        
    $results[] = [ 
            
    'marca' => $data[0], 
            
    'modello' => $data[1], 
            
    'link' => $data[2], 
            
    'immagine' => $data[3], 
            
    'numero_tasti' => $data[4], 
            
    'colore_tasti' => $data[5], 
            
    'frequenza' => $data[6], 
            
    'codifica' => $data[7], 
            
    'dip' => $data[8
        ]; 


    // Mostra i dati 
    for ($i 0$i count($results); ++$i) { 

            If (
    $telecomando['marca'] !=  $telecomandoprec['marca']){
            echo 
    "<hr><h2 class=\"nome_telecomando\">".$telecomando['marca'] . "</h2><br/>";
            }

        
    $telecomando $results[$i];
        echo 
    $i "<a href=\"" $telecomando['link'] . "\">" 
           
    "<img src=\"" $telecomando['immagine'] . "\" alt=\"" $telecomando['marca'] . " " $telecomando['modello'] . "\" title=\"" $telecomando['marca'] . " " $telecomando['modello'] . "\" width=\"150\">"
           
    "<br/>" 
           
    "<h2 class=\"nome_telecomando\">" $telecomando['marca'] . "</h2> - " $telecomando['modello'
           . 
    "</a>" 
           
    "<br/>" 
           
    "numero tasti " $telecomando['numero_tasti'
           . 
    "<br/>" 
           
    "colore tasti " $telecomando['colore_tasti'
           . 
    "<br/>" 
           
    "frequenza " $telecomando['frequenza'
           . 
    "<br/>" 
           
    "tipo codifica " $telecomando['codifica'
           . 
    "<br/>";
           . 
    "numero dip " $telecomando['dip'
           . 
    "<br/>"
        
    $telecomandoprec['marca'] = $telecomando['marca'];
    }  
    ?>
    Parse error: syntax error, unexpected '.' in /membri/veronacitysera/caravelli2/--pagina-prodotti.php on line 1103
    Ultima modifica di legaitalianalibera : 21-01-2019 alle ore 17.42.45

  29. #59
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,264

    Predefinito

    E i vantaggi e gli svantaggi quali sono?
    Va in una nuova pagina, probabilmente accessibile solo a me. L'unica cosa in comune è il database.
    Riusando lo stesso codice che vantaggi ho? (a parte il fatto che è già fatto)
    Non ho più risultati col PHP? Non mi serve una pagina dinamica, ma un elenco...
    O meglio, magari ordino i dati in base a precisi parametri, ma non mi serve una pagina che si aggiorna automaticamente....
    I vantaggi principali sono proprio che è già fatto e che lavorando in JavaScript diventa semplice realizzare l'ordinamento, anche dinamico.
    Lo svantaggio nell'usare PHP è la duplicazione del codice. Se un domani aggiungi un attributo nel tuo file di testo dovrai andare a modificare il PHP del motore di ricerca (e questo e inevitabile), più tutte le "copie" come questa. È facile dimenticarsi di modificarne una. Però c'è rimedio, si può prendere il codice che esegue la lettura con i filtri, astrarlo in una funzione, e fare sì che sia il motore di ricerca che la pagina a cui stai lavorando si basino su quella funzione.


    var2 significa (in basic) una qualsiasi variabile usa e getta. Nella fattispecie la seconda variabile usa e getta del progetto.
    Debbo dire che il basic lo imparai nel lontano 1984 (pork 34 anni fa ) sullo ZX Spectrum, per poi passare al Basica, Mbasic, GW-Basic dell'MS-Dos e all'MSX Philips Basic (praticamente identico al GW-Basic).
    Come puoi capire si parla di ricordi di programmazione di 30 anni fa. All'epoca i contatori di stringhe si facevano in modi assurdi... Ogni tanto mi viene da dichiarare le variabili e mettere i numeri di linea...
    Quanti ricordi !!!


    Diciamo che voglio separare tra di loro le marche con il nome in H2 e una linea
    [...]
    In pratica vuoi raggruppare i dati per marca. Ci sono due approcci più semplici:
    • usare un database MySQL che supporta nativamente tutte le operazioni che stiamo facendo a mano, incluso il raggruppamento
    • lavorare preventivamente sul vettore $results in modo da creare un secondo vettore già suddiviso per marche

    L'approccio numero due consiste in:
    Codice PHP:
    <?php 
    // Recupera i dati (questo non è stato modificato)
    $items file('database/telecomandi01.txt'FILE_IGNORE_NEW_LINES);
    $results = [];
    foreach (
    $items as $record) {
        
    $data explode('|'$record);
        
    $results[] = [
            
    'marca' => $data[0],
            
    'modello' => $data[1],
            
    'link' => $data[2],
            
    'immagine' => $data[3],
            
    'numero_tasti' => $data[4],
            
    'colore_tasti' => $data[5],
            
    'frequenza' => $data[6],
            
    'codifica' => $data[7],
            
    'dip' => $data[8]
        ];
    }

    // Raggruppa i dati per marca
    $grouped_results = [];
    foreach (
    $results as $result) {
        
    $grouped_results[$result['marca']][] = $result;
    }

    // Stampa i risultati: un "blocco" per ogni marca, ogni blocco contiene i telecomandi
    foreach ($grouped_results as $marca => $telecomandi) {
        
    // Stampa la marca
        
    echo "<hr><h2 class=\"nome_telecomando\">" $marca "</h2><br/>";

        
    // Stampa i telecomandi di quella marca (a titolo di esempio mostra solo marca e modello)
        
    foreach ($telecomandi as $telecomando) {
            echo 
    $telecomando['marca'] . "-" $telecomando['modello'] . "<br/>";
        }
    }

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


Pagina 2 di 2 PrimoPrimo 12

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •