2010-09-15 5 views
2

Salut les amis, quelle est la meilleure façon d'afficher les valeurs mysql enum lors de l'insertion et la mise à jour de la page php?affichage des valeurs mysql enum dans php

name ENUM('small', 'medium', 'large') 

modifié: en fait je demandais pour cela. J'ai un champ de base de données

`color` enum('red','blue','green','white') DEFAULT NULL, 

et php forme

<label for="color">Colors</label><br /> 
<input type="text" name="color" /> 

Comment afficher la valeur ENUM sur le formulaire php de base de données MySQL? S'il vous plaît aider

+3

Veuillez élaborer Si vous voulez – Wazzzy

+0

Bien que je ne puisse pas commenter la partie PHP, les valeurs enum MySQL peuvent être obtenues de la même manière que les valeurs d'un ensemble, voir par ex. [this] (http://stackoverflow.com/q/2622481/217844) SO question. – ssc

Répondre

6

Si vous avez un champ ENUM, MySQL retournera les valeurs de chaîne pour elle et vous pouvez définir avec des valeurs entières et des chaînes aussi. Il suffit de faire ceci:

mysql_query("select name from tablename"); 

vous donnera entière des étiquettes comme small ou medium ou large

Et vous pouvez les mettre à jour la même façon aussi utiliser des étiquettes complètes comme ceci:

mysql_query("insert into tablename (name) values ('small')"); 

ou des valeurs numériques comme ceci:

mysql_query("update tablename set name = 2"); 
+0

Je ne sais pas c'est possible: 'mise à jour tablename set name = 2' Intéressant ... – Mischa

+0

s'il vous plaît jeter un oeil j'ai mis à jour le poste - – ktm

1

Votre question n'est pas très claire. Si vous voulez dire quelle méthode de saisie dois-je utiliser dans le formulaire sur ma page php, la réponse ci-dessous est pertinente.

Vous pouvez utiliser un menu déroulant:

<select name="name"> 
    <option value="small">small</option> 
    <option value="medium">medium</option> 
    <option value="large">large</option> 
</select> 

Les boutons radio sont une autre possibilité:

<input type="radio" name="name" value="small"> small 
<input type="radio" name="name" value="mediuim"> medium 
<input type="radio" name="name" value="large"> large 
3

Vous devez faire un "SHOW COLUMNS FROM" pour obtenir le schéma de la table. Vous pourriez alors aller de l'avant et analyser chaque ligne.

$field = "enumField"; // The field that contains the ENUM 
$result=mysql_query('show columns from '.$table.';'); 
while($tuple=mysql_fetch_assoc($result)) 
{ 
    if($tuple['Field'] == $field) 
    { 
     $types=$tuple['Type']; 
     $beginStr=strpos($types,"(")+1; 
     $endStr=strpos($types,")"); 
     $types=substr($types,$beginStr,$endStr-$beginStr); 
     $types=str_replace("'","",$types); 
     $types=split(',',$types); 
     if($sorted) 
      sort($types); 
     break; 
    } 
} 

Vous avez maintenant un tableau contenant les valeurs possibles de votre ENUM dans $types.
Remarque: Ce code est un hack-quick. Peut-être un peu plus propre :)

+1

Peut-être un 'afficher les colonnes de $ table comme $ champ' pour se débarrasser de la en boucle? – edorian

+0

s'il vous plaît jeter un oeil j'ai mis à jour le poste – ktm

2

Vous pouvez obtenir un tableau de toutes les valeurs de ENUM possibles en utilisant la fonction suivante:

function enum_values($table_name, $column_name) { 
    $sql = " 
     SELECT COLUMN_TYPE 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_NAME = '" . mysql_real_escape_string($table_name) . "' 
      AND COLUMN_NAME = '" . mysql_real_escape_string($column_name) . "' 
    "; 
    $result = mysql_query($sql) or die (mysql_error()); 
    $row = mysql_fetch_array($result); 
    $enum_list = explode(",", str_replace("'", "", substr($row['COLUMN_TYPE'], 5, (strlen($row['COLUMN_TYPE'])-6)))); 
    return $enum_list; 
} 
0

En Codeigniter vous pouvez afficher ENUM valeurs possibles:

function gender_enums($table , $field){ 
$query = "SHOW COLUMNS FROM ".$table." LIKE '$field'"; 
$row = $this->db->query("SHOW COLUMNS FROM ".$table." LIKE '$field'")->row()->Type; 
$regex = "/'(.*?)'/"; 
     preg_match_all($regex , $row, $enum_array); 
     $enum_fields = $enum_array[1]; 
     foreach ($enum_fields as $key=>$value) 
     { 
      $enums[$value] = $value; 
     } 
     return $enums; 
} 
1

Étiquettes enum existantes à partir du type de colonne enum, vous pouvez vérifier les valeurs possibles enum:

$field_type = $wpdb->get_row("SHOW COLUMNS FROM {$this->table_name} LIKE 'field_name'")->Type; 

    preg_match("/^enum\(\'(.*)\'\)$/", $field_type, $matches); 
    $enum_string = (isset($matches[1])?$matches[1]:''); 
    $enum_array = explode("','", $enum_string); 
    echo (in_array('enumlabel', $enum_array)?'already exist':'not exist'); exit;