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:
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))
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...