Hallo,
Bei meiner selbst entwickelten Komponente (mithilfe des Component Creator erstellt) habe ich ein Problem beim abspeichern von Daten in die Datenbank. Wenn im Fontent oder Backend über das Formular ein neues Element hinzugefügt werden will, wird das Datum aus dem Formularfeld mit Namen "event_date" falsch in die Datenbank übernommen. Es weicht immer ein Tag von der Formulareingabe ab. Mit dem angehängten Request (Request wenn Formular abgesendet wird) wird folgendes Element der Datenbank hinzugefügt:
Wie zu sehen ist lautet das Datum im Request 2018-09-01 und in der Datenbank landet 2018-08-31.
Der per request angeforderte Task lautet beim Frontend-Formular meldungform.save und im Backend-Formular meldung.apply.
Das Query wird im Backend mit der JControllerForm-Class erstellt, denn der angesprochene Controller enthält keine eigene apply-Methode .
Der Backend Controller:
// No direct access
defined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
/**
* Meldung controller class.
*
* @since 1.6
*/
class AttlistControllerMeldung extends JControllerForm
{
/**
* Constructor
*
* @throws Exception
*/
public function __construct()
{
$this->view_list = 'meldungen';
parent::__construct();
}
}
Alles anzeigen
Der Frontend Controller hat eine eigene save-Methode:
// No direct access
defined('_JEXEC') or die;
/**
* Meldung controller class.
*
* @since 1.6
*/
class AttlistControllerMeldungForm extends JControllerForm
{
/**
* Method to save a user's profile data.
*
* @return void
*
* @throws Exception
* @since 1.6
*/
public function save($key = NULL, $urlVar = NULL)
{
// Check for request forgeries.
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
// Initialise variables.
$app = JFactory::getApplication();
$model = $this->getModel('MeldungForm', 'AttlistModel');
// Get the user data.
$data = JFactory::getApplication()->input->get('jform', array(), 'array');
// Validate the posted data.
$form = $model->getForm();
if (!$form)
{
throw new Exception($model->getError(), 500);
}
// Validate the posted data.
$data = $model->validate($form, $data);
// Check for errors.
if ($data === false)
{
// Get the validation messages.
$errors = $model->getErrors();
// Push up to three validation messages out to the user.
for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++)
{
if ($errors[$i] instanceof Exception)
{
$app->enqueueMessage($errors[$i]->getMessage(), 'warning');
}
else
{
$app->enqueueMessage($errors[$i], 'warning');
}
}
$input = $app->input;
$jform = $input->get('jform', array(), 'ARRAY');
// Save the data in the session.
$app->setUserState('com_attlist.edit.meldung.data', $jform);
// Redirect back to the edit screen.
$id = (int) $app->getUserState('com_attlist.edit.meldung.id');
$this->setRedirect(JRoute::_('index.php?option=com_attlist&view=meldungform&layout=edit&id=' . $id, false));
$this->redirect();
}
// Attempt to save the data.
$return = $model->save($data);
// Check for errors.
if ($return === false)
{
// Save the data in the session.
$app->setUserState('com_attlist.edit.meldung.data', $data);
// Redirect back to the edit screen.
$id = (int) $app->getUserState('com_attlist.edit.meldung.id');
$this->setMessage(JText::sprintf('Save failed', $model->getError()), 'warning');
$this->setRedirect(JRoute::_('index.php?option=com_attlist&view=meldungform&layout=edit&id=' . $id, false));
}
// Check in the profile.
if ($return)
{
$model->checkin($return);
}
// Clear the profile id from the session.
$app->setUserState('com_attlist.edit.meldung.id', null);
// Redirect to the list screen.
//$this->setMessage(JText::_('COM_ATTLIST_ITEM_SAVED_SUCCESSFULLY'));
$this->setMessage(print_r($data));
$menu = JFactory::getApplication()->getMenu();
$item = $menu->getActive();
$url = (empty($item->link) ? 'index.php?option=com_attlist&view=meldungen' : $item->link);
$this->setRedirect(JRoute::_($url, false));
// Flush the data from the session.
$app->setUserState('com_attlist.edit.meldung.data', null);
}
Alles anzeigen
Woran könnte das liegen, dass das Datum immer um einen Tag abweicht?
Hat das mit der Server-Zeit zu tun? Wenn ja, wie kann man das beheben, dass das Datum stimmt?
Danke im voraus den helfenden...
Gruss