2012-12-09 25 views
5

Ho un problema nel creare il modulo Drupal. Ho creato un modulo per l'aggiunta nel database ma non ho fortuna con la creazione di un modulo per modificare alcuni record. Ecco il mio problema. Il problema è quando carico i valori nel caricamento del modulo dal database e li cambio, quindi faccio clic su Invia modulo di aggiornamento pulsante prima di inviare nuovi valori. Quindi aggiorna nel database la stessa cosa che era. Ecco un codice:Modifica modulo nel modulo 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; 
} 

E qui è un codice del modulo di conferma:

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'], 
))); 
} 

Se qualcuno ha lo stesso problema o sa come risolvere questo problema, ti prego, aiutami.

Grazie in anticipo.

+0

Si può modificare il codice e rimuovere la parte aggiuntiva? Come ha sottolineato D34dman, il codice definisce la stessa funzione due volte. – kiamlaluno

risposta

3

Prima di tutto vorrei sottolineare che il codice di esempio è stato incollato erroneamente. Vedo due dichiarazioni della stessa funzione edit_form.

Supponendo che la prima dichiarazione fosse una copia errata e continuando a rispondere a questa domanda.

Il problema principale che ho visto nella dichiarazione del modulo è che si sta utilizzando "#value" per memorizzare un valore predefinito. Si prega di utilizzare "# valore_default".

Se si utilizza #valore, ignora i valori inviati dall'utente.

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

Per esempio il cambiamento,

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

a

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

Inoltre vi consiglio vivamente di controllare this link, che è un modulo che fornisce un sacco di esempi di interagire con Drupal .

+0

Grazie mille D34dman. Ma ora ho problemi con default_value questo mi dà un messaggio: è stata rilevata una scelta illegale. Si prega di contattare l'amministratore del sito. –

+0

stai usando ajax? – D34dman

+0

Ho risolto il mio problema. Grazie mille. –

Problemi correlati