Message d'avertissement

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

créer des checkbox multiples en fonction d'une requête SQL

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.

Bonjour,

J'ai créé un champ de type text - Check boxes/radio buttons - Multiple values, et je souhaite proposer un sélection de titre (title) à cocher.

Si je tape dans la dans zone code php en dessous de "Allowed values list" :

$valeurs = array('titre1' => 'mon premier title', 'titre2' => 'mon deuxième title');
return $valeurs ;

Aucun problème.

Maintenant supposons que je veuille récupérer tous les valeurs de "title" associé à un type de contenu précis (qu'on appelera "MonType2Contenu" pour l'exemple). Le champ "title" étant générique à tous les type de contenu et donc stocké dans la table "node", le code suivant me permet de récupérer l'ensemble des "titres" qui m'intéresse (tester dierctement sur ma base mysql):

SELECT * FROM (node) WHERE (type='MonType2Contenu') ORDER BY title

Comment maintenant créer autant de check box que de titre disponible ?

J'ai essayé ça:

$valeurs = array();
$res = db_query('SELECT * FROM (node) WHERE (type='MonType2Contenu') ORDER BY title');
while ($o = db_fetch_array($res)) {
  $valeurs[$o['title']] = $o['title'];
}
return $valeurs;

mais aucune checkbox n'est crée ... si quelqu'un a une idée ...

Merci d'avance

Version de Drupal : 

Bonjour,

Non le tableau est vide, c'est bien ça le problème. Du coup J'ai listé mes valeurs "Allowed" dans la zone prévu à cet effet... histoire de pouvoir avancer (solution temporaire)
J'ai par ailleurs quelques soucis de mémoire php limite qui m'empêche d'avancer aussi rapidement que je le souhaiterai, donc je prends les problèmes les uns après les autres et je m'excuse d'avance si du temps s'écoule entre mes réponses ... la solution à ce problème de création de checkboxes dynamique reste d'actualité. Si quelqu'un peut donner un exemple de code php qui fonctionne ?

Merci d'avance

Vincent

oui, je l'ai précisé dans mon premier post, sous phpmyadmin, la requête me retourne un nombre d'enregistrement tout a fait correct (cad <> de nul):

le code suivant me permet de récupérer l'ensemble des "titres" qui m'intéresse (tester dierctement sur ma base mysql):
SELECT * FROM (node) WHERE (type='MonType2Contenu') ORDER BY title

Je pense que c'est mon code php, pour remplir le tableau avec les résultats de la requête, qui coince ...

merci pour l'aide

Quelques remarques (la solution s'y trouve peut-être) :

  • Dans ta requête, tu as mis des parenthèses autour du nom de la table "node", alors que c'est des accolades.

  • Ca serait mieux d'utiliser autre chose que les titres eux-mêmes comme clés de ton tableau.

  • Tu pourrais rendre ton SQL plus spécifique (a priori, tu n'as pas besoin de tous les champs de la table node).

Au final, ça donne :

<?php
$res
= db_query("SELECT nid, title FROM {node} WHERE type = 'MonType2Contenu' ORDER BY title");
while (
$o = db_fetch_array($res)) {
 
$valeurs[$o['nid']] = $o['title'];
}
?>

ok merci,

je test ça , et je vous dis quoi rapidement...
Effectivement j'avais pensé à pendre le "nid" en "value" et le "title" en "label", le problème c'est que les controles de checkboxes sont de type "text" donc je suis pas sur qu'ils acceptent une valeur numérique.

En tout cas merci,

Vincent

Yep, mais des valeurs numériques peuvent aussi être typées comme du texte (et par derrière, enregistrées en base dans des champs texte). C'est l'inverse qui poserait problème, mais dans ton cas, tu n'auras pas de souci à cause de ça.

Avec beaucoup de retard, mais mieux vaut tard que jamais...
Merci ça fonctionne maintenant.
Je récupère les valeurs de 'nid' et affiche les 'title' au niveaux de chaque checkboxe.
J'avais effectivement une coquille dans le bout de code php.

Vincent

Bonjour.
Après plusieurs heures de recherche, je relance ce post en espérant trouver une solution.

J'ai besoin de récupérer des valeurs en DB pour créer mes radiobutton.
J'ai donc voulu tenter la solution avec un db_fetch_array() sauf qu'avec Drupal 7, cette fonction n'est plus disponible...

J'aimerais donc trouver une solution pour contourner mon problème...

<?php
$result
= $query->execute(); // Cette requête marche.
$opt = array();

// $opt doit récupérer $result sous forme de tableau, mon problème :(

$form['choice'] = array(
'#type' => 'radios',
'#title' => t('Select type of competition'),
'#options' => $opt,
);
?>

Merci pour votre aide!