la select per prendere dati da un campo ENUM ripete dieci volte i valori

odisseo83

Nuovo Utente
14 Apr 2010
6
0
0
Ciao a tutti, ho una tabella su un DB mySql con un campo ENUM. Ho usato una funzione trovata in rete per andare a prendere i valori del suddetto campo, ma poi quando ho creato la select in maniera molto ingarbugliata come risultato mi dà ogni valore dell'enum ripetuto due volte nella tendina e tutti i valori insieme ripetuti una dozzina di volte. in più mi si impalla il browser, non riesce a caricare del tutto la pagina e va in crash.

ecco il codice, aspetto le vostre legnate e i vosti suggerimenti :-)

PHP:
function enum_select($table,$field) {
    $result=mysql_query("SHOW COLUMNS FROM `$table` LIKE '$field'");
    if(mysql_num_rows($result)>0){
        $row=mysql_fetch_row($result);
        $options=explode("','", preg_replace("/(enum|set)\('(.+?)'\)/","\\2", $row[1]));
        $options2 = array();
        foreach ($options as $value) {
            $options2[] = array(
                'value' => $value,
                'display' => htmlentities($value)
            );
        }
        echo "<br /><br />";
        print_r($options2);
	#echo $options2;
    } else {
        $options=array();
    }
    return $options2;  
}

echo "
			<select name=\"scegli_tipo\">
		";
while ($matrioshka_tipo = enum_select("opera","opera_tipo")){
		 foreach ($matrioshka_tipo as $array_interno)
			foreach ($array_interno as $valore)
		if (isset($_POST["scegli_tipo"]) && $_POST["scegli_tipo"] == $valore)
		 echo "<option value='{$valore}' selected='selected'>{$valore}</option>";
		else
		 echo "<option value='{$valore}'>{$valore}</option>";
		}
echo "</select>";
 
Secondo me il problema è nel while. La funzione ti restituisce la stessa cosa ogni volta, quindi secondo me hai un loop infinito. Farei così:
PHP:
$valori_enum=enum_select("opera","opera_tipo");
foreach ($valori_enum as $array_interno) 
            foreach ($array_interno as $valore)
Così a occhio forse c'era un ciclo di troppo, ma può essere che non sia così.
 
Grazie, avevi ragione per il loop: eliminando il while si elimina la continua ripetizione dei valori.

I valori rimanevano però ripetuti due volte ognuno, a quel problema ho ovviato modificando l'array $options2 nella funzione: ho tolto la chiave 'display' e ogni valore è dato solo una volta.

ecco il codice:

PHP:
function enum_select($table,$field) {
    $result=mysql_query("SHOW COLUMNS FROM `$table` LIKE '$field'");
    if(mysql_num_rows($result)>0){
        $row=mysql_fetch_row($result);
        $options=explode("','", preg_replace("/(enum|set)\('(.+?)'\)/","\\2", $row[1]));
        $options2 = array();
       foreach ($options as $value) {
            $options2[] = array(
                'value' => $value
            );
        }
        echo "<br /><br />";
        print_r($options2);
	
	foreach ($options as $value) 
	echo $value;
	
    } else {
        $options=array();
    }
    return $options2;  
}

		$matrioshka_tipo = enum_select("opera","opera_tipo");
		 foreach ($matrioshka_tipo as $array_interno)
			foreach ($array_interno as $valore)
		if (isset($_POST["scegli_tipo"]) && $_POST["scegli_tipo"] == $valore)
		 echo "<option value='{$valore}' selected='selected'>{$valore}</option>";
		else
		 echo "<option value='{$valore}'>{$valore}</option>";
 

Discussioni simili