Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Select dinamiche senza ricaricare la pagina

    Ciao a tutti!

    E' da parecchio tempo (anni) che sogno di realizzare delle select dinamiche che interagiscano con il database. Essendo assolutamente una nullità con javascript mi sono sempre dedicato solo vagamente all'argomento, ma in questi giorni vorrei provare almeno a capire di che cosa si parla... In base a quello che ho capito esiste un sistema che adotta un aggiornamento 'fittizio' lanciato da javascript, un altro che invece punta sulle variabili passate in fase di refresh con $_GET o $_POST. Penso che la seconda soluzione non vada bene, ma vorrei avere un giudizio da parte di chi ne capisce...

    Ho creato un sito in PHP+MySQL in cui si simula un campionato di calcio (tipo Hattrick, per chi lo conosce). C'è quindi la necessità che ogni 'allenatore' inserisca la sua formazione scegliendo 17 giocatori dalla sua rosa (11 titolari + 6 riserve). Ciò è gestito da 17 select che interrogano il database. L'evoluzione consisterebbe in questo: dovrebbe essere reso immediatamente visibile all'allenatore (nel momento in cui interagisce con una select) il fatto che un giocatore è già stato selezionato in una select precedente, per evitare che inserisca due volte lo stesso giocatore (oggi viene fatto un controllo dopo il submit, e se c'è un errore l'allenatore viene avvisato e rimandato indietro). Pensavo a una di queste soluzioni:
    1- una volta selezionato in una select, il giocatore scompare dalle select successive
    oppure
    2- una volta selezionato un giocatore, se questo era già stato inserito scompare dalle select precedenti
    oppure
    3- una volta selezionato un giocatore, questo appare in un colore diverso nelle select successive
    Ovviamente l'ideale è il mix 2+3, ma andrebbe bene anche una sola delle 3 soluzioni.

    Il problema di passare i valori con un ri-caricamento della pagina è che questa è già imbottita di variabili $_GET e $_POST (se la formazione è già stata inserita le select sono già riempite e si possono fare solo modifiche; se la formazione non c'è viene ripresentata quella della partita precedente). Quindi sarebbe molto più comodo che la gestione venisse fatta a parte da javascript... o no?

    Beh, questa è una parte del codice della pagina, qualora serva; è riferito ad una delle 17 select, le altre sono (per quello che interessa) identiche:

    Codice PHP:
    echo "Portiere: <select name='player1>'";
    $selected "";
    echo 
    "<option $selected value='0'>nessuno selezionato</option>";
    $query "SELECT * FROM my_nikle_giocatori WHERE id_teams = '$id_team' ORDER BY cognome ASC";
    $result mysql_query($query$db);
    while (
    $row mysql_fetch_array($result))   {
    $id_player $row['id_giocatore'];
    $selected "";
    if (
    $id_player1 == $id_player AND $exist == "Modifica")
       
    $selected "selected";
    if (
    $id_giocatore_for_last_formation_1 == $id_player AND $exist == "Creazione")
       
    $selected "selected";
    $player_surname $row['cognome'];
    $player_name $row['nome'];
    echo 
    "<option $selected value='".$id_player."'>$player_surname $player_name</option>";
    }
    echo 
    "</select>"
    Ho provato a cercare soluzioni in tantissime discussioni ma non le ho trovate; mi scuso se invece l'argomento è già stato trattato e se la domanda è un pò goffa, ma sono un autodidatta con molti buchi...

    Grazie!
    Io sono la gomma, tu la colla.

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    beh, anche se usi il codice php la tua è una domanda javascript

    eccoti quello che ti serve... ho usato variabili italiane così magari riesci a 'percepire' il senso dello script

    importante è che per ogni select di giocatore assegni l' id="giocatore" e la prima voce sia "scegli" come nell' esempio

    codice:
    <html>
    <head>
    <script>
    function Controlla(Select)
      {
      var ListaSelect=document.getElementsByTagName('select');
      var GiocatoreGiaScelto=Select.options[Select.selectedIndex].text;
    
      for (var n=0; n < ListaSelect.length; n++)
        {
        if (ListaSelect[n].id == Select.id && ListaSelect[n].name != Select.name)
          {
           var GiocatoreDaControllare=ListaSelect[n].options[ListaSelect[n].selectedIndex].text;
          if (GiocatoreDaControllare != 'scegli' && GiocatoreDaControllare == GiocatoreGiaScelto)
            {
            alert ("errore!\n"+GiocatoreGiaScelto+" già assegnato!");
            Select.selectedIndex=0;
            return false;
            }
          }
        }
      }
    </script>
    </head>
    <body>
    <select id="giocatori" name="attacco" size="1" onchange="Controlla(this)">
    <option>scegli</option>
    <option>tizio</option>
    <option>caio</option>
    <option>sempronio</option>
    </select>
    
    <select id="giocatori" name="difesa" size="1" onchange="Controlla(this)">
    <option>scegli</option>
    <option>tizio</option>
    <option>caio</option>
    <option>sempronio</option>
    </select>
    
    <select id="giocatori" name="panchina" size="1" onchange="Controlla(this)">
    <option>scegli</option>
    <option>tizio</option>
    <option>caio</option>
    <option>sempronio</option>
    </select>
    
    </body>
    </html>
    buona partita

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    Originariamente inviato da dottwatson
    beh, anche se usi il codice php la tua è una domanda javascript
    Hai ragione e mi scuso, è che prima non lo sapevo... Pensavo che ci dovesse essere anche una parte di interrogazione del DB invece hai risolto con del puro javascript. L'ignoranza mi ha pure fatto sbagliare stanza...

    Circa il codice ti ringrazio tantissimo perchè funziona a meraviglia e va benissimo! Già mi fischiano le orecchie pensando a quanto saranno più felici gli allenatori in erba del sito (ho comunque specificato che non è farina del mio sacco)... Il codice in effetti l'ho capito, non sarei mai in grado di scriverne uno analogo (se non scopiazzando alcuni pezzi e provando un centinaio di stesure), ma è già un inizio. Chissà che nei prossimi mesi non trovi il tempo di leggermi una guida...

    Grazie ancora!
    Io sono la gomma, tu la colla.

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.