Daten speichern
Eingetragen von gaertner_markus (45)
am 29.10.2008 - 11:53 Uhr in
am 29.10.2008 - 11:53 Uhr in
hallo,
versuche mich gerade etwas in Drupal einzuarbeiten in dem ich ein Modul erstelle.
Etwas ganz einfaches: im Admin Menu sollen Daten hinzugefuegt werden -also ein Datum und dazu ein Wert. Also nicht ein bestimmter Wert -es soll eine Liste enstehen.
Die Ausgabe im Frontende ist kein Problem.
Nur das speichern der Daten in eine MySQL-DB ist das Problem.
Das Formular ist erstellt.
Mit der Funktion XXX_validate kann ich die Daten ueberpruefen.
Aber mit welchem Hook bekomme ich die Daten in die DB?
Ueber diese Thema kann ich die Suchergenisse an einer Hand abzaehlen.
mfg
- Anmelden oder Registrieren um Kommentare zu schreiben
Re: Daten speichern
am 29.10.2008 - 13:02 Uhr
Mit der Funktion XXX_validate kann ich die Daten ueberpruefen.
Aber mit welchem Hook bekomme ich die Daten in die DB?
Normalerweise mit
XXX_submit($form, &$form_state)
.Allerdings kannst du explizit einen submit-Handler angeben
<?php
$form['#submit'] = array('XXX_submit');
?>
oder submit-Handler nachträglich hinzufügen
<?php
function example_form_alter(&$form, $form_state, $form_id) {
$form['#submit'][] = 'example_submit';
}
?>
Die automatische Zuweisung eines submit-Handlers durch Drupal geschieht in
drupal_prepare_form()
.--
Wo sollen die Daten genau ..
am 29.10.2008 - 13:03 Uhr
.. gespeichert werden?
Die einfachste Art ist das in einer Variabel zu speichern. Dafür steht dir die Funktion variable_set('deine_name', $wert) zur Verfügung. Auslesen dann mit variable_get('dein_name', 'default_wert'). Das ist nur dann sinnvoll wenn es sich um wenige Werte handelt.
Für alle Formulare gilt das Schema Formular erstellen (Hook_form), Formular-Daten validieren (Hook_form_validate) und Daten verarbeiten (Hook_form_submit). In Submit kann man mit den Daten dann machen was man will.
Soll das in einer eigenen DB-Tabelle gespeichert werden musst du dir ein *.install-File schreiben in dem die DB-Tabelle definiert wird - z. B.:
<?php
// Id: dein_name.install, UwBach, 2008/10/29 $
/**
* Implementation of hook_install().
*/
function dein_name_install()
{
// Anlegen der Datenbank
drupal_install_schema('dein_name');
// Variable
variable_set('dein_name_zeitraum', array(
'von' =>
array('timestamp' => 0),
'bis' =>
array('timestamp' => 0)
));
variable_set('dein_name_anzeigetext', '');
} // END install
/**
* Implementation of hook_uninstall().
*/
function dein_name_uninstall()
{
// löschen der Datenbank
drupal_uninstall_schema('dein_name');
variable_del('dein_name_zeitraum');
variable_del('dein_name_anzeigetext');
} // END uninstall
/**
* Implematierung des Hook_schema()
*/
function dein_name_schema()
{
$schema['dein_name'] = array
(
'description' => 'Speichert alle Daten um deine Anwendung',
'fields' => array(
'id_dein_name' => array(
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
'description' => 'ID fuer Tabelle {dein_name}'
),
'anrede' => array(
'type' => 'varchar',
'length' => 6,
'not null' => TRUE,
'description' => 'Anrede'
),
'name' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'description' => 'Nachname'
),
'vorname' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'description' => 'Vorname'
),
'eingestellt_am' => array(
'type' => 'datetime',
'not null' => TRUE,
'description' => 'Tag der Speicherung'
),
'kto' => array(
'type' => 'varchar',
'length' => 20,
'not null' => FALSE,
'description' => 'Kontonummer'
),
'blz' => array(
'type' => 'varchar',
'length' => 20,
'not null' => FALSE,
'description' => 'Bankleitzahl'
),
'bank' => array(
'type' => 'varchar',
'length' => 100,
'not null' => FALSE,
'description' => 'Bankname'
),
'kto_inhaber' => array(
'type' => 'varchar',
'length' => 100,
'not null' => FALSE,
'description' => 'Kontoinhaber'
),
),
'primary key' => array(
'id_dein_name'
)
);
return $schema;
} // END dein_name_schema
An der Art und Weise wie das +.install-File erzeugt wird hat sich von Drupaö5 zu Drupal6 einiges geändert. Das ist aber ganz gut in der API beschrieben.
Ich hoffe ich konnte dir einen Hinweis geben.
Gruß
UwBach
RE: Wo sollen die Daten genau ..
am 29.10.2008 - 13:17 Uhr
hallo,
erstmal Danke das jemand geantwortet hat!
ich wollte mir erstmal die Erstellung einer *.install sparen und habe es in der DB mit phpMyAdmin eingetragen (ebenso wie die ersten 2 Datensatze um mit der Ausgabe ueben zu koennen).
In anderen Plugins sind diese *.install ja einfach zu finden -und als Beispiele leicht zu verwenden.
mfg
Dann kannst du ..
am 29.10.2008 - 13:45 Uhr
.. direkt im Hook_form_submit auf die Datenbank zugreifen - z. B.
/**
* Registrierungsformular für Stipendien
*/
function deinModul_form_submit($form, $form_values)
{
if($form_values['values']['irgendwas'] == 2)
{
// speichern der Daten als Update - Insert ist genauso
db_query('UPDATE {deineTabelle} SET irgendwas = 2 WHERE id_deineTabelle = %d', $tabelle_id);
if(db_error() != '')
drupal_set_message('Ihre Entscheidung wurde gespeichert.');
else
drupal_set_message('Es gab Probleme beim speichern der Daten. ');
}
}
}
Schau dazu nochmal in die API unter db_query() oder auf Arbeiten mit der Datenbank (ist zwar für Drupal 5 - geht aber imer noch).
RE: Dann kannst du ..
am 29.10.2008 - 14:17 Uhr
danke allerSeits!
nur das mit "db_error()" scheint nicht so zu wollen wie im Beispiel, stoert aber gerade nicht gross.
mfg
Stimmt ..
am 29.10.2008 - 14:25 Uhr
.. muss wohl heißen
if(db_error() == '')
drupal_set_message('Ihre Entscheidung wurde gespeichert.');
else
drupal_set_message('Es gab Probleme beim speichern der Daten. ');
Hätte ich evtl. vorher testen sollen :-)
Gruß
UwBach
haette selber mal genauer
am 29.10.2008 - 14:36 Uhr
haette selber mal genauer hinschauen muessen,
dachte aber eher an einen fehlerhaften Funktionsaufruf
.. muss wohl heißen
Hätte ich evtl. vorher testen sollen :-)