Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: manipolare una stringa

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008

    manipolare una stringa

    Salve , devo implementere un codice che suggerisce le parole da scrivere in un input text e quindi ho l' esigenza di interrogare il db mysql in un campo specifico dove ho inserito del testo ed estrapolare ogni parola (unica) con length >2, per esempio

    nome campo = descrizione
    record1 = scheda di rete wireles
    record2 = scheda madre micro atx
    record3 = scheda di memoria ddr2 2 mb

    la mia interrogazione deve dare come risultato

    $result = scheda rete wireles madre micro atx memoria ddr2

    a grandi linee è quello che mi serve

  2. #2
    se ho capito bene quello che vuoi realizzare, devi utilizzare ajax.

    io utilizzo le librerie script aculo us

    guarda la demo se è quello che vuoi

    http://demo.script.aculo.us/ajax/autocompleter
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008
    Si è cosi ma il codice che ho io ha scritto un array con i vocaboli invece io l' ho modificato per passargli i vocaboli coem parametro della funzione quindi mi serve in php un ciclo di lettura per preparare il parametro

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008
    Up ma forse non si puo fare

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Gia ajax e' la sol piu' efficace per fare questo tipo di ricerche
    se fai una cosa del genere:

    <input type="text" onkeyup="handleChar( event , this)" />

    a fianco ti fai un div con elementi selezionabili dove vai a stampare le varie possibilita'.
    La funzione js handleChars parte quando si rilascia un tasto mentre si scrive nell'input, a sto punto puoi controllare tutti i codici dei caratteri e decidere se inviare l'ajax. A quel punto con php ti fai rispondere sempilcemente il codice html da inserire nel div. Sol pratica e veloce

    function handleChar( e , fld )
    {
    if(window.event) // IE
    keynum = e.keyCode;
    else if(e.which) // Netscape/Firefox/Opera
    keynum = e.which;

    // Key codes
    // avoid " arrows([37,40]) , caps(20) , maiusc(16) , home(36) , pgup(33) ,
    // pgdown(34) , end(35) " keys.
    str = this.value;
    if( str.length>3)
    {/*FAI COSE*/}
    }

    Con una funzione js del genere ti puoi gestire l'input inserito sulla pagina e genere le ajax query con le lib che vuoi.
    Ho gia' implementato cose del genere con le mie lib per ajax e sono estremamente performati prova con le mootols o senno ti scrivi te un po' di codice per ajax tanto non e' difficile.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008
    io ho gia una struttura ajax che si ocupa di farmi avere il suggerimento mentre scrivo ma il mio problema è che nel file js i suggerimenti sono inseriti in un array quindi se io carico un db con 20.000 record dovrei controllare a mano i 20.000 record e ricompilare l' array con le parole uniche di questi record. Questo mi viene un po scomodo quindi cerco di creare un ciclo in php che legga il db e mi compili un nuovo array con i suggerimenti giusti cioe suggerisco solo quello che potrai trovare sicuramente.

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    uhm beh come vuoi alla fine ti stai complicando tanto la vita.

    alla fine se ho capito bene nella tabella e' cosi' fatta

    descrizion record1 record2 etc...

    quindi cosa succede a sto punto

    hai delle righe tipo

    "schede madri asus" "modello1" "descr_mod1"
    "schede madri intel" "modello1" "descr_mod1"
    "schede madri intel" "modello2" "descr_mod2"
    "schede madri intel" "modello3" "descr_mod3"
    "schede madri intel" "modello4" "descr_mod4"

    Giusto?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008
    Codice PHP:
    //Crea suggerimento


        
    $suggQuery="SELECT * FROM prodotti ORDER by ProductName";
            
        
    $suggSql=mysql_query($suggQuery);
        
        while (
    $suggResult mysql_fetch_array($suggSql)) {

        
    $suggerimento $suggerimento " " $suggResult['ProductName'];
        
        
    $contaSugg $contaSugg +1;

    }



        
    //    
        
    for ( $conta=0$conta<=$contaSugg$conta++)
    {

        
    $suggerimenti explode(" "$suggerimento);
        if (
    strlen($suggerimenti[$conta])>6){
        
    $arraySugg $arraySugg "\"" $suggerimenti[$conta] . "\",";
        }
        
        }
        
    $suggerimenti"[" $arraySugg " \"fine\"]"


    mi creo il mio array con parole con almeno 7 lettere ma io vorrei evitare di avere un array tipo ["memoria","memoria","memoria","memoria","memoria", "memoria", "desktop","desktop","desktop"]
    che non mi è utile

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    ah ok allora ci sono un paio di sol :

    modifica la query invece di fare una select * ebbasta fai una cosa del genere

    $suggQuery="SELECT DISTINCT(ProductName) FROM prodotti ORDER by ProductName";

    Questa query praticamente piglia solo i productName diversi tra loro evitando le replicazioni.

    Seconda soluzione, da come hai messo la tebella sql non e' che sia prorpio il max,
    io opterei per una soluzione diversa che inoltre ti garantisce maggiore flessibilita' e minor codice.
    Crei delle tabelle diverse
    Codice PHP:

    table products
    (
    id ..... ,
    p_name       varchar(50);
    .....
    );

    table lvl1_prod_desc(

    id.... ,
    desc_token text,
    prod_id int,
    foreign key(prod_idreferences products(id)
    on delete [ci metti quello che vuoi usa anche "cascade"on change [come prima]
    );

    table lvl2_prod_desc(
    [
    come sopra solo che linka lvl1 inv di products.]
    ); 
    Questa sol ti consente di aggiungere tte le tabelle di descrizioni che vuoi e di gestirtele come ti pare con tanto di filtri per le ricerche etc etc. Puoi anche inserire dei campi interi per gestire la pertinenza con punteggi etc etc.

    Cmq se usi il tabellone da te creato il comando distinct ti consente di evitare le replicazioni dei ProductName.

    Alla fine il mio consiglio e' di modificare la strutture delle tabelle perche' cosi' puoi gestire meglio i dati, e con uno script semplice puoi passare dalla tabella originale alla struttura modificata.
    Cmq a te la scelta.

    EDIT:
    puoi senno modificare il ciclo che stampa i valori
    Codice PHP:

    $last_sugg
    ="";
        while (
    $suggResult mysql_fetch_array($suggSql)) 
       {

          if( 
    $last_sugg!=$suggResult['ProductName'] )
                
    $suggerimento .= " " $suggResult['ProductName'];
          
    $last_sugg=$suggResult['ProductName'];
          
    $contaSugg ++;

       } 
    Questa modifica sul while che scorre i ris della query ti consente di elimire le replicazioni.
    Un consiglio gli operatori ++ , += , .= sono comodi usali. Ti tegono il codice piu' compatto e pulito. Soprattutto nel momento in cui devi concatenare stringhe.
    Infatti se fai
    $str = "ciao";
    $str .= " gatto";

    Stamperai ciao gatto, solo che vedi ad occhio dove hai effettuato un concatenamento piuttosto di un'assegnazione.
    Soprattutto in faase di debug e' comodo usare questo tipo di operatori.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008
    Riecomi grazie ai suggerimento ho tirato fuori questo codice , tieni presente che ho cominciato ad avvicinarmi a php la settimana scorsa e funziona MA e lento al primo avvio perche poi memorizzo in una variabile di sessione. Cosa posso fare per renderlo piu veloce?

    Codice PHP:
    <?
    session_start
    ();


    //CREO I SUGGERIMENTI

        
    $suggQuery="SELECT DISTINCT(ProductName) FROM prodotti ORDER by ProductName";
            
        
    $suggSql=mysql_query($suggQuery);
        
        while (
    $suggResult mysql_fetch_array($suggSql)) {

        
    $suggerimento .= strtolower($suggResult['ProductName']) . " " ;
        
        
    $contaSugg $contaSugg +1;
        
        }

    //INSERISCO TUTTI I SUGGERIMENTI IN UNA TABELLA DEL db
        
        
    for ( $conta=0$conta<=$contaSugg$conta++){
        
        
    $suggerimenti explode(" "$suggerimento);
        
        if (
    strlen($suggerimenti[$conta])>5){
        
        
    $insertQuery "INSERT INTO suggerimenti  (parola) VALUES ('$suggerimenti[$conta]')";
        
        
    mysql_query($insertQuery);
        
        }
        }
        
    //RECUPERO I SUGGERIMENTI SENZA PAROLE DOPPIE DALLA TABELLA APPENA POPOLATA
    //E CREO IL PARAMETRO PER LA FUNZIONE JS
        
        
    $suggParola="SELECT DISTINCT(parola) FROM suggerimenti ORDER by parola";
            
        
    $suggParolaSql=mysql_query($suggParola);
        
        while (
    $suggParolaResult mysql_fetch_array($suggParolaSql)) {

        
    $suggerimentoParola .= "\"" strtolower($suggParolaResult['parola']) . "\", " ;
        
        
    $contaSugg $contaSugg +1;
        
        }
        
        
    $suggerimentoParola "[" $suggerimentoParola " \"fine\"]";
        
    //SVUOTO LA TABELLA
        
        
    mysql_query("DELETE FROM `suggerimenti`");
        
    ?>

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