2012-12-09 13 views
5

Mam problem z budowaniem modułu Drupala. Stworzyłem formularz do dodania do bazy danych, ale nie mam szczęścia z utworzeniem formularza do edycji jakiegoś rekordu tutaj jest mój problem. Problem polega na tym, że ładuję wartości do obciążenia formularza z bazy danych i zmieniam je, a następnie kliknij przycisk odśwież formularza formularza przed przesłaniem nowych wartości. Więc aktualizuje się do bazy danych, tak jak to było. Oto kod:Edycja formularza w module drupal?

function edit_form($form, &$form_state) { 

$query = db_select('activity', 'f') 
    ->fields('f') 
    ->condition('IDA', $_GET['edit']); 
$thefile = $query->execute(); 
$title = ""; 
$desc = ""; 
$file = ""; 
$privacy = ""; 
    while($record = $thefile->fetchAssoc()) 
    { 
     $title = $record['title']; 
     $desc = $record['description'];ick submit button form refresh before it submit new values. So it updates into database same thing as it was. Here is a good : 

function edit_form($form, &$form_state) { 

$query = db_select('activity', 'f') ->fields('f') ->co 
     $file = $record['trainingresource']; 
     $privacy = $record['privacy']; 

    } 
    $form['activity'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Create a new activity'), 
    '#tree' => TRUE, 


); 
    $form['activity']['title'] = array(
     '#type' => 'textfield', 
    '#title' => t('Title'), 
    '#description' => t('Please enter the title here.'), 
    '#value' => t($title), 
); 
$form['activity']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Enter Description'), 
    '#value' => t($desc), 
    '#description' => t('Please put description here.'), 

); 
/* $form['activity']['date'] = array(
    '#type' => 'date', 
    '#title' => t('Enter activity date'), 

    '#description' => t('Please put activity date in here.'), 
); */ 
    $form['activity']['file'] = array(
    '#type' => 'file', 
    '#title' => t('Submit activity file'), 
'#value' => t($file), 
    '#description' => t('Please files in here.'), 
); 
    $form['activity']['security'] = array(
'#type' => 'radios', 
'#title' => t('Privacy'), 
'#value' => t($privacy), 
'#options' => array('True'=>t('True'),'False'=>t('False')), 
); 
    // Description 

    $form['hidden'] = array('#type' => 'value', '#value' => 'is_it_here'); 
    $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); 
    return $form; 
} 

I tu jest przesłać kod forma:

function edit_form_submit($form, $form_state) { 
$idt = $_GET['edit']; 
$title = trim($form_state['values']['activity']['title']); 
$desc = trim($form_state['values']['activity']['description']); 
//$date = trim($form_state['values']['activity']['date']['year']."-".$form_state['values']['activity']['date']['month']."-".$form_state['values']['activity']['date']['day']); 
$file = "file"; 
$privacy = trim($form_state['values']['activity']['security']['#value']); 


$nid = db_update('activity') // Table name no longer needs {} 
->fields(array(
    'title' => $title, 
    'description' => $desc, 
    //'date' => $date, 
    'trainingresource' => $file, 
    'privacy' => $privacy, 

)) 
->condition('IDA', $idt,'=') 
->execute(); 
drupal_set_message($idt); 
drupal_set_message("Added into database"); 
drupal_goto('activity', array('query'=>array(
'activ'=>$_GET['activ'], 
))); 
} 

Jeśli ktoś ma ten sam problem lub wie jak rozwiązać ten problem, proszę mi pomóc.

Z góry dziękuję.

+0

Czy można edytować kod i usunąć dodatkową część? Jak zauważył D34dman, kod definiuje tę samą funkcję dwukrotnie. – kiamlaluno

Odpowiedz

3

Przede wszystkim chciałbym wskazać, że przykładowy kod został nieprawidłowo wklejony. Widzę dwie deklaracje tej samej funkcji edit_form.

Przyjmuję, że pierwsza deklaracja była niewłaściwa i nadal odpowiada na to pytanie.

Głównym problemem, który zobaczyłem w deklaracji formularza, jest to, że używasz wartości "#value" do zapisania wartości domyślnej. Użyj "#default_value".

Jeśli użyjesz #wartości, to zignoruje przesłane przez użytkownika wartości.

  1. Read more about use of #value.
  2. Read more about use of #default_value

Na przykład zmiany

$form['activity']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Enter Description'), 
    '#value' => t($desc), 
    '#description' => t('Please put description here.'), 
); 

do

$form['activity']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Enter Description'), 
    '#default_value' => t($desc), 
    '#description' => t('Please put description here.'), 
); 

Również i zalecamy sprawdzenie this link który jest modułem, który zawiera wiele przykładów interakcji z Drupal .

+0

Wielkie dzięki D34dman. Ale teraz mam problem z default_value, to daje mi wiadomość: wykryto nielegalny wybór. Proszę skontaktować się z administratorem serwisu. –

+0

używasz ajax? – D34dman

+0

Rozwiązałem mój problem. Dziękuję Ci bardzo. –

Powiązane problemy