Formular mit DB-Abfragen,Prüfungen und Speichern erstellen
am 30.03.2011 - 10:41 Uhr in
Hallo zusammen,
nachdem ich die einfachen Sachen aus unserem Intranet mit Drupal nachgebildet habe, sind jetzt die komplizierteren Sachen dran.
So benutzen wir hier eine Toureplanung, welche ich per PHP von Hand programmiert habe. Ich möchte mal kurz den bisherigen Ablauf schildern.
Im ersten Schritt muß der Mitarbeiter ein Lieferdatum und eine PLZ auswählen. Die PLZ wird über ein Dropdown-Feld gewählt, welches durch eine DB-Abfrage gefüllt wird. Dann wird der Button "Prüfen" gedrückt und auf einer neuen PHP-Seite erscheinen alle bereits vorhandenen Termine für den entsprechenden LKW.
Über diese Auflistung gibt es dann ein Formular, in welchem (durch Schritt 1 festgelegten) die Tourennummer,PLZ und Ort mit Stadtteil voreingestellt sind.
Hier gilt es jetzt weitere Eingaben zu machen wie Uhrzeit (Dropwdown wieder aus DB gefüllt),Terminart (Fix-Termin, Bis-Termin), Kundenname, Strasse und Bemerkung. Nach dem Speichern wird dann nochmal geprüft, ob der Uhrzeittermin bereits vergeben ist und wenn ja kommt eine Meldung im Formular das eben der Termin nicht mehr eingetragen werden kann. Erst wenn eine Uhrzeit gewählt wird die frei ist, kann der Liefertermin gespeichert werden.
Jetzt weiß ich nciht so recht wie ich dieses komplexe Thema mit Drupal angehen kann und wollte mal um Rat fragen.
Danke
Ati
- Anmelden oder Registrieren um Kommentare zu schreiben

Also prinzipiell ist es kein
am 30.03.2011 - 11:59 Uhr
Also prinzipiell ist es kein Problem, Formular-Felder mit DB-Werten zu füllen. Einfach DB-Werte abfragen, daraus ein Array erstellen und dieses entsprechend für die Options der Felder verwenden.
Und für die verschiedenen Seiten kannst du dich mal in das Thema Multistep-Formulare einlesen. Damit kannst du ein Formular in Seiten aufteilen und z. B. Anhand der Werte von Seite 1 die DB-Werte für Seite 2 abfragen usw.
http://www.ferolen.com/blog/how-to-create-multistep-form-in-drupal-6-tut...
http://civicactions.com/blog/2009/may/29/multi_step_node_forms_drupal_6
http://www.appnovation.com/create-multiple-step-form-drupal-6
Danke für den Tip
am 31.03.2011 - 09:03 Uhr
Ich habe mir mal einiges dazu durchgelesen, wobei ich bei jedem Tutorial so ein paar Verständnisprobleme hate.
Also habe ich mal versucht ein Multistep-Formular zu entwickeln so wie ich es verstanden habe. Der Code sieht bisher wie folgt aus:
<?php
drupal_add_js(drupal_get_path('module', 'tourenplanung') .'/tourenplanung.js');
jquery_ui_add('ui.datepicker');
function tourenplanung_menu() {
$items = array();
$items['tourenplanung/form'] = array(
'title' => t('Tourenplanung'),
'page callback' => 'drupal_get_form',
'page arguments' => array('tourenplanung_multiform'),
'access arguments' => array('access content'),
'description' => t('Tourenplanung'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function tourenplanung_multiform($form_state) {
// Ist $form_state['storage']['page_two'] gesetzt entsprechende Funktion aufrufen
if (isset($form_state['storage']['page_two'])) {
return tourenplanung_multiform_page_two();
}
// Füllen des Dropdownfeldes
$result = db_query('select * from tbl_plz ORDER BY plz');
$tourenges = array();
while ($row = db_fetch_object($result)) {
$touren[$row->id] = $row->plz.' '.$row->ort;
}
// Seite 1 wird gezeigt wenn $form_state['storage']['page_two'] nicht gesetzt ist
$form['tourenplan'] = array(
'#type' => 'fieldset',
'#title' => t('Name'),
);
$form['tourenplan']['termin'] = array(
'#type' => 'textfield',
'#size' => 15,
'#title' => t('Liefertermin'),
'#description' => 'Bitte Liefertermin angeben!!',
'#required' => FALSE,
);
$form['tourenplan']['tour'] = array(
'#type' => 'select',
'#title' => t('Ort'),
'#options' => $touren,
'#required' => FALSE,
'#description' => t('Bitte Lieferort angeben!!'),
);
$form['next'] = array(
'#type' => 'submit',
'#value' => 'Next >>',
);
return $form;
}
function tourenplanung_multiform_page_two() {
$termin = $form_state['storage']['termin'];
drupal_set_message('<pre>'. var_export($termin, 1) .'</pre>');
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
function tourenplanung_multiform_submit($form, &$form_state) {
// Buttonklick page 1
if ($form_state['clicked_button']['#id'] == 'edit-next') {
$form_state['storage']['page_two'] = TRUE; // Wenn Button gedrückt dann
// $form_state['storage']['page_two']setzen
//Eingabe speichern
$form_state['storage']['termin'] = $form_state['values']['termin'];
}
}
?>
Ich wollte mir dann mal den Inhalt des Termins ausgeben lassen und erhalte als Ergebnis "NULL"?
Was habe ich da falsch verstanden?
Ati
Also ich habe gesucht und
am 04.04.2011 - 09:31 Uhr
Also ich habe gesucht und gesucht...gelesen und gelesen...aber ich verstehe es noch nciht ganz. Egal welchen Beispielcode ich mal verwendet habe, es
wurden irgendwie nie die Eingaben aus der ersten Seite gespeichert. Also habe ich im Rahmen meines beschränkten Wissens eine Hilfe gebaut, wo
ich in einem "hidden"-Feld die Eingaben aus der verhoerigen Seite speicher...das klappt auch ganz gut. Der nächste Step ist jetzt allerdings zwischendurch
eine SQL-Abfrage auszuführen und das Ergebnis daraus in zwei Variablen zu speichern...und hier hänge ich nun. Vielleicht erstmal den aktuellen Testcode:
function tourenplanung_multiform($form_state) {
if (!isset($form_state['storage']['step'])) {
$form_state['storage']['step'] = 1;
}
$result = db_query('Select id,plz,ort from tbl_plz');
while ($row = db_fetch_object($result)) {
$touren[$row->id] = $row->plz.' '.$row->ort;
}
switch ($form_state['storage']['step']) {
case 1:
$form['lterm'] = array(
'#type' => 'textfield',
'#size' => 15,
'#title' => t('Lieferantentermin'),
'#required' => TRUE,
);
$form['tourid']= array(
'#type' => 'select',
'#title' => t('Tour'),
'#options' => $touren,
'#required' => TRUE,
'#description' => t('Bitte Tournummer angeben!!'),
);
break;
case 2:
print_r($form_state['values']);
$id = $form_state['values']['tourid'];
$result = db_query('Select plz,ort from tbl_plz where id =%d',$id);
while ($row = db_fetch_object($result)) {
$plz = $row->plz;
}
$form['terminplz'] = array(
'#type' => 'hidden',
'#default_value' => $plz,
);
$form['termindat'] = array(
'#type' => 'hidden',
'#default_value' => $form_state['values']['lterm'],
);
$form['terminort'] = array(
'#type' => 'hidden',
'#default_value' => $form_state['values']['tourid'],
);
$form['terminplz'] = array(
'#type' => 'hidden',
'#default_value' => $form_state['values']['tour']['plz'],
);
$form['bem1'] = array(
'#type' => 'textfield',
'#title' => t('Bemerkung'),
'#required' => FALSE,
);
$form['bem2'] = array(
'#type' => 'textfield',
'#title' => t('Bemerkung'),
'#required' => FALSE,
);
break;
case 3:
print_r($form_state['values']);
break;
Wenn ich mir iim dritten Schritt nun alle Inhalte des arrays anzeigen lasse, ist 'terminplz' leer. Was mache ich falsch?
Ati