it-swarm.com.de

Fügen Sie beim Senden des Formulars ein verstecktes Feld hinzu

Ich arbeite an einem Anmeldeformular (Informationen, die über https an ein Remote-System gesendet werden), das standardmäßig ein Benutzernamenfeld, ein Kennwortfeld und ein statisches verstecktes Feld enthält (erforderlich für die Validierung mit dem Remote-System).

Es ist ein zusätzliches verstecktes Feld erforderlich, das aus dem Wert des Benutzernamens und dem Wert des vorhandenen versteckten Validierungsfelds erstellt werden sollte, das durch einen Unterstrich wie folgt getrennt ist: username_hidden_id

Ist es möglich, dies nach dem Absenden des Formulars zu erreichen? Ich habe versucht, das Feld mithilfe der Formularübermittlungsfunktion hinzuzufügen, aber das scheint nicht zu funktionieren.

Ich könnte das erwähnte Feld hinzufügen und seinen Wert über JavaScript/jQuery generieren, aber ich möchte nicht, dass dieses Feld sichtbar/öffentlich ist.

Ich habe folgenden Code:

function custom_login_form($form, $form_state) {

    $form['username'] = array(
      '#type' => 'textfield',
      '#title' => t('Username'),
      '#maxlength' => USERNAME_MAX_LENGTH,
      '#size' => 15,
      '#required' => TRUE,
    );
    $form['password'] = array(
      '#type' => 'password',
      '#title' => t('Password'),
      '#size' => 15,
      '#required' => TRUE,
    );
    // Hidden validation field    
    $form['hidden_id'] = array(
      '#type' => 'hidden',
      '#value' => '1234',
    );
    // Submit button
    $form['actions'] = array('#type' => 'actions');
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Log in'),
    );

    return $form;
}

function custom_login_form_validate(&$form, &$form_state) {

  if (empty($form_state['values']['username'])) {
    form_set_error('username', 'Please enter a username.');
    $form_state['rebuild'] = TRUE; 
  }
  if (empty($form_state['values']['password'])) {
    form_set_error('password', 'Please enter a password.');
    $form_state['rebuild'] = TRUE; 
  }

}

function custom_login_form_submit(&$form, &$form_state) {

  if (isset($form_state['input']) && !empty($form_state['input']['username']) && !empty($form_state['input']['hidden_id'])) {
    $form['username_hidden_id'] = array(
      '#type' => 'hidden',
      '#value' => $form_state['values']['username'] . '-' . $form_state['values']['hidden_id'],
    );
  }

}
3
Matej

Sie möchten das Array $form In der Funktion _submit Nicht ändern. Sie sollten vielmehr das Array $form_state['values'] Ändern, da dort alle übermittelten Werte gespeichert werden. Damit:

function custom_login_form_submit(&$form, &$form_state) {
  if (isset($form_state['input']) && !empty($form_state['input']['username']) && !empty($form_state['input']['hidden_id'])) {
    $form_state['values']['username_hidden_id'] = $form_state['values']['username'] . '-' . $form_state['values']['hidden_id'];
  }
}

Beachten Sie, dass Sie alle oben genannten Schritte auch in der Funktion _validate Ausführen können und $form_state['values']['username_hidden_id'] Dann in der Funktion _submit Verfügbar ist.

Warum muss es sich jedoch wie ein eingereichtes Feld verhalten? Ich würde es einfach als Variable speichern und nach Bedarf verwenden, wie folgt:

function custom_login_form_submit(&$form, &$form_state) {
  if (isset($form_state['input']) && !empty($form_state['input']['username']) && !empty($form_state['input']['hidden_id'])) {
    $username_hidden_id = $form_state['values']['username'] . '-' . $form_state['values']['hidden_id'];
  }
  // Do something with $username_hidden_id here.
}
1
Jesse Pinho