Pourrais-tu mettre un petit commentaire apres chacune des 3 ligne de codes ça, c'est la meilleure des questions à poser.
$res = mysql_query (" SELECT theme FROM agricole WHERE idtheme = $donnees");
on fait une requête mysql SELECT. Si tout va bien, $res contiendra un 'truc' qui s'appelle une resource et qu'on utilisera à la 2ème ligne. S'il y a un problème, $res vaudra false. Dans un programme sérieux, on contrôle que le résultat n'est pas false en faisant :
$res = mysql_query (" SELECT theme FROM agricole WHERE idtheme = $donnees") or die (mysql_error());
Remarque : qu'il n'y ait aucun enregistrement avec idtheme = $donnees n'est pas une erreur, mais $res ne contiendra aucun résultat. Par contre, si la table agricole n'existe pas, il y aura bien une erreur.
$ligne= mysql_fetch_array($res);
la resource obtenue peut être considérée comme une sorte de tableau à deux dimensions dont on lit une ligne à chaque fois en faisant $ligne= mysql_fetch_array($res);
chaque ligne de ce tableau à 2 dimensions est un tableau à une dimension dont les éléments ont pour indice les noms des champs récupérés. Si tu avais fait "SELECT idtheme,theme FROM..." tu aurais récupéré dans $ligne un tableau à 2 éléments $ligne['idtheme'] et $ligne['theme'].
Quand tu as balayé tout le tableau $res, mysql_fetch_array($res) te rend false. C'est pour ça qu'on rencontre très souvent la boucle :
while ($ligne= mysql_fetch_array($res)) {
... traitement
}
La condition du while fait à la fois l'appel à la fonction, l'affectation à $ligne (grâce au '=' qui n'est pas un == de comparaison !) et le test de la valeur false.
Remarque que sans faire de boucle, tu peux utiliser mysql_num_rows($res) qui te dit s'il y a 0, 1 ou 25000 résultats à ta requête
$titre=$ligne['theme'];
tu sors tu tableau $ligne une valeur particulière (même si c'est la seule ici !)