Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Forms API, Comment créer les checkboxes qui soit sélectionnés par défaut...?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Salut les amis,

Au chargement de mon formulaire, crée avec les Forms API, quelques checkboxes doivent être sélectionnées par défaut.

J'ai des checkboxes suivants

Français
Anglais
Allemand
Italien

Si j'utilise la propriété #default_value de façon suivante

'#default_value' => variable_get('langue', array('Français','Italien')),

ça fonctionne bien.

Mais si je met une variable, qui contient les valeurs "'Français', 'Italien'", ça ne fonctionne pas.

Voila mon code.

$rqt_langue="Select langue_desc from pwl_langue";
$res_langue=mysql_query($rqt_langue);
$row_langue=mysql_fetch_assoc($res_langue);
$langues="'".$row_langue['langue_desc']."'";
while ($row_langue=mysql_fetch_assoc($res_langue)){
$langues=$langues .",'".$row_langue['langue_desc']."'";
}

$form['langue']=array(
'#type'=>'checkboxes',
'#default_value' => variable_get('langue', array($langues)),
'#options' => array(
'Français' => t('Français'),
'Anglais' => t('Anglais'),
'Allemand' => t('Allemand'),
'Italien' => t('Italien'),
),
);

Est-ce qqun à un idée, comment faire ça ??

Je vous remercie à l'avance.

Salut,

Il y a une erreur de logique dans ton code : ta variable $langues contient une chaîne de caractères composée de plusieurs langues séparées par des virgules, mais ça reste une et une seule chaîne (les virgules sont comprises dedans). Autrement dit, ton array un peu plus bas ne contient qu'une seule valeur (cette chaîne de caractères pleine de virgules !).

C'est au moment où tu récupères tes langues que tu dois construire le array, par exemple :

<?php
$langues
= array();
while (
$row_langue = mysql_fetch_assoc($res_langue)) {
 
$langues[] = $row_langue['langue_desc'];
}
?>

Ensuite, plus bas, tu te contentes de passer la variable $langues comme valeur par défaut (il n'est plus nécessaire d'écrire array(...) ) :

<?php
 
...
 
'#default_value' => variable_get('langue', $langues),
  ...
?>

Enfin, c'est pas une super idée d'utiliser directement mysql_fetch_assoc(), ça introduit une dépendance à mysql. Drupal a des fonctions d'abstraction pour la base de données comme db_fetch_array() ou db_fetch_object().