Quello che mi sembra strano è che abbia funzionato finora. In effetti fai un group by su un campo assente dalla query. Forse è questo che produce l'errore quando non ci sono più doppioni.
Il più semplice sarebbe di fare il controllo prima dell'inserimento dei dati.
codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script language="JavaScript" type="text/javascript">
<!--
function svuota(aSelect) {
//---------- Prima svuoto tutti valori tranne quello selezionato nella select selezionata
value = aSelect.value;
numElement = aSelect.length;
var i = 0;
for (j=numElement-1;j>=0;j--) {
curOption = aSelect.options(j);
if (curOption.value != value) {
aSelect.remove(j);
} // if (curOption.value != value)
} // for (j=numElement-1;j>=0;j--)
//---------- adesso per ogni select rimuovo il valore scelto
var k = 0;
for (k=1;k<=9;k++) {
comboName = "combo"+k;
svuota2(aSelect,comboName);
} // for (k=1;k<=9;k++)
} // function svuota(unValore)
function svuota2(aSelect,selectDaSvuotare) {
if (aSelect.id == selectDaSvuotare) {
return;
} // if (aSelect.id == selectDaSvuotare)
var objSelectDaSvuotare = document.getElementById(selectDaSvuotare);
numElement = objSelectDaSvuotare.length;
for (j=numElement-1;j>=0;j--) {
curOption = objSelectDaSvuotare.options(j);
if (curOption.value == aSelect.value) {
objSelectDaSvuotare.remove(j);
} // if (curOption.value == aSelect.value)
} // for (j=numElement-1;j>=0;j--)
} // function svuota2(aSelect,selectDaSvuotare)
//-->
</script>
</head>
<body><?
//---------------- Soltanto se il tasto il cui nome è sublit con il valore "invio" è stato cliccato
if ($submit == "invio") {
//--------------- controllo che un numero sia presente una volta sola
// inserendo i valori di ciascun combo in un array
$arrControllo = array();
for ($i=1;$i<=9;$i++) {
$nameCombo = "combo$i";
$arrControllo[] = $$nameCombo;
} // for ($i=1;$i<=9;$i++)
//--------------- Adesso riordino l'array
asort($arrControllo);
//--------------- Adesso copio l'array in una stringa
$lista = implode("", $arrControllo);
//--------------- Se la lista è <> da 123456789 allora c'è un errore
if ($lista != "123456789") {
print "errore ";
} else {
print "nessun errore ";
} // if ($lista != "123456789")
print $lista;
exit;
} // if ($submit == "invio") ?>
<form action="test195.php" method="post"><?
//--------------- Inizio bufferizzazione per creare le 9 combo
ob_start() ?>
<select id="pippo" name="pippo" onchange="svuota(this)">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select><?
//--------------- Inserisco il codice bufferizzato nella variabile $a
$a = ob_get_contents();
ob_end_clean();?>
<?
//--------------- Stampo a video le nove combo rimpiazzando l'id e il nome
for ($i=1;$i<=9;$i++) {
print str_replace("pippo","combo$i",$a)."\n";
} // for ($i=1;$i<=9;$i++)
?>
<input type="submit" value="reset" name="submit"><input type="submit" value="invio" name="submit">
</form>
</body>
</html>