2016-06-13 25 views
0

Ich habe ein benutzerdefiniertes Feld hinzugefügt, so dass ich mehr Informationen erhalten kann, wenn sich jemand auf der Website anmeldet, aber ich möchte ein Feld auf dem Formular ändern. Ich habe ein Modul erstellt, das eine hook_form_alter Funktion hat, so dass ich den field_first_name des Registrierungsformulars ändern kann. Hier ist der CodeDrupal 7 hook_form_alter und Senden des Formulars

function user_registration_form_alter(&$form, &$form_state, $form_id){ 
if ($form_id == 'user_register_form'){ 

    $form['field_first_name'] = array(
     '#type' => 'textfield', 
     '#title' => t('First Name'), 
     '#description' => t('Enter your first name.'), 
     '#maxlength' => 255, 
     '#required' => TRUE, 
     ); 



} 
if (isset($form['actions']['submit'])) { 
$form['actions']['submit']['#submit'][] ='user_registration_form_submit'; 
    } 

} 

Ich habe auch eine Funktion erstellt, die die Formularübergabe behandelt.

Mein Problem ist, dass wenn ich das Formular abschicke und ich die Benutzerdetails überprüfe. Ich finde, dass die Details des Vornamens nicht in der Datenbank existieren oder wenn ich mich als Administrator anmelde und auf den Link "Leute" klicke. Ich finde, dass alle Informationen außer dem Vornamefeld eingereicht werden, das ich zu ändern versuche. Ich habe auch versucht, das Formular ohne die Formular-Senden-Funktion einzureichen, aber es funktioniert immer noch nicht.

und ich die folgende Fehlermeldung erhalten, wenn ich die form_submit Funktion

Notice: Undefined index: value in user_registration_form_submit() (line 37 of /var/www/html/lite/sites/all/modules/user_regestration/user_registration.module).

PDOException: SQLSTATE[HY000]: General error: 1364 Field 'entity_id' doesn't have a default value: INSERT INTO {field_revision_field_first_name} (field_first_name_value) VALUES (:db_insert_placeholder_0); Array ([:db_insert_placeholder_0] =>) in user_registration_form_submit() (line 38 of /var/www/html/lite/sites/all/modules/user_regestration/user_registration.module).

Dies ist Zeile 37 und 38 MY CODE

'field_first_name_value' => $form_state['value']['field_first_name'], 
))->execute(); 

Ich schaffe das Modul auf localhost, bevor ich hinzufügen drücken Sie es auf die Live-Website

+0

Ich hatte einen Tippfehler in Zeile 37 gemacht. Es wird angenommen, dass "Werte" anstelle von "Wert" sind, aber jetzt bekomme ich den folgenden Fehler ....... "PDOException: SQLSTATE [HY000]: Allgemeiner Fehler : 1364 Feld 'entity_id' hat keinen Standardwert: INSERT INTO {field_revision_field_first_name} (field_first_name_value) VALUES (: db_insert_placeholder_0); Array ([: db_insert_placeholder_0] => john) in user_registration_form_submit() (Zeile 38 von/var/www /html/lite/sites/all/modules/user_regestration/user_registration.module) " –

Antwort

1

Zunächst ist es Werte nicht Wert.

Warum verwenden Sie kein Modul mit dieser Funktionalität, wie profile2?

Der Benutzer wird in Ihrem submithandler nicht erstellt, also entweder Sie es speichern:

function foo_user_register_form_submit($form, &$form_state){ 
    $edit = array(
      'name' => $form_state['values']['name'], 
      'pass' => user_password(), 
      'mail' => $form_state['values']['mail'], 
      'init' => $form_state['values']['mail'], 
      'status' => 1, 
      'access' => REQUEST_TIME, 
      'field_first_name' => array(LANGUAGE_NONE => array(array('value' => $form_state['values']['field_first_name']))), 
    ); 
    user_save(drupal_anonymous_user(), $edit); 
} 

Weitere Einzelheiten finden Sie in der docs.

Oder Sie könnten versuchen, eine benutzerdefinierte hinzuzufügen einreichen Handler, der gefeuert werden würde, nachdem der Benutzer erstellt wird, in form_alter:

$form['#submit'][] = 'your_custom_submit_handler_function'; 

In dort der Benutzer bereits erstellt werden soll. so:

function your_custom_submit_handler_function(&$form, &$form_state) 
    { 
     $fe_id = db_insert('field_revision_field_first_name') 
     ->fields(array(
      'field_first_name_value' => $form_state['values']['field_first_name'], 
      ))->execute(); 
     drupal_set_message(t('your form entry has been added')); 
    } 

But keep in mind, that this custom inserting maybe needs some more code, here you only add the revision entry ..

+0

danke, was ich gesucht habe –

0

Sie vorbei nicht in einem ENTITY_ID, und Ihr Datenbank-Schema ist eine Standard nicht definieren. Die Datenbank erwartet eine, und so ist es fehlgeschlagen, und es ist auf der Einfügung fehlgeschlagen - das ist Ihre Zeilen 37 und 38. Es hat absolut nichts mit Ihrem Vornamen Teil zu tun.

Grundsätzlich ist Drupal (technisch MySQL, oder was auch immer Ihr Datenbank-Backend ist) nicht was Einheit, die Sie versuchen, dieses Feld zuzuordnen.

Bitte schauen Sie auf die Tabelle, die Sie tatsächlich die Informationen in und sicherzustellen, setzen, dass das Schema entweder ein Standard

So etwas gesetzt hat:

db_insert('field_revision_field_first_name') 
     ->fields(array(
      'field_first_name_value' => $form_state['values']['field_first_name'], 
'entity_id' => 1, 
      ))->execute(); 

wahrscheinlich für Sie arbeiten würde besser. Möglicherweise sind andere Felder erforderlich.Ich empfehle Ihnen, sich Ihr Datenbankschema anzusehen.

Sie sollten auch nicht ein benutzerdefiniertes Formular dafür definieren müssen - Sie können Felder zu Benutzern hinzufügen, und auch dort ist Profil2 als ein anderes Plakat erwähnt.

Verwandte Themen