Come consiglio personale, ti direi di pensare prima di tutto al codice base, ovvero interamente in PHP Se questo funziona, dopo possiamo pensare a farlo in "tempo reale" con JS, ma ha poco senso se il codice di base non funziona come si deve

Prova una cosa simile:

form.php
Codice PHP:
<?php  $id $_GET["classe"]; ?>
<form method="post" action="votiDatabase.php?classe=<?php echo $id?>"> 
<?php
     
    $query 
mysql_query("SELECT * FROM `studenti` WHERE `id_classe`='".$id."'); 
    if(!
$query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore 
     
    if(mysql_num_rows(
$query)){ //Se ci sono risultati 
        echo "
<table width=\"800px\" border=\"1\">"
        echo 
"<tr><td>Studente</td><td>Voto</td></tr>"
         
        while(
$riga mysql_fetch_array($query)){ 
            
$voti "<select name=\"newVoteFor_".$riga["id"]."\">"
             
              for(
$i=3;$i<=9;$i++){
                  
$voti .= "<option value=\"".$i."\">".$i."</option>";
              }
            
$voti .= "</select>";
         
            echo 
"<tr><td>".$riga["nome]." ".$riga["cognome"]."</td><td>".$voti."</td></tr>"; 
        } 
         
        echo "
</table>"; 
    }else{ // Se non ci sono risultati 
        echo "
Non ci sono risultati"; 
    } 
?> 

<input type="
submit" value="Invia" /> 
</form>
votiDatabase.php
Codice PHP:
if($_SERVER['REQUEST_METHOD'] === 'POST'){ //Se l'utente è arrivato a questa pagina tramite un form
    
$query mysql_query("SELECT * FROM `studenti` WHERE `id_classe`='".$id."'); 
    if(!
$query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore 
     
    if(mysql_num_rows(
$query)){ //Se ci sono risultati
         
        while(
$riga = mysql_fetch_array($query)){
            // SE 
$_POST["newVoteFor_".$riga["id"]] non esiste, lo inizializzo come FALSE
            if(isset(
$_POST["newVoteFor_".$riga["id"]]) || empty($_POST["newVoteFor_".$riga["id"]]))
                
$_POST["newVoteFor_".$riga["id"]] = false;
                
            if(
                is_numeric(
$_POST["newVoteFor_".$riga["id"]]) //Controllo che il valore sia numerico
                && (
$_POST["newVoteFor_".$riga["id"]] >= 3) //Controllo che il voto vada da 3 a 10
                && (
$_POST["newVoteFor_".$riga["id"]] <= 10)
            ){
                if(!mysql_query("
INSERT..."))
                    echo mysql_error() ."
";
            }
                
        }
    }

In questo modo, la pagina che si occupa di elaborare i voti, richiama ancora una volta tutti gli studenti, e verifica che sia passato tramite POST un nuovo voto. Se è presente lo inserisce, altrimenti ignora tutto il codice
Ancora più corretto sarebbe analizzare solamente i POST ricevuti, assegnando ad ogni select un nome del tipo name="nuovoVoto[]", ma al momento non posso provarlo quindi non vorrei fare troppi casini

Thinker