Erreur à l'enregistrement d'un contenu

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,

Lors de l'enregistrement d'un contenu de type 'Annonce', j'obtiens l'erreur suivante :

"PDOException : SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'node-6-0-0-und' for key 'PRIMARY': INSERT INTO {field_data_field_desc_longue} (entity_type, entity_id, revision_id, bundle, delta, language, field_desc_longue_value, field_desc_longue_format) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 6 [:db_insert_placeholder_2] => 6 [:db_insert_placeholder_3] => annonce [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und [:db_insert_placeholder_6] => sdqsdqsdqsdqs [:db_insert_placeholder_7] => ) dans field_sql_storage_field_storage_write() (ligne 424 dans C:\wamp\www\drupal7\modules\field\modules\field_sql_storage\field_sql_storage.module)."

Voici le code de mon module lié à la création d'un contenu de type 'Annonce' dans le hook_form_alter():

    case 'annonce-node-form':
    
     //Si l'utilisateur vient d'être créé, il n'est pas encore actif => récupérer son uid pour l'attribuer plus tard à l'annonce
    
     global $user;
    
     if($user->roles[1] == 'anonymous user')
      {
       $result = db_query('SELECT u.uid FROM {users} u WHERE u.name = :name and u.mail = :mail', array(':name' => $_SESSION['name'], ':mail' => $_SESSION['mail']));
       $_SESSION['uidUtilisateur'] = $result->fetchColumn(0);
      }
    
     //________________________________________________________________________________________________
    
     //Ne pas afficher l'encodage du titre
    
     $form['title'] = '';
    
     //Ne pas faire apparaître certains champs, en fonction de l'abonnement choisi
    
     $tabFieldsACacher = array();
    
     if(isset($_POST['submitted']['votre_choix_dabonnement']))    
      $abonnement_choisi = $_POST['submitted']['votre_choix_dabonnement'];
     else    
      $abonnement_choisi = $_SESSION['abonnement_choisi'];
    
     if($abonnement_choisi == 'abonnement_basique')
      $tabFieldsACacher = array('field_photos_facade', 'field_photos_hall', 'field_photos_chambres', 'field_photos_piscine', 'field_photos_restaurant',
                                'field_photos_bar', 'field_photos_bien_etre', 'field_photos_diverses', 'field_video');
    
    
     if($abonnement_choisi == 'abonnement_premium')
      $tabFieldsACacher = array('field_video');
      
     foreach($tabFieldsACacher as $value)
      $form[$value]['#type'] = 'hidden';
     
     //Sauvegarder le type d'abonnement choisi pour le passer au formulaire de paiement
    
     $form['abonnement_choisi'] = array('#type' => 'hidden',
                                        '#title' => 'abonnement_choisi',
                                        '#value' => ($_POST['submitted']['votre_choix_dabonnement'])
                                       );
                                      
     //Rediriger l'utilisateur sur la page de commande
    
     if($user->roles[1] == 'anonymous user')     
      $form['#submit'][] = 'annonce_form_redirect_commande';

    break;

...

function annonce_form_redirect_commande($form, &$form_state)
{
  $form_state['redirect'] = 'node/add/commande';
}

Je ne comprends pas d'où provient la violation de contrainte d'intégrité indiquée dans ce message.

Merci d'avance pour votre aide.

Forum : 
Version de Drupal :