Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [AJSHP] livesearch con chiamata a DB

    Dopo il simpaticissimo Hello World che ho realizzato negli scorsi giorni, ho deciso di fare un livesearch.

    Quando si digita qualcosa all'interno di campo txt, si fanno chiamate al database il quale restituisce istantaneamente delle risposte in base alla stringa immessa.

    Vediamo un po' la classe php
    livesearch.class.php
    Codice PHP:
    <?php
    // livesearch.class.php
    class livesearch{
        function 
    livesearch(){
            
    mysql_connect('host','user','pwd');
            
    mysql_select_db('db');
        }
        
        function 
    AJSHP_SCHEMA() {
            return array(
    "search_AJSHP");
        }
        
        function 
    search_AJSHP($str){
            
    $query mysql_query("SELECT * FROM rubrica WHERE nome like '%$str%'");
            
    $riga '<table style="border:1px solid black">';
            if (
    mysql_num_rows($query) > 0){
                
    $riga .= '<tr style="font-weight:bold">
                            <td>Nome</td><td>Cognome</td>'
    ;
                while(
    $row mysql_fetch_array($query))
                    
    $riga .= '<tr>
                                <td style="font-size:10px;"> '
    .$row['nome'].' </td>
                                <td style="font-size:10px; padding-left: 10px"> '
    .$row['cognome'].'</td>
                            </tr>'
    ;
                
    $riga .= '</table>';
                return 
    $riga;
            }
            else
                return 
    'Nessun item trovato';
            
        }
    }

    ?>
    Il codice e' abbastanza semplice (per chi ha dimestichezza con le classi).
    Il metodo search_AJSHP fa tutto il lavoro: prende la stringa in input dal txtbox fa la richiesta al db e restituisce il risultato.

    vediamo ora il file livesearch.html
    codice:
    <html>
    <head>
    <title>© AJSHP Project :: LIVE SEARCH example</title>
    <script type="text/javascript" src="jsclasses/AJSHP.js"></script>
    <script type="text/javascript">
    	NetServices.setDefaultGatewayUrl('gateway/Gateway.class.php');
    	var connection = NetServices.createGatewayConnection();
    	var listener = new Object();
    	listener.onStatus = function(message) {
    		alert(message);
    	}
    	listener.onService = function(s) {
    		if(s == false)
    			alert('Error, PHP is not working correctly.');
    		this.enabled = s;
    	}
    	listener.search_AJSHP_Result = function(v) {
    		if(document.getElementById)
    			document.getElementById('result').innerHTML = v;
    	}
    	
    	listener.search_AJSHP_Progress = function(p) {
    		if(document.getElementById)
    			document.getElementById('progress').innerHTML =
    			p + '%';
    	}
    	
    	var service = connection.getService('livesearch', listener);
    </script>
    <script type="text/javascript">
    	function trova_AJSHP() {
    		if(document.getElementById) {
    			if(service && listener.enabled) {
    				service.search_AJSHP(document.getElementById('ms').value);
    			}
    		}
    		else
    			alert('please upgrade your browser');
    	}
    	
    	function resetta(){
    		document.getElementById('ms').value = '';
    		document.getElementById('result').innerHTML = '';
    	}
    	function liveSearch(){
    				window.setTimeout("service.search_AJSHP(document.getElementById('ms').value)", 1); 
    			}
    </script>
    </head>
    <body style="font-family:Arial, Helvetica, sans-serif; font-size:10px">
    <div>
    Che stringa vuoi cercare?
    
    <input id="ms" type="text" maxlength="300" value="write something" nkeypress="liveSearch()" autocomplete="off" onkeydown="liveSearch()" />
    
    <input type="button" value="Reset" onClick="resetta()" />
    
     
    
    AJSHP Progression: <span id="progress">0%</span>
    
    
    
    
    <fieldset>
    	<legend>Risultato DB</legend>
    	<span id="result"></span>
    </fieldset>
    </div>
    <div style="font-size:9px; color:#CCCCCC;">Powered by Andrea Perdicchia</div>
    </body>
    </html>
    Per la spiegazione del codice js rimando alla pagina della
    documentazione di ajshp



    Conclusione per Andr3a
    1) Il debug funziona, ma e' molto scomodo.
    1.1 -Non posso controllare gli errori di php e non posso sapere dove vengono generati.
    1.2 -Se voglio debuggare bene quello che succede nella parte html e' impensabile aprire 20 file html... Esempio> in questo caso faccio una richiesta al db con la lettera 'f'... il debug genera un file con 100 campi prelevati dal db con la suddetta lettera. Aggiungo una 'r' il debug genera un altro file... e cosi' via...
    2) Se volessi un preloader grafico ?
    3) Se volessi lavorare con le classi estendibili?

    Per ora e' tutto ...
    ciao
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  2. #2

    Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da Ndr
    Conclusione per Andr3a
    1) Il debug funziona, ma e' molto scomodo.
    1.1 -Non posso controllare gli errori di php e non posso sapere dove vengono generati.
    1.2 -Se voglio debuggare bene quello che succede nella parte html e' impensabile aprire 20 file html... Esempio> in questo caso faccio una richiesta al db con la lettera 'f'... il debug genera un file con 100 campi prelevati dal db con la suddetta lettera. Aggiungo una 'r' il debug genera un altro file... e cosi' via...
    2) Se volessi un preloader grafico ?
    3) Se volessi lavorare con le classi estendibili?
    ad alcune ti posso rispondere io

    1.1) puoi debuggare tranquillamente, infatti basta che ti fai inviare le informazioni di debug insieme al resto delle info. Ma questo, in generale, è una "scomodità" di ajax

    1.2) non ho capito

    2) la classe di andrea ti fa solo da ponte ... quindi puoi anche usare flash per farti il preload ad ogni elemento o un div con una barra di scorrimento o qualsiasi cosa, dipende dalla tua fantasia e dalle tue conoscenze

    3) si, o almeno credo, se però specifici meglio è meglio

  3. #3

    Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da Ndr
    Conclusione per Andr3a
    1) Il debug funziona, ma e' molto scomodo.
    1.1 -Non posso controllare gli errori di php e non posso sapere dove vengono generati.
    1.2 -Se voglio debuggare bene quello che succede nella parte html e' impensabile aprire 20 file html... Esempio> in questo caso faccio una richiesta al db con la lettera 'f'... il debug genera un file con 100 campi prelevati dal db con la suddetta lettera. Aggiungo una 'r' il debug genera un altro file... e cosi' via...
    2) Se volessi un preloader grafico ?
    3) Se volessi lavorare con le classi estendibili?

    Per ora e' tutto ...
    ciao
    1) scomodo ? genera un report come tutti i sistemi fanno, da Apache a chi ti pare ... :master:

    1.1 è scrito nel report l'errore e la linea del file che ti ha dato errore, se sviluppi in E_ALL, come spero tu faccia
    1.2 non sono riuscito a fare una versione con la sfera di cristallo, quindi più che evitare di sovrascrivere files, visto che le chiamate potrebbero essere veramente tante, non so che dire.
    forse un microtime dopo una data con l'ora potrebbe aiutarti a debuggare, vedendolo in lista ordinata dall'alto al basso ? in caso potrei implementarla, sarebbe un attimo

    2 - il preloader grafico lo fai come ti pare, se hai un valore da 0 a 100 non ti serve altro se non una semplicissima equazione.

    esempio: un div che vuoi vada da larghezza 0 a larghezza 200px e mai di più

    qualcosa_Progress = function(p) {
    // x : p = 200 : 100
    p = parseInt((p * 200) / 100);
    div.style.width = p + 'px';
    };


    3) nn hai limiti di classi , le estendibili le fai come tali ... non ho scritto da nessuna parte che AJSHP lavori solo con una classe, ovviamente puoi inizializzare 2 o più variabili diverse a seconda della classe, ti servono listeners diversi oppure lo stesso con tutti i metodi _Result di entrambe (sempre che ti interessi la risposta dei metodi)


    var service = connection.getService('livesearch', listener);
    var anotherService = connection.getService('anotherClass', listener);

    o con listeners dedicati per ogni classe ...

    var service = connection.getService('livesearch', listener1);
    var anotherService = connection.getService('anotherClass', listener2);



    il consiglio è sfruttarne una pilota in grado di usare "milioni di classi" differenti, così fatichi meno in produzione, sia client, che server, per un sistema degradabile
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4

    Re: Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da daniele_dll
    ad alcune ti posso rispondere io

    1.1) puoi debuggare tranquillamente, infatti basta che ti fai inviare le informazioni di debug insieme al resto delle info. Ma questo, in generale, è una "scomodità" di ajax
    Ok ho capito... ma quello che manca e' la visualizzazione dell'errore generato dal server nella parte php. Se sbaglio un punto e virgola o dimentico una parentesi, AJSHP non mi dice dove ho sbagliato... non mi dice che c'e' un syntax error... e' questo il problema.

    1.2) non ho capito
    Scusa, hai ragione...
    Nel file gateway.php, c'e' un opzione di debug che se settata a true crea in una directory tanti file html: uno per ogni chiamata a php (forse!). Non si potrebbe fare un unico file o una stampa a video? Cosi' com'e' adesso e' veramente scomodo aprire tutti quei file...

    2) la classe di andrea ti fa solo da ponte ... quindi puoi anche usare flash per farti il preload ad ogni elemento o un div con una barra di scorrimento o qualsiasi cosa, dipende dalla tua fantasia e dalle tue conoscenze
    Credo di aver risolto in questo modo. Dico "Credo" perche' dovrei testarlo sul web e non in locale.
    codice:
    listener.search_AJSHP_Progress = function(p) {
    		if(document.getElementById)
    			document.getElementById('progress').innerHTML = p + '%';
    			document.getElementById('progress2').innerHTML = '[img]wait.gif[/img]';
    			if (p == 100)
    				document.getElementById('progress2').innerHTML = '';
    	}
    3) si, o almeno credo, se però specifici meglio è meglio
    Ho due classi: una che gestisce le chiamate a mysql (mysql.class.php) e il gestore (search.class.php)
    quindi avrei
    Codice PHP:
    class livesearch extends base_mysql {
     
    ecc...

    ma base_mysql lo devo includere da qualche parte perche' possa funzionare e dove lo faccio?
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  5. #5

    Re: Re: Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da Ndr
    Ok ho capito... ma quello che manca e' la visualizzazione dell'errore generato dal server nella parte php. Se sbaglio un punto e virgola o dimentico una parentesi, AJSHP non mi dice dove ho sbagliato... non mi dice che c'e' un syntax error... e' questo il problema.
    beh ... dovrebbe dirtelo l'ide con cui sviluppi ... o almeno lanciando il file con la classe a vuoto.


    Il report è sugli errori run-time, se la classe non esiste perchè ti scordi le virgole, il report non c'è.

    Vorresti poter gestire comunque il risultato sull'onStatus ? .... si potrebbe fare ...



    per il resto ti cra tanti files quante sono le chiamate, senza il forse, lo fa e basta.
    proponi una soluzione che non disturbi il clients e vedo se posso aiutarti.





    [edit]
    Originariamente inviato da Ndr
    ma base_mysql lo devo includere da qualche parte perche' possa funzionare e dove lo faccio?
    prima di dichiarare la classe ? :master:



    mi sa che hai fatto il passo più lungo della gamba ... e forse AJSHP non è per te la soluzione più adatta


    passa ad AHAH ... o Sajax
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Utente di HTML.it L'avatar di gizax
    Registrato dal
    Jan 2004
    residenza
    Rome
    Messaggi
    386

    Re: Re: Re: Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da andr3a
    passa ad AHAH ... o Sajax
    slurp... ne approfitto subito :-D

    http://sourceforge.net/projects/ahahdegradable

  7. #7

    Re: Re: Re: Re: Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da gizax
    slurp... ne approfitto subito :-D

    http://sourceforge.net/projects/ahahdegradable

    :maLOL: Eri li' pronto come un avvoltoio ehhhh.... cmq l'ho già provato... in maniera semplice... ora lo devo testare con le classi

    Originariamente inviato da andr3a
    o almeno lanciando il file con la classe a vuoto.
    Ok...

    Originariamente inviato da andr3a
    per il resto ti cra tanti files quante sono le chiamate, senza il forse, lo fa e basta.
    Volevo solo una conferma con il forse.

    Originariamente inviato da andr3a
    proponi una soluzione che non disturbi il clients e vedo se posso aiutarti.
    Stavo pensando che ahah, se sbaglio un punto e virgola mostra l'errore al client. Perche'? saranno gli echo al posto dei return? (l'ho buttata li'...).
    E se si facesse che l'onStatus (a debug attivato) conservasse in qualche modo l'errore generato dal server per poi o stamparlo o scriverlo sul file?

    Originariamente inviato da andr3a
    mi sa che hai fatto il passo più lungo della gamba ... e forse AJSHP non è per te la soluzione più adatta
    Guarda che sto criticando quelli che secondo me sono punti di debolezza non perche' mi sono alzato male questa mattina, ma perche' ho pensato che hai fatto proprio un bel lavoro e che magari con un po' di feedback negativi si puo' far crescere il progetto.
    La gestione dell'errore generato dal server e' un utilita' a mio avviso fondamentale per la programmazione in php e per questo, dovrebbe essere corretto.
    Ripeto, la mia critica e' di quelle costruttive e NON distruttive (altrimenti non mi sarei disturbato a postare le mie soluzioni... avrei criticato e basta).
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  8. #8

    Re: Re: Re: Re: Re: Re: [AJSHP] livesearch con chiamata a DB

    Originariamente inviato da Ndr
    magari con un po' di feedback negativi si puo' far crescere il progetto
    sono d'accordo e ti ringrazio per i feedback, però ammetti che la domanda "come faccio a includere altri files" era un pò troppo niubba / fagiana

    require, require_once, include, quello che vuoi, prima della classe o dentro altre classi, puoi farlo senza problemi



    Originariamente inviato da Ndr
    La gestione dell'errore generato dal server e' un utilita' a mio avviso fondamentale per la programmazione in php e per questo, dovrebbe essere corretto.
    il fatto è che tutto sommato non serve a niente, installi FireBug e sai tutto di cosa hai richiesto e di cosa ti è tornato.

    Vero è che avere un'opzione debug anche sul client con eventuali riscontri leggibili potrebbe non essere un'idea malvagia, ci studierò su
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Originariamente inviato da andr3a
    sono d'accordo e ti ringrazio per i feedback, però ammetti che la domanda "come faccio a includere altri files" era un pò troppo niubba / fagiana
    e' vero... era proprio una domanda idiota!!! non mi sono proprio regolato in quell'occasione...


    Ora per farti comprendere meglio la problematica prendo un hello world fatto con ahah.
    Il codice corretto php e' il seguente
    Codice PHP:
    <?
        
    echo "Dal server dico: ".$_POST['valore'];
    ?>
    E fin qui non ci piove... scrivo qualcosa nel campo txt del client, premo il pulsante, faccio la richiesta e il server risponde con la frase "Dal server dico: Hello World"......

    ora nel server commetto l'errore
    Codice PHP:
    <?
        
    echo "Dal server dico: "$_POST['valore'];
    ?>
    Ho tolto il punto di concatenazione... e il server mi risponde visualizzandolo sul client
    codice:
    Parse error: parse error, unexpected T_VARIABLE, expecting ',' or ';' in /Users/a/Sites/prove/ahah/test.php on line 2
    ed e' proprio questo che manca (o non ho capito come visualizzarlo) in ajshp... la visualizzazione dell'errore commesso nella programmazione lato server. In questo modo per me e' moooolto piu' semplice programmare.
    Tuttora se io faccio un errore del genere nella classe utilizzatto ajshp, nel client mi viene visualizzato un alert "C'e' un errore lato php"......
    Si ma dove? mi chiedo... di che tipo?

    Spero solo di essere stato d'aiuto nel farti comprendere la mia problematica.

    ci studierò su
    Fammi e facci sapere...
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  10. #10
    [OT]
    stai in hosting su mac os x?
    [/OT]

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 © 2024 vBulletin Solutions, Inc. All rights reserved.