Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema con strpos()

  1. #1

    Problema con strpos()

    Ciao a tutti, sto cercando di creare un autocompletamento di un input text.
    All' onkeypress dell' input lancio una funzione che tramite ajax richiede al server un file php passando con get il valore inserito nell' input. Non riesco a capire perch� appena aperta la pagina, se nel campo di input inserisco ad esempio "R" mi ritorna questo errore:
    Warning: strpos(): Empty needle in C:\xampp\htdocs\test\ajax.php on line 9
    se invece inserisco "Ro" sembrerebbe funzionare perch� mi crea l' opzione di scelta "Paolo Rossi".
    La cosa strana � che se non riaggiorno la pagina e reinserisco nuovamente "R" non mi da pi� l' errore (ma comunque non mi crea l' opzione di scelta).
    Posto il codice grazie a tutti.
    Codice PHP:
    //Array con i nomi che saranno oggetto di ricerca della stringa 
    $myarray = array("Paolo Rossi""Lino Banfi""Paolo Villaggio""Maurizio Crozza");
    //Conterra' le option del datalist
    $datalist "";
    foreach(
    $myarray as $key => $value)
    {   
      
    //Se trova l' occorrenza aggiungo una voce al datalist    
      
    if(strpos($myarray[$key], $_GET["valore"]))    
      
    $datalist .= "<option>".$myarray[$key]."</option>\n";
    }
    $contentString "<datalist id=\"team_list\">".$datalist."</datalist>\n";
    print 
    $contentString

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova questo e vedrai che con onkeypress hai un carattere di ritardo dopo ogni battitura. Cio' significa che il primo richiamo allo script php si fa con un valore vuoto.

    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
    <
    head>
    <
    title>Untitled</title>
    </
    head>
    <
    body>
    <
    input type="text" onkeypress="document.getElementById('mydiv').innerHTML = this.value" /><br/>
    <
    div id='mydiv'></div>
    </
    body>
    </
    html
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Ciao Badaze e grazie per la risposta. Nel div myDiv ci va a finire l' output del file php, nell' onkeypress devo richiamare la funzione process() che fa la chiamata ajax:

    codice:
    <script src='ajax.js'></script>
    <script>
    function process()
    {
       value = document.getElementById('value').value;
       ajaxRequest('GET', 'ajax.php?valore='+value, 'myDiv', '');
    }
    </script>
    <body>
    <input type="text" id="value" list="team_list" onkeypress="process()">
    <div id="myDiv"></div>

  4. #4
    devi farlo sull'onKeyUp il listener e cmq sia lato javascript che lato php assicurati che il valore non sia vuoto perchè se è vuoto non hai niente da processare e quindi 1) ti eviti una chiamata ajax e 2) eviti un problema lato php e 3) dovresti fare anche in modo di evitare chiamate ajax multiple perchè se uno scrive abbastanza veloce ti parte una chiamata ajax per ogni lettera che scrivi e allora si che è casino puro.

    Insomma, usa jQuery, es https://jqueryui.com/autocomplete/
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da camionistaxcaso Visualizza il messaggio
    Ciao Badaze e grazie per la risposta. Nel div myDiv ci va a finire l' output del file php, nell' onkeypress devo richiamare la funzione process() che fa la chiamata ajax:

    codice:
    <script src='ajax.js'></script>
    <script>
    function process()
    {
       value = document.getElementById('value').value;
       ajaxRequest('GET', 'ajax.php?valore='+value, 'myDiv', '');
    }
    </script>
    <body>
    <input type="text" id="value" list="team_list" onkeypress="process()">
    <div id="myDiv"></div>
    Quello che volevo farti capire è che con onkeypress sei sempre in ritardo di una mossa. In process(), value avrà un valore di un carattere quando avrai battuto il secondo, avrà un valore di due caratteri quando avrai battuto il terzo, etc...
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Quello che volevo farti capire è che con onkeypress sei sempre in ritardo di una mossa. In process(), value avrà un valore di un carattere quando avrai battuto il secondo, avrà un valore di due caratteri quando avrai battuto il terzo, etc...

    Quindi controllo che l'utente abbia inserito qualche lettera prima di fare partire la chiamata?

    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    devi farlo sull'onKeyUp il listener e cmq sia lato javascript che lato php assicurati che il valore non sia vuoto perchè se è vuoto non hai niente da processare e quindi 1) ti eviti una chiamata ajax e 2) eviti un problema lato php e 3) dovresti fare anche in modo di evitare chiamate ajax multiple perchè se uno scrive abbastanza veloce ti parte una chiamata ajax per ogni lettera che scrivi e allora si che è casino puro.

    Insomma, usa jQuery, es https://jqueryui.com/autocomplete/
    Preferisco rimanere sul classico per imparare, poi in futuro vedrò anche jquery
    Ultima modifica di camionistaxcaso; 04-12-2016 a 13:12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.