Submitted by tpdev on
Bonjour à tous,
Je rencontre un nouveau soucis dans la création de mon premier module. Cette fois-ci je n'arrive pas à insérer des données dans des tables que j'ai créées à partir de mon formulaire.
Voici le code de mon formulaire :
function form_basketfacile_domicile($form, &$form_state) {
$form['#tree'] = TRUE;
$form['description'] = array(
'#type' => 'item',
'#title' => t("Formulaire de saisie de matchs"),
);
if (empty($form_state['numHoraire'])) {
$form_state['numHoraire'] = 1;
}
if (empty($form_state['numArbitre'])) {
$form_state['numArbitre'] = 1;
}
for ($i = 1; $i <= $form_state['numHoraire']; $i++) {
if ($form_state['numHoraire'] > $i) {
$form['horaire'][$i] = array(
'#type' => 'fieldset',
'#title' => t('Match @num validé !', array('@num' => $i)),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
}else{
$form['horaire'][$i] = array(
'#type' => 'fieldset',
'#title' => t('Match @num', array('@num' => $i)),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
}
$form['horaire'][$i]['categorie'] = array(
'#type' => 'select',
'#options' => array( 1 => 'Baby-Basket',
2 => 'Mini-Poussins',
3 => 'Mini-Poussines',
4 => 'Poussins',
5 => 'Poussines',
6 => 'Benjamins',
7 => 'Benjamines',
8 => 'Minimes Filles',
9 => 'Minimes Garçons',
10 => 'Cadettes',
11 => 'Cadets',
12 => 'Juniors',
13 => 'Seniors Filles',
14 => 'Seniors Garçons'),
'#title' => t("Catégorie de l'équipe : "),
'#required' => TRUE,
);
$form['horaire'][$i]['niveau'] = array(
'#type' => 'select',
'#options' => array( 1 => '',
2 => 'D4',
3 => 'D3',
4 => 'D2',
5 => 'D1',
6 => 'Elite',
7 => 'Accès Région',
8 => 'Régionale 3',
9 => 'Régionale 2',
10 => 'Régionale 1',
11 => 'Nationale 3',
12 => 'Nationale 2',
13 => 'Nationale 1',),
'#title' => t("Niveau : "),
);
$form['horaire'][$i]['heureConvocation'] = array(
'#type' => 'textfield',
'#title' => 'Heure de convocation',
'#description' => 'Format HH:MM',
'#default_value' => '13:30',
'#required' => TRUE,
'#size' => 4,
);
$form['horaire'][$i]['heureMatch'] = array(
'#type' => 'textfield',
'#title' => 'Heure du match',
'#description' => 'Format HH:MM',
'#default_value' => '14:00',
'#required' => TRUE,
'#size' => 4,
);
$form['horaire'][$i]['adversaires'] = array(
'#type' => 'textfield',
'#title' => 'Equipe adverse',
'#required' => TRUE,
);
$form['horaire'][$i]['marqueur'] = array(
'#type' => 'textfield',
'#title' => 'Marqueur',
'#required' => TRUE,
'#autocomplete_path' => 'basketfacile/autocomplete',
);
$form['horaire'][$i]['chronometreur'] = array(
'#type' => 'textfield',
'#title' => 'Chronométreur',
'#required' => TRUE,
'#autocomplete_path' => 'basketfacile/autocomplete',
);
$form['horaire'][$i]['arbitre1'] = array(
'#type' => 'textfield',
'#title' => 'Arbitre 1',
'#required' => TRUE,
'#autocomplete_path' => 'basketfacile/autocomplete',
);
$form['horaire'][$i]['arbitre2'] = array(
'#type' => 'textfield',
'#title' => 'Arbitre 2',
'#autocomplete_path' => 'basketfacile/autocomplete',
);
$form['horaire'][$i]['bar'] = array(
'#type' => 'textfield',
'#title' => 'Familles de bar',
'#required' => TRUE,
);
}
$form['envoyer'] = array(
'#type' => 'submit',
'#value' => t('Envoyer'),
);
$form['ajoutHoraire'] = array(
'#type' => 'submit',
'#value' => t('Ajouter un match'),
'#submit' => array('form_basketfacile_ajoutHoraire'),
);
if ($form_state['numHoraire'] > 1) {
$form['supprimerHoraire'] = array(
'#type' => 'submit',
'#value' => t('Effacer le dernier match'),
'#submit' => array('form_basketfacile_supprimerHoraire'),
'#limit_validation_errors' => array(),
);
}
return $form;
}
Il permet comme vous pouvez le constater de créer des plannings de matchs. Le but est maintenant d'insérer les informations saisies dans ma base de données. Mais je n'y arrive pas. J'ai créé un fonction "submit" qui enregistre pour le moment que certaine informations :
function form_basketfacile_domicile_submit($form, &$form_state) {
for ($i = 1; $i <= $form_state['numHoraire']; $i++){
db_insert('match')
->fields(array(
'categorie' => $form_state['values']['horaire'][$i]['categorie'],
'niveau' => $form_state['values']['horaire'][$i]['niveau'],
'heureconvoc' => $form_state['values']['horaire'][$i]['heureConvocation'],
'heurematch' => $form_state['values']['horaire'][$i]['heureMatch'],
))
->execute();
}
}
Cette fonction semble fonctionner en partie car elle récupère bien les informations mais elles ne sont pas insérées dans la base et ce message d'erreur apparaît lors de l'envoie du formulaire :
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match (categorie, niveau, heureconvoc, heurematch) VALUES ('2', '3', '13:30', '1' at line 1: INSERT INTO {match} (categorie, niveau, heureconvoc, heurematch) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3); Array ( [:db_insert_placeholder_0] => 2 [:db_insert_placeholder_1] => 3 [:db_insert_placeholder_2] => 13:30 [:db_insert_placeholder_3] => 14:00 ) in form_basketfacile_domicile_submit() (line 182 of C:\xampp\htdocs\TUTO\sites\all\modules\basketfacile\form_basketfacile.inc).
Je comprend le message, il y a donc un problème de syntaxe mais je ne vois pas lequel...
Ma base de données "MATCH" ressemble à ça :
NUMMATCH bigint(4)
NUMCLUB varchar(128)
NUMPLANNING int(11)
CATEGORIE varchar(128
NIVEAU varchar(128
HEURECONCOV char(5)
HEUREMATCH char(5)
domicile tinyint(1)
Quelqu'un à une idée de ce qui ne fonctionne pas ?
Merci !
hello, à mon avis c’est le
Permalien Soumis par steeff le 19 Avril, 2012 - 16:20
hello,
à mon avis c'est le 13:30 du HEURECONCOV qui pose problème...comment as-tu créés tes tables ? dans le .install de ton module ?
cela dit, pourquoi ne crées-tu pas un content type spécifique avec les champs dont tu as besoin ? un CMS ça sert à ça ! et te débarrasser justement du sale boulot d'insertion / création des tables ...
Merci de répondre aussi
Permalien Soumis par tpdev le 19 Avril, 2012 - 16:31
Merci de répondre aussi vite
Je débute dans le développement et l'utilisation de drupal, et dans le cadre d'un prochain stage en entreprise pour mon BTS je cherche à en apprendre un peu plus par mes propre moyen pour être plus opérationnel.
C'est pourquoi je cherche plus à développer mon propre module plutôt que de créer un content type. Mais ce n'est pas dit que je ne me tourne pas vers cette solution...
Pour en revenir à mon problème je n'est pas créé les tables dans le .install de mon module, je les ai créées en SQL dans ma base de données. Peut-être es-ce ça le problème.
J'ai aussi essayé de modifier le 13:30 par autre chose mais ça ne marche pas non plus. Le même message d'erreur apparaît...
c’est pas MATCH en majuscule
Permalien Soumis par steeff le 19 Avril, 2012 - 16:45
c'est pas MATCH en majuscule pour le nom de la table ? db_insert('MATCH')
Non le nom de la table est
Permalien Soumis par tpdev le 19 Avril, 2012 - 22:18
Non le nom de la table est bien "match". Et je pense que les noms sont insensible à la casse non ?
Est ce important que la ou les tables soient crées lors du .install du module ?
Merci
EDIT :
J'ai trouvé une solution à mon problème. J'ai en fait recréé une base de données avec tous mes champs et j'y ai ajouté tous mes résultats d'insertion. Le code est donc le suivant :
function form_basketfacile_domicile_submit($form, &$form_state) {
for ($i = 1; $i <= $form_state['numHoraire']; $i++){
db_insert('matchs')
->fields(array(
'categorie' => $form_state['values']['horaire'][$i]['categorie'],
'niveau' => $form_state['values']['horaire'][$i]['niveau'],
'heureconvoc' => $form_state['values']['horaire'][$i]['heureConvocation'],
'heurematch' => $form_state['values']['horaire'][$i]['heureMatch'],
'adversaire' => $form_state['values']['horaire'][$i]['adversaires'],
'marqueur' => $form_state['values']['horaire'][$i]['marqueur'],
'chronometreur' => $form_state['values']['horaire'][$i]['chronometreur'],
'arbitre1' => $form_state['values']['horaire'][$i]['arbitre1'],
'arbitre2' => $form_state['values']['horaire'][$i]['arbitre2'],
'bar' => $form_state['values']['horaire'][$i]['bar'],
'date' => date('d-m-Y G:i'),
))
->execute();
drupal_set_message(t('Les matchs ont été enregistrés.'));
}
}