Salve a tutti, vorrei realizzare uno script che abbia una lista di calciatori a destra, e trascinare la formazione in un drop-target per memorizzare la formazione da schierare in campo... ma non so proprio da dove iniziare... o meglio io ho fatto tutto, ma non so perché a volte si blocca... vi posto un pò di codice...

Codice PHP:
<?php
//gestisce le variabili che arrivano attraverso il redirect e le memorizza in un file con il nome della squadra... rappresentata dal nome utente
>?
<
script>
// crea il riferimento alla dropbox in cui vengono trascinate
// le div che rappresentano gli articoli in catalogo
var dropbox document.getElementById('dropbox');

// crea un riferimento ad ogni giocatore del catalogo - div.giocatore
var giocatori document.getElementsByClassName('giocatore');

// crea un riferimento alla lista ul#titolari
var list_titolari document.getElementById('titolari');
var 
list_panchina document.getElementById('panchina');
var 
list_allenatore document.getElementById('allenatore');

var 
modulo null;
var 
giornata null;
var 
portieri 0;
var 
difensori 0;
var 
difensori_p 0;
var 
centrocampisti 0;
var 
centrocampisti_p 0;
var 
attaccanti 0;
var 
attaccanti_p 0;
var 
allenatore 0;

//crea l'array che conterrà i dati relativi ai giocatori trascinati nella dropbox
var titolari = new Array(11);
var 
panchina = new Array(7);
var 
allenatore_scelto null;

var 
team "<?php echo $_SESSION["nomeutente"]; ?>";

//crea un oggetto json che rappresenta i giocatori in rosa
var rosa = {
<?
php            
            $rosa                
=    file("pages/formazioni/".$anno_calcistico."/".$_SESSION["nomeutente"].".txt");
            
            for(
$i=0$i<count($rosa); $i++)
            {
                
$campi_rosa            =    explode(","$rosa[$i]); 
                
$ID                     =     $campi_rosa[0];
                
$GIOCATORE            =     $campi_rosa[1];
                
$RUOLO                =    $campi_rosa[2];
                
//$SOLDI_SPESI        =    $campi_rosa[3];
            
                
echo $ID.": {
                        nome: \""
.$GIOCATORE."\",
                        ruolo: \""
.$RUOLO."\"
                }"
;
                
                if(
$i count($rosa)-1)
                    echo 
",
                    "
;
            }
            
?>
}

function recuperaModulo(opt)
{
    if(opt.checked)
    {
        modulo = opt.value.split("-");
    }
}

function recuperaGiornata()
{
    giornata = document.form.giornata.options[document.form.giornata.selectedIndex].value;
}

function blocca()
{
    var element = document.form.modulo;
    for(var k=0; k<element.length; k++)
    {
        element[k].disabled = true;
    }
}

function salvaFormazione(team, titolari, panchina, allenatore, giornata)
{
    
    var string = "&giornata="+giornata+"&team="+team;
    
    for(var i=0; i<titolari.length; i++)
    {
        string += "&gt_"+i+"="+titolari[i].nome+"&gtr_"+i+"="+titolari[i].ruolo[0];
    }
    
    for(var i=0; i<panchina.length; i++)
    {
        string += "&gp_"+i+"="+panchina[i].nome+"&gpr_"+i+"="+panchina[i].ruolo[0];
    }
    
    string += "&t="+allenatore+"&rt=T";
    
    window.location.href = "./invia.php?invia_formazione=1"+string;
}

function esci(opt)
{
    if(opt == "r")
        window.location.href +=""; 
    else if(opt == "exit")
        window.location.href = "./invia.php?logout=1"; 
        
}

// crea l'immagine "aggiungi a titolari"
var icon = document.createElement('img');
icon.src = 'images/ball.png';

// per ogni elemento trascinato crea un tipo di dato Text
// e vi associa l'id del giocatore
for (var i = 0; i < giocatori.length; i++){
    giocatori[i].ondragstart = function(event){    
        event.dataTransfer.setDragImage(icon,64,64);
        event.dataTransfer.setData('Text', this.id);
    };    
}

dropbox.ondrop = function(event){
    if(modulo == null)
    {
        alert("Prima di inserire i giocatori titolari, devi impostare un modulo per la tua formazione");
        this.removeAttribute('class');
        return false;
    }
    else if(giornata == null)
    {
        alert("Prima di inserire i giocatori titolari, devi impostare la giornata di campionato");
        this.removeAttribute('class');
        return false;
    }
    <?php
    
if(!isset($_GET["debug"]) || $_GET["debug"] != "1")
    {
    
?>
    else
    {
        var oggi = new Date();
        var mese = parseInt(oggi.getMonth())+1;
        var buff = oggi.getFullYear()+'-'+mese+'-'+oggi.getDate()+' '+oggi.getHours()+':'+oggi.getMinutes();
        var inizio_invio = new Date(buff);
        var fine_invio = new Date(scadenze['_'+giornata+''].data);
        if(inizio_invio.getTime() > fine_invio.getTime())
        {
            alert("Non puoi più inserire la formazione per questa giornata perché è in corso oppure è stata già giocata. La pagina sarà ricaricata automaticamente");
            esci("r");
        }        
    }
    <?php
    
}
    
?>
    // inizializza l'id dell'elemento rilasciato nella drop area
    var id = event.dataTransfer.getData('Text');
    
    // inizializza la variabile che contiene l'elemento corrente
    var giocatore = rosa[id];
    
    // individua la posizione dell'elemento corrente nell'array contenente i giocatori titolari
    var pos = titolari.indexOf(giocatore);
    var pos_panchina = panchina.indexOf(giocatore);
    // se la posizione != -1
    // significa che il giocatore è stato già inserito nella formazione titolare
    if(pos == -1 && pos_panchina == -1)
    {
        if(giocatore.ruolo == "Portiere")
        {
            if(portieri == 0)
            {
                titolari[0] = giocatore;
                portieri++;
            }
            else if(portieri == 1)
            {
                panchina[0] = giocatore;
                portieri++;
            }
            else
            {
                alert("Non puoi aggiungere altri portieri in formazione");
            }
        }
        else if(giocatore.ruolo == "Difensore")
        {
            if(difensori<modulo[0])
            {
                titolari[difensori+1] = giocatore;
                difensori++;
            }
            else if(difensori_p<2)
            {
                panchina[difensori_p+1] = giocatore;
                difensori_p++;
            }
            else
            {
                alert("Non puoi aggiungere altri difensori");
            }
        }
        else if(giocatore.ruolo == "Centrocampista")
        {
            if(centrocampisti<modulo[1])
            {
                titolari[centrocampisti+difensori+1] = giocatore;
                centrocampisti++;
            }
            else if(centrocampisti_p<2)
            {
                panchina[centrocampisti_p+difensori_p+1] = giocatore;
                centrocampisti_p++;
            }
            else
            {
                alert("Non puoi aggiungere altri centrocampisti");
            }
            
        }
        else if(giocatore.ruolo == "Attaccante")
        {
            if(attaccanti<modulo[2])
            {
                titolari[attaccanti+centrocampisti+difensori+1] = giocatore;
                attaccanti++;
            }
            else if(attaccanti_p<2)
            {
                panchina[attaccanti_p+centrocampisti_p+difensori_p+1] = giocatore;
                attaccanti_p++;
            }
            else
            {
                alert("Non puoi aggiungere altri attaccanti");
            }
        }
    }
    else
    {
        alert("Giocatore già inserito");
    }
    
    if(giocatore.ruolo == "Allenatore")
    {
        if(allenatore == 0)
        {
            allenatore_scelto = giocatore;
            allenatore++;
        }
        else
        {
            alert("Non puoi aggiungere altri allenatori");
        }
    }
    
    // se esistono dei li nella ul.titolari
    // vengono eliminati tutti
    if ( list_titolari.hasChildNodes() ){
        while ( list_titolari.childNodes.length >= 1 ){
            list_titolari.removeChild( list_titolari.firstChild );
        }
    }
    
    if ( list_panchina.hasChildNodes() ){
        while ( list_panchina.childNodes.length >= 1 ){
            list_panchina.removeChild( list_panchina.firstChild );
        }
    }
    
    if ( list_allenatore.hasChildNodes() ){
        while ( list_allenatore.childNodes.length >= 1 ){
            list_allenatore.removeChild( list_allenatore.firstChild );
        }
    }
    
    // per ogni elemento dell'array titolari
    // crea un li da aggiungere alla ul#titolari
    for(var i = 0; i < titolari.length; i++){
        if(titolari[i] != null)
        {
            var giocatore_titolare = titolari[i];
            var li = document.createElement('li');
            var tn = document.createTextNode( giocatore_titolare.nome + " - " + giocatore_titolare.ruolo + " " );
            li.appendChild(tn);
            list_titolari.appendChild(li);
        }
    }
    
    for(var i = 0; i < panchina.length; i++){
        if(panchina[i] != null)
        {
            var giocatore_panchina = panchina[i];
            var li = document.createElement('li');
            var tn = document.createTextNode( giocatore_panchina.nome + " - " + giocatore_panchina.ruolo + " " );
            li.appendChild(tn);
            list_panchina.appendChild(li);
        }
    }
    
    if(allenatore_scelto != null)
    {
        var li = document.createElement('li');
        var tn = document.createTextNode( allenatore_scelto.nome + " - " + allenatore_scelto.ruolo + " " );
        li.appendChild(tn);
        list_allenatore.appendChild(li);
    }
    
    if(portieri+difensori+difensori_p+centrocampisti+centrocampisti_p+attaccanti+attaccanti_p == 18 && allenatore_scelto != null)
    {
        var invia_f = document.getElementById("invia_formazione");
        invia_f.setAttribute("style", "text-align:right; color:#FFF;");
    }
    
    return false;
};
dropbox.ondragover = function(){ return false; }
dropbox.ondragenter = function(event){ 
    this.setAttribute('class', 'over');
}
dropbox.ondragleave = function(event){ 
    this.removeAttribute('class');
}
</script>
</body>
</html>
<?php
}
?>
Mi date una mano? Non riesco a capire come risolvere a volte non riesce ad inviare la formazione e si blocca tutto!!!