Bonjour,
J'ai découvert plusieurs erreurs dans ce script. À commencer par la plus flagrante :
res = mysql_query("SHOW COLUMNS FROM personne LIKE 'situation' ");
Ici, il manque le $ à la définition de variable.
Ensuite, tu sembles ne pas comprendre le fonctionnement des pointeurs dans un résultat select de MySQL.
Lorsque tu fais fetch_array(), tu vas lire la prochaine valeur dans la liste de résultats. Ce n'est sûrement pas ce que tu veux, car à la première itération du premier while, tu vas déjà chercher toutes les données de la seconde boucle. Chaque tour de boucle supplémentaire de $result1 ne recevra aucune information de $list1. D'ailleurs les expressions régulières (preg_split) ne sont pas utiles dans ton cas.
Enfin bref, ce code ne fonctionne que par hasard.
Quelques conseils MySQL :
- L'extension MySQL de PHP est dépréciée à partir de PHP5.5 et sera sans doute supprimée à partir de PHP5.6 ou PHP6. Ceci rendrait ton code totalement infonctionnel. Je te conseille donc de passer à mysqli ou PDO avant qu'il ne soit trop tard.
- Il est fortement déconseillé d'utiliser "*" pour récupérer tous les champs, il est vraiment mieux de les définir tous à la main.
- L'opérateur LIKE est moins efficace que l'opérateur =. Like a seulement une utilité lorsque tu veux faire des recherches à l'intérieur du texte du champ (avec les placeholders % et _).
- L'opérateur && n'est pas un standard SQL, l'opérateur AND est standard.
Le code qui fait ce que tu veux (avec PDO) :
<?php
$statement = $db->query("show columns from personne like 'situation'");
$row = $statement->fetch(PDO::FETCH_ASSOC);
$statement->closeCursor();
$type = substr($row['Type'], 5, strlen($row['Type']) - 7);
$enum = explode("','", $type);
$statement = $db->prepare('select distinct situation from personne where Nom = :nom and Prenom = :prenom');
$statement->bindValue(':nom', $nom, PDO::PARAM_STR);
$statement->bindValue(':prenom', $prenom, PDO::PARAM_STR);
$statement->execute();
if ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo '<select name="situation">';
foreach ($enum as $value) {
if ($value === $row['situation']) {
echo '<option value="' . $value . '" selected="selected">' . $value . '</option>';
} else {
echo '<option value="' . $value . '">' . $value . '</option>';
}
}
echo '</select>';
}
$statement->closeCursor();
?>