scrivere sul database

15 contenuti / 0 new
Ultimo contenuto
scrivere sul database

in un post precedente http://www.drupalitalia.org/?q=node/749, giannigiusti inseriva questo pezzo di codice, che restituisce una tabella ordinata:

// Costruisci i titoli da mostrare nella tabella
$header = array(
array('data' => t('Nome'), 'field' => 'name', 'sort' => 'asc'),
array('data' => t('Indirizzo'), 'field' => 'address'),
);
// Visualizza la lista nella tabella
$result = db_query("SELECT name,address FROM {gest_user}".tablesort_sql($header));
while ($dati = db_fetch_object($result)) {
$rows[] = array($dati->name, $dati->address,);
}
// Temizzazione della tabella e titoli
$output = theme('table', $header, $rows);
print $output;

La domanda è: come si fa a scrivere sulla tabella guest_user utilizzando un form direttamente dal sito.

Grazie anticipatamente.

di seguito ti posto un esempio di gestione clienti/fornitori (inserimento/ricerca/cancellazione/modifica) in una tabella gest_soggetto.

Struttura tabella:
--
-- Struttura della tabella `gest_soggetto`
--

CREATE TABLE `gest_soggetto` (
`id` int(6) NOT NULL default '0',
`nome` varchar(50) binary NOT NULL default '',
`indirizzo` varchar(100) NOT NULL default '',
`citta` varchar(25) NOT NULL default '',
`provincia` varchar(5) default NULL,
`cap` varchar(10) default NULL,
`indirizzo2` varchar(100) default NULL,
`citta2` varchar(25) default NULL,
`cap2` varchar(10) default NULL,
`provincia2` varchar(5) default NULL,
`codicefiscale` varchar(16) binary default NULL,
`email` varchar(60) default NULL,
`telefono1` varchar(25) default NULL,
`telefono2` varchar(25) default NULL,
`fax` varchar(25) default NULL,
`note` text,
`comunenascita` varchar(40) default NULL,
`provincianascita` varchar(5) default NULL,
`datanascita` date default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;

modulo soggetto.module:

<?php
/* ---------------------------------------------------------------------
*         MODULO PER LA GESTIONE DEI SOGGETTI (CLIENTI/FORNITORI)
*                        v 0.1 14/11/2005
*                      Licenza Modulo GPL
* ---------------------------------------------------------------------- */
/*
----------------- FUNZIONI DI BASE PER IL MODULO -----------------------
*/
function soggetto_help($section='') {
$output = '';
switch (
$section) {
    case
"admin/modules#description":
   
$output = t("*** Amministrazione clienti/fornitori ***");
    break;
    case
"sogg/test":
   
$output = t("In questa pagina e' possibile aggiungere un Soggetto");
    break;   
    }
return
$output;
}
// function onthisdate_help
// Determiniamo gli accessi al modulo (dando poi i giusti permessi nell'amministrazione)
function soggetto_perm() {
return array(
'amministrazione soggetto','gestione soggetto');
}
function
soggetto_menu() {
   
$items = array();
   
// Principale (operazioni principali)
   
$items[] = array(
           
'path' => 'soggetto',
           
'title' => t('Soggetti (Clienti/Fornitori)'),
           
'callback' => 'soggetto_form',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_NORMAL_ITEM );
   
// Inserimento
   
$items[] = array(
           
'path' => 'soggetto/inserisci',
           
'title' => t('Inserimento'),
           
'callback' => 'soggetto_form',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_NORMAL_ITEM );
   
// Ricerca (operazioni di ricerca)
   
$items[] = array(
           
'path' => 'soggetto/ricerca',
           
'title' => t('Ricerca'),
           
'callback' => 'soggetto_form_ricerca',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_NORMAL_ITEM );
   
// Inserisci popup (non visibile nei menu)
   
$items[] = array(
           
'path' => 'soggetto/inserisci_popup',
           
'title' => t('Inserimento Soggetto'),
           
'callback' => 'soggetto_form',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_CALLBACK );   
   
// Ricerca Soggetto con protocollo xmlrcp (non visibile nei menu)
   
$items[] = array(
           
'path' => 'soggetto/soggetto_ricerca_xmlrpc',
           
'title' => t('soggetto ricerca xmlrcp'),
           
'callback' => 'soggetto_form',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_CALLBACK );                       
   
// Ricerca Soggetto con protocollo xmlrcp (non visibile nei menu)
   
$items[] = array(
           
'path' => 'soggetto/lista',
           
'title' => t('Lista Soggeti Trovati'),
           
'callback' => 'soggetto_lista',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_CALLBACK );   
   
$items[] = array(
           
'path' => 'soggetto/autocomplete/nome',
           
'title' => t('Lista soggetto'),
           
'callback' => 'soggetto_autocomplete_nome',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_CALLBACK );   
   
$items[] = array(
           
'path' => 'soggetto/autocomplete/codice',
           
'title' => t('Lista soggetto'),
           
'callback' => 'soggetto_autocomplete_codice',
           
'access' => user_access('gestione soggetto'),
           
'type' => MENU_CALLBACK );                   
   
// Menu Tab su dettaglio Soggetto (se non è selezionato un soggetto non mostrare i sottomenu)
   
if (arg(1)>0) {
       
// Cancella (non visibile nei menu)
       
$items[] = array(
               
'path' => 'soggetto/'.arg(1).'/modifica/cancella',
               
'title' => t('Cancella'),
               
'callback' => 'soggetto_cancella',
               
'access' => user_access('gestione soggetto'),
               
'type' => MENU_CALLBACK );       
           
// Menu Locale (tabulatori), richiamato quando sei su soggetto/modifica
           
$items[] = array(
               
'path' => 'soggetto/'.arg(1).'/modifica/anagrafica',
               
'title' => t('Soggetto'),
               
'access' => user_access('gestione soggetto'),
               
'callback' => 'soggetto_form',
               
'weight' => 3,
               
'type' => MENU_LOCAL_TASK// Tabulatore attivo di default
               
);
                       
// SOTTOMENU DI ANAGRAFICA
                       
$items[] = array(
                           
'path' => 'soggetto/'.arg(1).'/modifica/anagrafica/dati',
                           
'title' => t('Dati Anagrafici'),
                           
'access' => user_access('gestione soggetto'),
                           
'callback' => 'soggetto_form',
                           
'weight' => 3,
                           
'type' => MENU_LOCAL_TASK,
                            );           
                       
$items[] = array(
                           
'path' => 'soggetto/'.arg(1).'/modifica/anagrafica/contatto',
                           
'title' => t('Contatti'),
                           
'access' => user_access('gestione soggetto'),
                           
'callback' => 'soggetto_form_contatto',
                           
'weight' => 5,
                           
'type' => MENU_LOCAL_TASK// Tabulatore attivo di default
                           
);       
           
/*
            $items[] = array(
                'path' => 'soggetto/'.arg(1).'/modifica/documenti',
                'title' => t('Documenti'),
                'access' => user_access('gestione soggetto'),
                'callback' => 'soggetto_form',
                'weight' => 4,
                'type' => MENU_LOCAL_TASK
                );
            // Visualizza Scheda Immagini
            $items[] = array(
                'path' => 'soggetto/'.arg(1).'/modifica/scadenze',
                'title' => t('Scadenze'),
                'callback' => 'soggetto_form',
                'access' => user_access('gestione soggetto'),
                'weight' => 5,
                'type' => MENU_LOCAL_TASK
                );
            // Visualizza Scheda Immagini
            $items[] = array(
                'path' => 'soggetto/'.arg(1).'/modifica/schede',
                'title' => t('Schede Lav.'),
                'callback' => 'soggetto_form',
                'access' => user_access('gestione soggetto'),
                'weight' => 6,
                'type' => MENU_LOCAL_TASK
                );
            // Visualizza Scheda schede di lavorazione
            $items[] = array(
                'path' => 'soggetto/'.arg(1).'/modifica/auto',
                'title' => t('Auto'),
                'callback' => 'soggetto_form',
                'access' => user_access('gestione soggetto'),
                'weight' => 7,           
                'type' => MENU_LOCAL_TASK );
            */
   
}
    return
$items;
}
/**
 * Recupera dati di autocompletamento
 */
function soggetto_autocomplete_nome($string) {
 
$matches = array();
 
$result = db_query_range("SELECT nome, indirizzo, citta FROM {gest_soggetto} WHERE LOWER(nome) LIKE LOWER('%s%%')", $string, 0, 10);
  while (
$user = db_fetch_object($result)) {
   
$matches[$user->nome] = check_plain($user->nome.'-'.$user->indirizzo.'-'.$user->citta);
  }
  print
drupal_implode_autocomplete($matches);
  exit();
}
function
soggetto_autocomplete_codice($string) {
 
$matches = array();
 
$result = db_query_range("SELECT codicefiscale, nome, indirizzo, citta FROM {gest_soggetto} WHERE LOWER(codicefiscale) LIKE LOWER('%s%%')", $string, 0, 10);
  while (
$user = db_fetch_object($result)) {
   
$matches[$user->codicefiscale] = check_plain($user->codicefiscale.'-'.$user->nome.'-'.$user->indirizzo.'-'.$user->citta);
  }
  print
drupal_implode_autocomplete($matches);
  exit();
}
// ***********************************************
// ***** FORM E LISTA CONTATTI ******************
function soggetto_form_contatto()
{
   
// Verifica l'argomento 6 per verificare se siamo in modifica o cancella
   
if (arg(6)=='cancella') {
       
db_query('
            DELETE FROM
            {gest_contatto}
            WHERE
            id_soggetto = %d
            AND
            id = %d
            '
,
           
arg(1),
           
arg(5)
            );
    }
    if (
arg(6)=='modifica') {
       
$result = db_query('
            SELECT
            id,
            nome,
            telefono1,
            telefono2,
            email
            FROM
            {gest_contatto}
            WHERE
            id_soggetto = %d
            AND
            id = %d
            '
,
           
arg(1),
           
arg(5)
            );
       
$value = db_fetch_array($result);
    }   
   
// Form Inserimento / Modifica
   
$form['#method'] = 'post';
   
$form['#action'] = url('/soggetto/'.arg(1).'/modifica/anagrafica/contatto');
   
// Campo Nome
   
$form['id'] = array(
     
'#type' => 'hidden',
     
'#title' => t('Nome'),
     
'#default_value' => $value['id'],
    );   
   
// Campo Nome
   
$form['nome'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Nome'),
     
'#size' => 30,
     
'#maxlength' => 50,
     
'#required' => TRUE,
     
'#default_value' => $value['nome'],
     
'#prefix' => '<table><tr><td>',
       
'#suffix' => '</td>',
    );   
   
$form['telefono1'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Telefono 1'),
     
'#size' => 16,
     
'#maxlength' => 25,
     
'#default_value' => $value['telefono1'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',
    );
   
$form['telefono2'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Telefono 2'),
     
'#size' => 16,
     
'#maxlength' => 25,
     
'#default_value' => $value['telefono2'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',
    );   
   
$form['email'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Email'),
     
'#size' => 30,
     
'#maxlength' => 50,
     
'#default_value' => $value['email'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td></tr></table>',
    );   
   
// Pulsante Ricerca
     
$form['search'] = array('#type' => 'submit', '#value' => t('Conferma'));
     
// Provvede a controllare il form completando eventuali valori omessi, costruisce e stampa il form
     
$output = drupal_get_form('soggetto_form_contatto', $form);
   
// Costruisci i titoli da mostrare
   
$header = array(
        array(
'data' => t('Nome'), 'field' => 'nome', 'sort' => 'desc'),
        array(
'data' => t('Telefono 1'), 'field' => 'telefono1'),
        array(
'data' => t('Telefono 2'), 'field' => 'telefono2'),
        array(
'data' => t('email'), 'field' => 'email'),
       
t('Mostra'),
       
t('Elimina'),      
    );   
   
// Costruisci la query
   
$sql = 'SELECT
            id,
            nome,
            telefono1,
            telefono2,
            email
            FROM
            {gest_contatto}
            WHERE
            id_soggetto = '
           
.arg(1)
            .
tablesort_sql($header)
            ;    
   
// Applica la query (paginata)
   
$result = pager_query($sql, 50);
    while (
$contatto = db_fetch_object($result)) {
     
$rows[] = array(
                   
$contatto->nome,
                   
$contatto->telefono1,
                   
$contatto->telefono2,
                   
$contatto->email
                   
l(t('Dettaglio'), '/soggetto/'.arg(1).'/modifica/anagrafica/contatto/'.$contatto->id.'/modifica', NULL ),
                   
l(t('Cancella'), '/soggetto/'.arg(1).'/modifica/anagrafica/contatto/'.$contatto->id.'/cancella', NULL ),
                    );
    }
   
// Temizzazione della tabella e titoli
   
$output .= theme('table', $header, $rows);
   
// Temizzazione della pagina
   
$output .= theme('pager', NULL, 10, 0, tablesort_pager());   
   
// print theme('page', $output);
   
return $output;
}
// INSERIMENTO CONTATTO
function soggetto_form_contatto_submit($form_id, $form_values) {
   
// Verifica l'operazione è una modifica
   
if ($form_values['id']>0) {
       
// Modifica Contatto
       
db_query("
            UPDATE {gest_contatto} SET
            nome = '%s',
            telefono1 = '%s',
            telefono2 = '%s',
            email = '%s'
            WHERE
            id = %d
            "
,
           
drupal_strtoupper($form_values['nome']),
           
drupal_strtoupper($form_values['telefono1']),
           
drupal_strtoupper($form_values['telefono2']),
           
$form_values['email'],
           
$form_values['id']
            );
       
drupal_set_message(t('Contatto Modificato'),'error');
    }
    else {
       
// Recupera l'ultimo id inserito
       
$id_contatto = db_next_id('gest_contatto_id');
       
// Inserisci Contatto
       
db_query("
            INSERT INTO  
            {gest_contatto}
            (
            id,
            id_soggetto,
            nome,
            telefono1,
            telefono2,
            email
            )
            VALUES
            (
            %d,
            %d,
            '%s',
            '%s',
            '%s',
            '%s'
            )
            "
,
           
$id_contatto,
           
arg(1),
           
drupal_strtoupper($form_values['nome']),
           
drupal_strtoupper($form_values['telefono1']),
           
drupal_strtoupper($form_values['telefono2']),
           
$form_values['email']
            );
       
drupal_set_message(t('Nuovo Contatto Inserito'),'error');
    }
   
drupal_goto('/soggetto/'.arg(1).'/modifica/anagrafica/contatto');   
}
/*
function soggetto_form_alter($form_id, &$form)
{
    if ($_POST['edit']['nome'] =='pippo')
        $form['nome']['#value'] = 'dgdg dg dg dfg dg d';
}
*/
// FORM DA MOSTRARE PER INSERIMENTO/MODIFICA
function soggetto_form()
{
   
// Se l'argomento è maggiore di 0 significa che è selezionato un soggetto
    // Fai la query e mostra i dati
   
if (arg(1)>0) {
       
// Ricerca se esiste già un codice iva o codice fiscale esistente
       
$result = db_query('SELECT
            id,
            nome,
            indirizzo,
            citta,
            provincia,
            cap,
            indirizzo2,
            citta2,
            provincia2,
            cap2,               
            codicefiscale,
            email,
            telefono1,
            telefono2,
            fax,
            note,
            comunenascita,
            provincianascita,
            datanascita
            FROM
            {gest_soggetto}
            WHERE
            id = \'%s\'
            '
,
           
arg(1)
            );
       
$value = db_fetch_array($result);   
       
// Gira la data in modo corretto
       
if ($value['datanascita']) {
           
$ArrayDataEsploso = explode ('-', $value['datanascita']);
           
$value['datanascita'] = array('day'=> $ArrayDataEsploso[2], 'month'=> $ArrayDataEsploso[1], 'year'=> $ArrayDataEsploso[0]);
        }
    }
   
// Proprietà del form
   
$form['#method'] = 'post';
   
$form['#action'] = url($value['action']);
     
// );
    // Campo ID (Nascosto)   
   
$form['id'] = array(
     
'#type' => 'hidden',
     
'#size' => 10,
     
'#maxlength' => 10,
     
'#required' => FALSE,
     
'#value' => $value['id'],
     
'#prefix' => ''
    );
   
// Campo Nome/Ragione Sociale   
   
$form['nome'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Nome'),
     
'#size' => 50,
     
'#maxlength' => 50,
     
'#required' => TRUE,
     
'#default_value' => $value['nome'],
     
'#prefix' => '<table><tr><td><table><tr><td>',
       
'#suffix' => '</td>',
    );   
   
// Campo Partita Iva
   
$form['codicefiscale'] = array(
     
'#type' => 'textfield',
     
'#title' => t('P.Iva/Cod.Fiscale'),
     
'#size' => 20,
     
'#maxlength' => 20,
     
'#required' => TRUE,
     
'#default_value' => $value['codicefiscale'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td></tr></table></td></tr>',
    );
// Indirizzo (linea NON collasabile)
     
$form['dettaglionascita'] = array(
       
'#type' => 'fieldset',
       
'#title' => t('Dati Di Nascita'),
       
'#collapsible' => TRUE,
       
'#collapsed' => TRUE,
         
'#prefix' => '<tr><td>',
           
'#suffix' => '',
      );
   
// Campo indirizzo Nascita
   
$form['dettaglionascita']['comunenascita'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Comune di Nascita'),
     
'#size' => 40,
     
'#maxlength' => 50,
     
'#default_value' => $value['comunenascita'],
     
'#prefix' => '<table><tr><td>',
       
'#suffix' => '</td>',
    );   
   
// Campo Provincia Nascita
   
$form['dettaglionascita']['provincianascita'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Prov'),
     
'#size' => 5,
     
'#maxlength' => 5,
     
'#default_value' => $value['provincianascita'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',
    );
   
// Campo Data Nascita
   
$form['dettaglionascita']['datanascita'] = array(
     
'#type' => 'date',
     
'#title' => t('Data'),
     
'#default_value' => $value['datanascita'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td></tr></table></td></tr>',
    );
     
// Indirizzo (linea NON collasabile)
     
$form['dettaglio'] = array(
       
'#type' => 'fieldset',
       
'#title' => t('Indirizzo Principale'),
         
'#prefix' => '<tr><td>',
           
'#suffix' => '',       
      );
   
// Campo indirizzo   
   
$form['dettaglio']['indirizzo'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Indirizzo'),
     
'#size' => 80,
     
'#maxlength' => 100,
     
'#required' => TRUE,
     
'#default_value' => $value['indirizzo'],
     
'#prefix' => '<table><tr><td colspan=3>',
       
'#suffix' => '</td></tr>',
    );   
   
// Campo CAP
   
$form['dettaglio']['cap'] = array(
     
'#type' => 'textfield',
     
'#title' => t('CAP'),
     
'#size' => 5,
     
'#maxlength' => 5,
     
'#required' => TRUE
     
'#default_value' => $value['cap'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',     
    );
   
// Campo Città   
   
$form['dettaglio']['citta'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Citta\''),
     
'#size' => 25,
     
'#maxlength' => 25,
     
'#required' => TRUE,    
     
'#default_value' => $value['citta'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',
    );
   
// Campo Provincia
   
$form['dettaglio']['provincia'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Provincia'),
     
'#size' => 5,
     
'#maxlength' => 5,
     
'#required' => TRUE,     
     
'#default_value' => $value['provincia'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td></tr></table></td></tr>',
    );   
     
// Indirizzo Alternativo (linea collasabile)
     
$form['dettaglio1'] = array(
       
'#type' => 'fieldset',
       
'#title' => t('Indirizzo Secondario'),
       
'#collapsible' => TRUE,
       
'#collapsed' => TRUE,
         
'#prefix' => '<tr><td>',
           
'#suffix' => '',       
      );
   
// Campo indirizzo secondario   
   
$form['dettaglio1']['indirizzo2'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Indirizzo'),
     
'#size' => 80,
     
'#maxlength' => 100,
     
'#required' => FALSE,
     
'#default_value' => $value['indirizzo2'],
     
'#prefix' => '<table><tr><td colspan=3>',
       
'#suffix' => '</td></tr>',       
    );   
   
// Campo CAP secondario
   
$form['dettaglio1']['cap2'] = array(
     
'#type' => 'textfield',
     
'#title' => t('CAP'),
     
'#size' => 5,
     
'#maxlength' => 5,
     
'#required' => FALSE
     
'#default_value' => $value['cap2'],
     
'#prefix' => '<tr><td>',
       
'#suffix' => '</td>',     
    );
   
// Campo Città secondario   
   
$form['dettaglio1']['citta2'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Citta\''),
     
'#size' => 25,
     
'#maxlength' => 25,
     
'#required' => FALSE,    
     
'#default_value' => $value['citta2'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',     
    );
   
// Campo Provincia secondario
   
$form['dettaglio1']['provincia2'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Provincia'),
     
'#size' => 5,
     
'#maxlength' => 5,
     
'#required' => FALSE,     
     
'#default_value' => $value['provincia2'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td></tr></table>',         
    );
   
// Campo Telefono Principale
   
$form['telefono1'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Telefono'),
     
'#size' => 15,
     
'#maxlength' => 20,
     
'#required' => FALSE
     
'#default_value' => $value['telefono1'],
     
'#prefix' => '<tr><td><table><tr><td>',
       
'#suffix' => '</td>',
    );
   
// Campo Cellulare
   
$form['telefono2'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Cellulare'),
     
'#size' => 15,
     
'#maxlength' => 20,
     
'#required' => FALSE,
     
'#default_value' => $value['telefono2'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',
    );
   
// Campo Fax
   
$form['fax'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Fax'),
     
'#size' => 15,
     
'#maxlength' => 20,
     
'#required' => FALSE,    
     
'#default_value' => $value['fax'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td>',
    );   
   
// Campo Email
   
$form['email'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Indirizzo Email'),
     
'#size' => 30,
     
'#maxlength' => 60,
     
'#required' => FALSE,     
     
'#default_value' => $value['email'],
     
'#prefix' => '<td>',
       
'#suffix' => '</td></tr></table></td></tr>',
    );
     
// Campo Note (collassabile)
     
$form['dettaglio2'] = array(
       
'#type' => 'fieldset',
       
'#title' => t('Note'),
       
'#collapsible' => TRUE,
       
'#collapsed' => TRUE,       
         
'#prefix' => '</td></tr><tr><td>',     
           
'#suffix' => '',       
      );
   
// Campo Note
     
$form['dettaglio2']['note'] = array(
     
'#type' => 'textarea',
     
'#title' => t('Note'),
     
'#default_value' =>  variable_get('description', ''),
     
'#cols' => 80,
     
'#rows' => 5,    
     
'#default_value' => $value['note'],
     
'#prefix' => '',
       
'#suffix' => '</td></tr></table>',
    );
 
// pulsante conferma
 
$form['submit'] = array('#type' => 'submit', '#value' => t('Conferma'));
 
// pulsante conferma
 
$form['test'] = array('#type' => 'submit', '#value' => t('Prova'));
 
// Provvede a controllare il form completando eventuali valori omessi, costruisce e stampa il form
 
$output = drupal_get_form('soggetto_form', $form);
  return
$output;   
}
// VALIDAZIONE DEI DATI IMMESSI NEL FORM CLIENTI
function soggetto_form_validate($form_id, $form_values) {
   
// Imposta l'array dei dati
   
$errors = array();
   
// Verifica che siano inseriti i dati essenziali (NOT NULL)
   
if ($form_values['nome'] == '') {
        
$errors['nome'] = t('Inserire il Nome o La ragione Sociale');
    }
    if (
$form_values['indirizzo'] == '') {
        
$errors['indirizzo'] = t('Inserire l\'indirizzo');
    }
    if (
$form_values['citta'] == '') {
        
$errors['citta'] = t('Inserire la Citta\'');
    }
    if (
$form_values['provincia'] == '') {
        
$errors['provincia'] = t('Inserire la provincia');
    } 
   
// Verifica la validità dell'email inserita
   
if ($form_values['email']) {
        if (!
valid_email_address($form_values['email'])) {
            
$errors['email'] = t('Email NON valida');
        }    
    }
   
// Se stiamo facendo un inserimento nuovo ($form_values['id'] = NULL), verifica Partita iva
   
if (!$form_values['id'] && $form_values['codicefiscale']) {
       
// Ricerca se esiste già un codice iva o codice fiscale esistente
       
$result = db_query('SELECT
                            id 
                            FROM
                            {gest_soggetto}
                            WHERE
                            codicefiscale = \'%s\'
                            '
,
                           
$form_values['codicefiscale']
                            );
       
// se ci sono piu righe restituisci l'errore
       
if (db_num_rows($result) > 0) {
           
$errors['codicefiscale'] = t('Partita iva o Codice Fiscale gia\' presente in archivio');                                       
            }
    }
// Fine verifica Partita iva
    // Imposta l'array degli errori trovati    
   
foreach ($errors as $name => $message) {       
     
form_set_error($name, $message);
    }
   
// Ritorna il numero degli errori trovati
   
return count($errors) == 0;
}
// ESECUZIONE DOPO AVER VERIFICATO I DATI DEL FORM
function soggetto_form_submit($form_id, $form_values) {
   
// Se non c'è id, siamo di fronte ad un inserimento
   
if (arg(1)<=0) {
       
// Recupera l'ultimo id inserito
       
$id_soggetto = db_next_id('gest_soggetto_id');       
       
// inserisci
       
db_query("INSERT INTO {gest_soggetto}
                (
                id,
                nome,
                indirizzo,
                citta,
                provincia,
                cap,
                indirizzo2,
                citta2,
                provincia2,
                cap2,               
                codicefiscale,
                email,
                telefono1,
                telefono2,
                fax,
                note,
                comunenascita,
                provincianascita,
                datanascita
                ) VALUES (
                %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'
                )"
,
               
$id_soggetto,
               
drupal_strtoupper($form_values['nome']), 
               
drupal_strtoupper($form_values['indirizzo']),
               
drupal_strtoupper($form_values['citta']),
               
drupal_strtoupper($form_values['provincia']),
               
drupal_strtoupper($form_values['cap']),
               
drupal_strtoupper($form_values['indirizzo2']),
               
drupal_strtoupper($form_values['citta2']),
               
drupal_strtoupper($form_values['provincia2']),
               
drupal_strtoupper($form_values['cap2']),               
               
drupal_strtoupper($form_values['codicefiscale']),
               
$form_values['email'],
               
drupal_strtoupper($form_values['telefono1']),
               
drupal_strtoupper($form_values['telefono2']),
               
drupal_strtoupper($form_values['fax']),
               
drupal_strtoupper($form_values['note']),
               
drupal_strtoupper($form_values['comunenascita']),
               
drupal_strtoupper($form_values['provincianascita']),
               
$form_values['datanascita']['year'].'-'.$form_values['datanascita']['month'].'-'.$form_values['datanascita']['day']   
                );
       
// Imposta il messaggio di avvenuto inserimento
       
drupal_set_message(t('Cliente').' '.$form_values['name'].' '.t('Inserito'));   
    }
    else
        {   
       
//aggiorna
       
db_query("UPDATE {gest_soggetto} SET    
                nome = '%s',
                indirizzo = '%s',
                citta = '%s',
                provincia = '%s',
                cap = '%s',
                indirizzo2 = '%s',
                citta2 = '%s',
                provincia2 = '%s',
                cap2 = '%s',               
                codicefiscale = '%s',
                email = '%s',
                telefono1 = '%s',
                telefono2 = '%s',
                fax = '%s',
                note = '%s',
                comunenascita = '%s',
                provincianascita = '%s',
                datanascita = '%s'
                WHERE
                id = %d
                "
,
               
drupal_strtoupper($form_values['nome']), 
               
drupal_strtoupper($form_values['indirizzo']),
               
drupal_strtoupper($form_values['citta']),
               
drupal_strtoupper($form_values['provincia']),
               
drupal_strtoupper($form_values['cap']),               
               
drupal_strtoupper($form_values['indirizzo2']),
               
drupal_strtoupper($form_values['citta2']),
               
drupal_strtoupper($form_values['provincia2']),
               
drupal_strtoupper($form_values['cap2']),
               
drupal_strtoupper($form_values['codicefiscale']),
               
$form_values['email'],
               
drupal_strtoupper($form_values['telefono1']),
               
drupal_strtoupper($form_values['telefono2']),
               
drupal_strtoupper($form_values['fax']),
               
drupal_strtoupper($form_values['note']),
               
drupal_strtoupper($form_values['comunenascita']),
               
drupal_strtoupper($form_values['provincianascita']),
               
$form_values['datanascita']['year'].'-'.$form_values['datanascita']['month'].'-'.$form_values['datanascita']['day'],               
               
arg(1)
                );
           
// imposta l'id da passare sull'url $argomento (1)
           
$id_soggetto = arg(1);   
       
drupal_set_message(t('Cliente').' '.$form_values['name'].' '.t('Aggiornato'));   
        }
       
// Vai direttamente in modifica
       
drupal_goto('/soggetto/'.$id_soggetto.'/modifica/anagrafica');
}
/*
---------------- FUNZIONI DI RICERCA ---------------------------------------
*/
function soggetto_form_ricerca()
{
   
// Proprietà del form
   
$form['#method'] = 'post';
   
$form['#action'] = url('soggetto/ricerca');
     
// );
    // Campo Nome/Ragione Sociale   
   
$form['nome'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Nome'),
     
'#size' => 50,
     
'#maxlength' => 50,
     
'#autocomplete_path' => 'soggetto/autocomplete/nome',     
     
'#prefix' => '<table><tr><td>',
       
'#suffix' => '</td>',
    );   
   
// Campo Partita Iva
   
$form['codicefiscale'] = array(
     
'#type' => 'textfield',
     
'#title' => t('P.Iva/Cod.Fiscale'),
     
'#size' => 45,
     
'#maxlength' => 16,
     
'#autocomplete_path' => 'soggetto/autocomplete/codice',         
     
'#prefix' => '<td>',
       
'#suffix' => '</td></table>',
    );
   
// Pulsante Ricerca
     
$form['search'] = array('#type' => 'submit', '#value' => t('Cerca'));
     
// Provvede a controllare il form completando eventuali valori omessi, costruisce e stampa il form
     
$output = drupal_get_form('soggetto_form_ricerca', $form);
      return
$output;   
}
// VALIDAZIONE DEI DATI IMMESSI NEL FORM RICERCA
function soggetto_form_ricerca_validate($form_id, $form_values) {
}
// ESECUZIONE DOPO AVER VERIFICATO I DATI DEL FORM DI RICERCA
function soggetto_form_ricerca_submit($form_id, $form_values) {
   
// Trasforma i dati trasmessi nel post in dati di GET
   
drupal_goto('soggetto/lista', 'nome='.$form_values['nome']);   
}               
// Mostra Lista Risultati
function soggetto_lista() {
   
// Costruisci la condizione
   
$condition = '';
    if (
$_GET['nome']) {
        if (
$condition == '') $condition = ' nome like \'%'.$_GET['nome'].'%\'';
                        else 
$condition .= ' AND nome like \'%'.$_GET['nome'].'%\'';
        }
    if (
$_GET['codicefiscale']) {
        if (
$condition == '') $condition = ' codicefiscale like \'%'.$_GET['codicefiscale'].'%\'';
                        else 
$condition .= ' AND codicefiscale like \'%'.$_GET['codicefiscale'].'%\'';
        }
   
// Aggiunge l'eventuale where
   
if ($condition != '') $condition = ' WHERE '.$condition;
   
// Costruisci i titoli da mostrare
   
$header = array(
       array(
'data' => t('Nome/Ragione Sociale'), 'field' => 'nome', 'sort' => 'desc'),
       array(
'data' => t('Citta\''), 'field' => 'citta'),
       array(
'data' => t('P.IVA/Cod. Fiscale'), 'field' => 'codicefiscale'),
      
t('Mostra'),
      
t('Elimina'),      
    );   
   
// Costruisci la query
   
$sql = 'SELECT
            id,
            nome,
            citta,
            codicefiscale
            FROM {gest_soggetto}
            '
.$condition.tablesort_sql($header);    
   
// Applica la query (paginata)
   
$result = pager_query($sql, 50);
    while (
$soggetto = db_fetch_object($result)) {
     
$rows[] = array(
                     
$soggetto->nome,
                     
$soggetto->citta,
                     
$soggetto->codicefiscale,
                     
l(t('Dettaglio'), '/soggetto/'.$soggetto->id.'/modifica/anagrafica', NULL ),
                     
l(t('Cancella'), '/soggetto/'.$soggetto->id.'/modifica/cancella', NULL ),
                      );
    }
   
// Temizzazione della tabella e titoli
   
$output .= theme('table', $header, $rows);
   
// Temizzazione della pagina
   
$output .= theme('pager', NULL, 10, 0, tablesort_pager());   
   
// print theme('page', $output);
   
return $output;
}   
/*
--------- FUNZIONE ELIMINAZIONE DEL SOGGETTO -----------
*/
function soggetto_cancella() {
   
// Mostra quel cliente
   
$result = db_query("
        SELECT
        id,
        nome,
        indirizzo,
        citta,
        provincia,
        cap,
        codicefiscale
        FROM {gest_soggetto}
        WHERE
        id = %d
        "
,
       
arg(1)
        );
   
$soggetto = db_fetch_object($result);
   
// Memorizza il referer (per poi tornare alla ricerca)    
   
$form['referer'] = array(
     
'#type' => 'hidden',
     
'#size' => 200,
     
'#maxlength' => 200,
     
'#required' => FALSE,
     
'#value' => referer_uri(),
    ); 
   
$output .= confirm_form(
       
'soggetto_form_cancella',
       
$form,
       
t('ATTENZIONE!!! Confermi la cancellazione? '),
       
'soggetto/'.arg(1).'/modifica/anagrafica',
       
'Nome: '.$soggetto->nome.' - '.
       
'Indirizzo: '.$soggetto->indirizzo.' - '.
       
'Citta\': '.$soggetto->citta.'<p></p>',
       
t('Cancella'),
       
t('Annulla')                                
        );    
    return
$output;
}
// CONFERMA CANCELLAZIONE
function soggetto_form_cancella_submit($form_id, $form_values) {
   
// Cancella il Soggetto
   
db_query("
        DELETE FROM 
        {gest_soggetto}
        WHERE
        id = %d
        "
,
       
arg(1)
        );   
   
drupal_set_message(t('Soggetto Cancellato!!'),'error');   
   
drupal_goto('soggetto/inserisci');   
}
?>

P.S.
Spero non sia stato "frantumato" dal forum. Nell'esempio sopra puoi studiarti come fare un modulo che interagisce con dati in una tabella

Ciao
Gianni

Il modulo sopra contiene molto di più di ciò che ti serve, perchè fa parte di un progetto più ampio, quindi alcune parti le potresti anche togliere.

Guardati i menu
function soggetto_form()
function soggetto_form_validate($form_id, $form_values)
function soggetto_form_submit($form_id, $form_values)

Il primo determina i menu, la funzione soggetto_form() disegna il form, la funzione soggetto_form_validate valida i dati inseriti e la funzione soggetto_form_submit inserisce il soggetto nella tabella

Ciao
Gianni

grazie mille provvederò a personalizzare e se ho pbl mi sa che mi farò di nuovo vivo. Comunque grazie mille.

giuseppe

ho caricato il modulo e creato la tabella nel db.
cliccando poi nel menu soggetti/fornitori mi dice:

Fatal error: Call to undefined function: drupal_get_form() in c:\programmi\easyphp1-7\www\prova\modules\soggetto.module on line 1091

giuseppe

devi usare drupal 4.7

Ciao
Gianni

ok

giuseppe

ho installato il tutto, gira, ma alla conferma per l'inserimento dei dati mi da il seguente errore:

Fatal error: Cannot create references to/from string offsets nor overloaded objects in /web/htdocs/www.miosito.it/home/chiese/includes/form.inc on line 277

però la scheda viene regolarmente caricata, perchè con la funzione ricerca me la da regolarmente, tranne poi cliccare "dettagli" e mi restituisce lo stesso errore di sopra.

giuseppe

Quel codice è un esempio, te lo devi un po' studiare. Tieni conto che è estrapolato da un progetto che ho fatto. Alcune schede non funzionano perchè sono estrapolate dal contesto del programma. Studiatelo per capire come funzionano tabelle e menu. Ti posto anche un altro codice più semplice (tabella gest_marche... id integer, nome varchar(30))

<?php
/* ---------------------------------------------------------------------
*         MODULO PER LA GESTIONE DELLE MARCHE AUTO
*        v 0.1 14/11/2005
*              Licenza Modulo GPL
*        Autore giusti Gianni ---------------------------------------------------------------------- */
/*
----------------- FUNZIONI DI BASE PER IL MODULO -----------------------
*/
function marca_help($section='') {
$output = '';
switch (
$section) {
    case
"admin/modules#description":
   
$output = t("*** Gestione Marca Auto ***");
    break;
    }
return
$output;
}
// Determiniamo gli accessi al modulo (dando poi i giusti permessi nell'amministrazione)
function marca_perm() {
return array(
'amministrazione marca','gestione marca');
}
// Gestione dei Menu
function marca_menu() {
   
$items = array();
   
// Principale (operazioni principali)
   
$items[] = array(
       
'path' => 'tabelle/marca',
       
'title' => t('Marche'),
       
'callback' => 'marca_form',
       
'access' => user_access('gestione marca'),
       
'type' => MENU_NORMAL_ITEM);
   
// Se c'è l'argomento attiva il menu modifica
   
if (arg(2)>0) {
       
// Modifica (non visibile nei menu)
       
$items[] = array(
           
'path' => 'tabelle/marca/'.arg(2).'/modifica',
           
'title' => t('Modifica'),
           
'callback' => 'marca_form',
           
'access' => user_access('gestione marca'),
           
'type' => MENU_CALLBACK );   
       
// Modifica (non visibile nei menu)
       
$items[] = array(
           
'path' => 'tabelle/marca/'.arg(2).'/cancella',
           
'title' => t('Cancella'),
           
'callback' => 'marca_form_cancella',
           
'access' => user_access('gestione marca'),
           
'type' => MENU_CALLBACK );   
    }
    return
$items;
}
function
marca_form_cancella() {
   
// Mostra quel cliente
   
$result = db_query("
        SELECT
        id,
        nome
        FROM {gest_marca}
        WHERE
        id = %d
        "
,
       
arg(2)
        );
   
$dati = db_fetch_object($result);
   
$output .= confirm_form(
       
'marca_form_cancella',
       
$form,
       
t('ATTENZIONE!!! Confermi la cancellazione? '),
       
'tabelle/marca/'.arg(2).'/modifica',
       
'Nome: '.$dati->nome.'<p></p>',
       
t('Cancella'),
       
t('Annulla')                                
        );    
    return
$output;
}
// CONFERMA CANCELLAZIONE
function marca_form_cancella_submit($form_id, $form_values) {
   
// Cancella il Soggetto
   
db_query("
        DELETE FROM 
        {gest_marca}
        WHERE
        id = %d
        "
,
       
arg(2)
        );   
   
drupal_set_message(t('Marca Cancellata!!'),'error');   
   
drupal_goto('tabelle/marca');   
}
function
marca_form() {
   
// Se l'argomento è maggiore di 0 significa che è selezionato un elemento. Fai la query e mostra i dati
   
if (arg(2)>0) {
       
// Ricerca se esiste gia
       
$result = db_query('
            SELECT
            id,
            nome
            FROM
            {gest_marca}
            WHERE
            id = %d
            '
,
           
arg(2)
            );
       
$value = db_fetch_array($result);
    }
   
$form['#method'] = 'post';
   
// $form['#action'] = url('marca');
     
$form['datiprincipali'] = array(
       
'#type' => 'fieldset',
       
'#title' => t('Inserimento/Modifica'),
         
'#prefix' => '',
           
'#suffix' => '',
      );
   
$form['datiprincipali']['nome'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Marca'),
     
'#size' => 22,
     
'#maxlength' => 30,
     
'#default_value' => $value['nome'],
     
'#prefix' => '',
       
'#suffix' => '',
    );
 
// pulsante conferma
 
$form['submit'] = array('#type' => 'submit', '#value' => t('Conferma'));
 
// Provvede a controllare il form completando eventuali valori omessi, costruisce e stampa il form
 
$output .= drupal_get_form('marca_form', $form);
   
// Costruisci i titoli da mostrare
   
$header = array(
       array(
'data' => t('id'), 'field' => 'id'),
       array(
'data' => t('Nome'), 'field' => 'nome', 'sort' => 'asc'),
      
t('Modifica'),
      
t('Elimina'),      
    );   
   
// Costruisci la query
   
$sql = 'SELECT
            id,
            nome
            FROM {gest_marca}
            '
.$condition.tablesort_sql($header);    
   
// Applica la query (paginata)
   
$result = pager_query($sql, 50);
    while (
$dati = db_fetch_object($result)) {
     
$rows[] = array(
                     
$dati->id,
                     
$dati->nome,
                     
l(t('Dettaglio'), '/tabelle/marca/'.$dati->id.'/modifica', NULL ),
                     
l(t('Cancella'), '/tabelle/marca/'.$dati->id.'/cancella', NULL ),
                      );
    }
   
// Temizzazione della tabella e titoli
   
$output .= theme('table', $header, $rows);
   
// Temizzazione della pagina
   
$output .= theme('pager', NULL, 10, 0, tablesort_pager());   
   
// print theme('page', $output);
   
return $output;
}
// INSERIMENTO/MODIFICA DATI IMMESSI NEL FORM
function marca_form_validate($form_id, $form_values) {
   
// Imposta l'array dei dati
   
$errors = array();
    if (
arg(2)<=0) {
       
$result = db_query('
            SELECT id FROM {gest_marca}
            WHERE
            nome = \'%s\'
            '
,
           
$form_values['nome']
        );
        if (
db_num_rows($result) > 0) {
           
$errors['nome'] = t('Attenzione!! Marca già inserita');
            }
    }
    if (
$form_values['nome']=='') {
       
$errors['nome'] = t('Attenzione!! Inserire la Marca');
        }   
   
// Imposta l'array degli errori trovati
   
foreach ($errors as $name => $message) {
     
form_set_error($name, $message);
    }
   
// Ritorna il numero degli errori trovati
   
return count($errors) == 0;
}
// INSERIMENTO/MODIFICA DATI IMMESSI NEL FORM
function marca_form_submit($form_id, $form_values) {
    if (
arg(2)>0) {
       
db_query('
            UPDATE {gest_marca}
            SET
            nome = \'%s\'
            WHERE
            id = %d
            '
,
           
drupal_strtoupper($form_values['nome']),
           
arg(2)
        );
    }
    else {
       
// Recupera l'ultimo id inserito
       
$id_marca = db_next_id('gest_marca_id');   
       
// Inserisci Marca
       
db_query('
            INSERT INTO {gest_marca}
            (id, nome)
            VALUES
            (%d, \'%s\')
            '
,
           
$id_marca,
           
drupal_strtoupper($form_values['nome'])
        );
    }
}
?>

ok

giuseppe

Ho provato gli script sulla 4.7b5 ed ho trovato un errore!!
cancella la/le righe con questo condice
$form['#action'] = url($value['action']);
perchè, a causa di un bug sulla 4.7b4, quella linea non aveva nessun effetto, sulla 4.7b5 invece, ti blocca l'inserimento del soggetto perchè non lo valorizzo!! Commentala/e e vedrai che l'inserimento funziona.
A parte questo, il resto mi funziona.

Ciao
Gianni

Volevo sapere se ho interpretato bene le funzioni delle seguenti righe:
//$form_values['natoil']['day'].'-'.$form_values['natoil']['month'].'-'.$form_values['natoil']['year']//
Questa riga trasforma 'natoil' in una stringa con giorno-mese-anno
mentre la seguente riga:
//:$form_values['natoil']['day'].'-'.$form_values['natoil']['month'].'-'.$form_values['natoil']['year'],
arg(1)//
inserisce nella variabile 'natoil' sul database il valore uscente.
Tutto ciò perchè, se io provo a stampare il valore di 'natoil' mi viene fuori la scritta "array", ciò significa che non ha recepito la data che ho inserito.

giuseppe

La data su un form drupal, viene inserita in un array associativo composto da $form_values['NOMECAMPO']['day'].'-'.$form_values['NOMECAMPO']['month'].'-'.$form_values['NOMECAMPO']['year']
Quindi se stampi direttamente NOMECAMPO ti viene scritto Array proprio perchè quel campo è un array composto da 3 "campi" (permettimi il termine non proprio tecnico), cioè day, month e year.
arg(1) è una funzione di drupal che permette di prendere un argomento della stringa passata a q attraverso l'url..... detto in parole più terra terra, se vedi l'url che adesso hai sul browser, è fatto così ....?q=node/1062 arg(1) è il primo argomento di node/1062, cioè 1062.
Io lo uso per passare da un link ad un altro, l'id del cliente.

Ciao
Gianni

...e non immaginavo che per fare un banale form con insert/update/delete ci sarebbero volute un bordello di righe di codice...
solitamente ci metto nemmeno un'ora per fare una form di insert con una tabella con edit/delete e controlli vari....

da quello che vedo qui sopra penso che per fare un form complesso (parecchi campi) ci mettero' probabilmente mezza giornata.....o sbaglio?

non trovo molta simpatia per i cms, essendo abituato a fare le cose a mano in mooooolto meno tempo....o sbaglio?
vi prego convincetemi!

una intranet aziendale complessa, onestamente, la fareste con drupal?
ciao:)

se ci metti mooooolto meno tempo a scrivere codice a mano sarebbe inutile per te usare un cms o un cmf che dir si voglia ma questo è un discorso generico credo.
Se poi ti stanno pure antipatici chi te lo fa fare?
Fossi in te neanche i 3 secondi per scaricarlo avrei perso...