Module schreiben

Fragen Rund um den Quelltext.
Florian
Beiträge: 0
Registriert: Mo 15. Mai 2017, 15:05

Re: Module schreiben

Beitragvon Florian » Di 16. Mai 2017, 15:40

Die Mysql-Funktion DATE_FORMAT erwartet das Datums-Attribut immer immer in einer Form wie "YYYY-MM-DD" oder "YYYYMMDD", also erst das Jahr, dann den Montag, dann den Tag.

Das Speichern des Funktioniert vermutlich noch nicht, weil das Datum weiterhin im falschen Format übergeben wird und zudem hier der SQL-Syntax nicht stimmt.

Code: Alles auswählen

$this->app->DB->Update("UPDATE beispielmodul SET DATE_FORMAT(datum, '%Y-%m-%d')='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id' LIMIT 1");
muss heißen

Code: Alles auswählen

$this->app->DB->Update("UPDATE beispielmodul SET datum='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id' LIMIT 1");
Da auch PHP in der Regel am besten mit dem Datumsformat "YYYY-MM-DD" oder Unix-Zeitstempeln zurecht kommt, würde ich die Datumskovertierung/-formatierung in der Klasse komplett in die GetInput- und SetInput-Methoden verlagern und über die PHP-eigene DateTime-Klasse bewerkstelligen.

Code: Alles auswählen

  function GetInput(){
    $input = array();
    $input['datum'] = $this->app->Secure->GetPOST('datum');
    $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung');
 
    return $input;
  }

  function SetInput($input){
    $this->app->Tpl->Set('DATUM', $input['datum']);
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
ersetzten durch

Code: Alles auswählen

  function GetInput(){
    return array(
      'datum' => DateTime::createFromFormat('d.m.Y', $this->app->Secure->GetPOST('datum'))->format('Y-m-d'),
      'beschreibung' => $this->app->Secure->GetPOST('beschreibung'),
    );
  }

  function SetInput($input){
    $this->app->Tpl->Set('DATUM', DateTime::createFromFormat('Y-m-d', $input['datum'])->format('d.m.Y'));
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
In der Edit-Methode dann noch

Code: Alles auswählen

    $datum = $this->app->DB->Select("SELECT DATE_FORMAT(datum, '%d.%m.%Y') FROM beispielmodul WHERE id = '$id'");
    $beschreibung = $this->app->DB->Select("SELECT beschreibung FROM beispielmodul WHERE id = '$id'");
 
    $this->app->Tpl->Set('DATUM', $datum);
    $this->app->Tpl->Set('BESCHREIBUNG', $beschreibung);
durch

Code: Alles auswählen

    $input = $this->app->DB->SelectArr("SELECT datum, beschreibung FROM beispielmodul WHERE id = '$id'");

    $this->SetInput($input);
ersetzen um u.A. eine Datenbankfrage zu reduzieren und die SetInput-Methode aufzurufen und damit das Datumsformat für die Ausgabe im Bearbeitungsformular zu berücksichtigen.

Damit ist die Ein-/Ausgabe sowohl für die Create- und Edit-Methode bewerkstelligt und nebenbei wird das Datum gleichzeitig auf Gültigkeit geprüft. Im Fehlerfall wird FALSE zurückgegeben, wodurch im weiteren Scriptverlauf eine entsprechende Fehlermeldung geworfen wird.

Im Edit-Template kannst Du Dir dann den Hinweis zum Datumsformat schenken oder diesen nach DD.MM.YYYY bzw. TT.MM.JJJJ abändern.

Für die Live-Tabellen gibt es soweit ich das sehe derzeit keine Möglichkeit der Datumskovertierung/-formatierung über keine eigene Methode zu bewerkstelligen, die muss also direkt in der TableSearch-Methode stattfinden, da aber bitte auch für die Spalten in denen gesucht werden können soll berücksichtigen:

Code: Alles auswählen

        $searchsql = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
muss heißen

Code: Alles auswählen

        $searchsql = array('b.id', 'b.adresse', 'DATE_FORMAT(b.datum, \'%d.%m.%Y\')', 'b.beschreibung');
Zudem habe ich die LIMIT's aus dem UPDATE- und DELETE-Datenbankanweisungen entfernt, da diese ja bereits über den primären Schlüssel "id" eindeutig referenziert sein sollten und LIMIT'S in UPDATE- und DELETE-Anweisungen nur selten sinnhaft sind.

Und noch einmal komplett:

Code: Alles auswählen

<?php
//WAWIFILEONLYON VERSION=ALL

class Beispielmodul {
  var $app;

  static function TableSearch(&$app, $name, $erlaubtevars)
  {
    // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul
    switch($name)
    {
      case "beispielmodul_list":
        $allowed['beispielmodul'] = array('list');

        $heading = array('Adresse', 'Datum', 'Beschreibung', 'Menü');
        $width = array('40%', '30%', '20%', '10%');

        $findcols = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
        $searchsql = array('b.id', 'b.adresse', 'DATE_FORMAT(b.datum, \'%d.%m.%Y\')', 'b.beschreibung');

        $defaultorder = 1;
        $defaultorderdesc = 0;

        $jahr = date("Y");

        $menu = "<a href=\"index.php?module=beispielmodul&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"></a>";

        $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.adresse, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.beschreibung, b.id FROM beispielmodul b";

//        $where = " YEAR(b.datum) < '$jahr'";

//        $groupby = "GROUP BY b.datum";


//        $count = "SELECT count(DISTINCT b.id) FROM beispielmodul b WHERE $where";
        break;
    }

    $erg = false;

    foreach($erlaubtevars as $k => $v)
    {
      if(isset($$v))$erg[$v] = $$v;
    }
    return $erg;
  }

  function __construct($app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return;
    $this->app->ActionHandlerInit($this);
    //Ab hier alle ActionHandler definieren die das Modul hat
    $this->app->ActionHandler("list", "BeispielmodulList");
    $this->app->ActionHandler("create", "BeispielmodulCreate");
    $this->app->ActionHandler("edit", "BeispielmodulEdit");
    $this->app->ActionHandler("delete", "BeispielmodulDelete");
    $this->app->ActionHandlerListen($app);
    $this->Install();
  }

  function Install()
  {
    $this->app->erp->CheckTable("beispielmodul");
    $this->app->erp->CheckColumn("id", "int(11)", "beispielmodul", "NOT NULL AUTO_INCREMENT");
    $this->app->erp->CheckColumn("adresse", "int(11)", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("datum", "DATE", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("beschreibung", "VARCHAR(255)", "beispielmodul", "NOT NULL");
  }

  function BeispielmodulList()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=create","Neuer Eintrag");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","&Uuml;bersicht");

    $this->app->YUI->TableSearch('TAB1','beispielmodul_list', "show","","",basename(__FILE__), __CLASS__);
    $this->app->Tpl->Parse("PAGE","beispielmodul_list.tpl");

  }

  function BeispielmodulEdit()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=edit&id=$id","Details");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $this->app->YUI->DatePicker('datums');

    $id = (int) $this->app->Secure->GetGET('id');
    $speichern = $this->app->Secure->GetPOST('speichern');
    $input = $this->GetInput();

    if(is_numeric($id) && $speichern!=''){

      $error = '';
      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung'] == '') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        if($error == ""){
          $this->app->DB->Update("UPDATE beispielmodul SET datum='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id'");

          $this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich &uuml;bernommen.</div>");
        }
      }
    }
    $input = $this->app->DB->SelectArr("SELECT datum, beschreibung FROM beispielmodul WHERE id = '$id'");

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");


  }

  function BeispielmodulDelete()
  {
    $ref = $_SERVER['HTTP_REFERER'];
    $id = $this->app->Secure->GetGET("id");
    $this->app->DB->DELETE("DELETE FROM beispielmodul WHERE id = '$id'");

    header("Location: $ref");
    exit;
  }

 function BeispielmodulCreate()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $input = $this->GetInput();
    $speichern = $this->app->Secure->GetPOST("speichern");

    $this->app->YUI->DatePicker('datums');

    if($speichern != ""){

      $error = '';

      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung']=='') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        $this->app->DB->Insert("INSERT INTO beispielmodul (datum, beschreibung) VALUES ('{$input['datum']}', '{$input['beschreibung']}')");
        $newid = $this->app->DB->GetInsertID();
        $msg = $this->app->erp->base64_url_encode("<div class=\"success\">Der Eintrag wurde erfolgreich angelegt.</div>");
        header("Location: index.php?module=beispielmodul&action=edit&id=$newid&msg=$msg");
        exit;
      }
    }

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");
  }

  function GetInput(){
    return array(
      'datum' => DateTime::createFromFormat('d.m.Y', $this->app->Secure->GetPOST('datum'))->format('Y-m-d'),
      'beschreibung' => $this->app->Secure->GetPOST('beschreibung'),
    );
  }

  function SetInput($input){
    $this->app->Tpl->Set('DATUM', DateTime::createFromFormat('Y-m-d', $input['datum'])->format('d.m.Y'));
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
}
?>
Hinweis: Nicht getestet, nur auf Syntax-Fehler geprüft!

Und noch als Anregung nach Augsburg:
- Eine Möglichkeit Datumsformate für Ein-/Ausgabe zentral Konfigurieren.
- Methode/Callback zur Formatierung/Manipulation der Daten einer Live-Tabelle

Beste Grüße

Florian

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Mi 17. Mai 2017, 06:20

Moin Moin ,

danke für die sehr gute Erklärung erst mal.

Ich hab auch schon versucht das in den beiden Funktionen SetInput und GetInput zu ändern nur leider hat das nicht Funktioniert
und jetzt hab ich die Änderungen angenommen die du beschrieben hast und bekomme nach dem Klick auf edit diese tolle Meldung (Anhang)

Nachdem ich am ende der Funktion GetInput die >,< (Komma) durch >;< (Semikolon) geändert habe bekomme ich nur noch eine weiße Seite angezeigt.

Grüße
Dateianhänge
Auswahl_004.png
Auswahl_004.png (28.68 KiB) 559 mal betrachtet

Florian
Beiträge: 0
Registriert: Mo 15. Mai 2017, 15:05

Re: Module schreiben

Beitragvon Florian » Mi 17. Mai 2017, 08:30

Hallo,

das Komma ist an der Stelle schon korrekt. Der Fehler liegt wo anderes. Versuch es mal so:

Code: Alles auswählen

<?php
//WAWIFILEONLYON VERSION=ALL

class Beispielmodul {
  var $app;

  static function TableSearch(&$app, $name, $erlaubtevars)
  {
    // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul
    switch($name)
    {
      case "beispielmodul_list":
        $allowed['beispielmodul'] = array('list');

        $heading = array('Adresse', 'Datum', 'Beschreibung', 'Menü');
        $width = array('40%', '30%', '20%', '10%');

        $findcols = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
        $searchsql = array('b.id', 'b.adresse', 'DATE_FORMAT(b.datum, \'%d.%m.%Y\')', 'b.beschreibung');

        $defaultorder = 1;
        $defaultorderdesc = 0;

        $jahr = date("Y");

        $menu = "<a href=\"index.php?module=beispielmodul&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"></a>";

        $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.adresse, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.beschreibung, b.id FROM beispielmodul b";

//        $where = " YEAR(b.datum) < '$jahr'";

//        $groupby = "GROUP BY b.datum";


//        $count = "SELECT count(DISTINCT b.id) FROM beispielmodul b WHERE $where";
        break;
    }

    $erg = false;

    foreach($erlaubtevars as $k => $v)
    {
      if(isset($$v))$erg[$v] = $$v;
    }
    return $erg;
  }

  function __construct($app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return;
    $this->app->ActionHandlerInit($this);
    //Ab hier alle ActionHandler definieren die das Modul hat
    $this->app->ActionHandler("list", "BeispielmodulList");
    $this->app->ActionHandler("create", "BeispielmodulCreate");
    $this->app->ActionHandler("edit", "BeispielmodulEdit");
    $this->app->ActionHandler("delete", "BeispielmodulDelete");
    $this->app->ActionHandlerListen($app);
    $this->Install();
  }

  function Install()
  {
    $this->app->erp->CheckTable("beispielmodul");
    $this->app->erp->CheckColumn("id", "int(11)", "beispielmodul", "NOT NULL AUTO_INCREMENT");
    $this->app->erp->CheckColumn("adresse", "int(11)", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("datum", "DATE", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("beschreibung", "VARCHAR(255)", "beispielmodul", "NOT NULL");
  }

  function BeispielmodulList()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=create","Neuer Eintrag");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","&Uuml;bersicht");

    $this->app->YUI->TableSearch('TAB1','beispielmodul_list', "show","","",basename(__FILE__), __CLASS__);
    $this->app->Tpl->Parse("PAGE","beispielmodul_list.tpl");

  }

  function BeispielmodulEdit()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=edit&id=$id","Details");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $this->app->YUI->DatePicker('datums');

    $id = (int) $this->app->Secure->GetGET('id');
    $speichern = $this->app->Secure->GetPOST('speichern');
    $input = $this->GetInput();

    if(is_numeric($id) && $speichern!=''){

      $error = '';
      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung'] == '') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        if($error == ""){
          $this->app->DB->Update("UPDATE beispielmodul SET datum='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id'");

          $this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich &uuml;bernommen.</div>");
        }
      }
    }
    $input = $this->app->DB->SelectArr("SELECT datum, beschreibung FROM beispielmodul WHERE id = '$id'");

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");


  }

  function BeispielmodulDelete()
  {
    $ref = $_SERVER['HTTP_REFERER'];
    $id = $this->app->Secure->GetGET("id");
    $this->app->DB->DELETE("DELETE FROM beispielmodul WHERE id = '$id'");

    header("Location: $ref");
    exit;
  }

 function BeispielmodulCreate()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $input = $this->GetInput();
    $speichern = $this->app->Secure->GetPOST("speichern");

    $this->app->YUI->DatePicker('datums');

    if($speichern != ""){

      $error = '';

      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung']=='') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        $this->app->DB->Insert("INSERT INTO beispielmodul (datum, beschreibung) VALUES ('{$input['datum']}', '{$input['beschreibung']}')");
        $newid = $this->app->DB->GetInsertID();
        $msg = $this->app->erp->base64_url_encode("<div class=\"success\">Der Eintrag wurde erfolgreich angelegt.</div>");
        header("Location: index.php?module=beispielmodul&action=edit&id=$newid&msg=$msg");
        exit;
      }
    }

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");
  }

  function GetInput(){
    $date = DateTime::createFromFormat('d.m.Y', $this->app->Secure->GetPOST('datum'));
    return array(
      'datum' => $date->format('Y-m-d'),
      'beschreibung' => $this->app->Secure->GetPOST('beschreibung'),
    );
  }

  function SetInput($input){
    $date = DateTime::createFromFormat('Y-m-d', $input['datum']);
    $this->app->Tpl->Set('DATUM', $date->format('d.m.Y'));
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
}
?>

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Mi 17. Mai 2017, 08:36

Hi,

Nö bekomme dann immer noch:

Fatal error: Uncaught Error: Call to a member function format() on boolean in /var/www/html/www/pages/beispielmodul.php:162 Stack trace: #0 /var/www/html/www/pages/beispielmodul.php(90): Beispielmodul->GetInput() #1 /var/www/html/phpwf/class.application.php(161): Beispielmodul->BeispielmodulEdit() #2 /var/www/html/www/pages/beispielmodul.php(58): Application->ActionHandlerListen(Object(erpooSystem)) #3 /var/www/html/phpwf/class.player.php(103): Beispielmodul->__construct(Object(erpooSystem)) #4 /var/www/html/www/index.php(50): Player->Run(Object(Session)) #5 {main} thrown in /var/www/html/www/pages/beispielmodul.php on line 162

beim aufrufen vom edit

Florian
Beiträge: 0
Registriert: Mo 15. Mai 2017, 15:05

Re: Module schreiben

Beitragvon Florian » Mi 17. Mai 2017, 09:17

Bei Aufruf der Edit-Methode vor der nach dem Speichern?

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Mi 17. Mai 2017, 09:31

weder noch.
Ich rufe das modul auf und bekomme list angezeigt also die einträge die in der datenbank sind und wenn ich dann auf edit (den kleinen stift am ende der zeile) klicke kommt der Fehler. Ebenso wenn ich aud neu versuche zu klicken.

Florian
Beiträge: 0
Registriert: Mo 15. Mai 2017, 15:05

Re: Module schreiben

Beitragvon Florian » Mi 17. Mai 2017, 09:36

Kann gerade nicht testen, daher meine Frage. Fehler kommt also vorher. Versuch mal so. Jetzt wird "$this->GetInput();" nur aufgerufen wenn auch gespeichert wurde und die Datumsformat-Methode nur aufgerufend, sofern das verarbeitete Datum auch dem erwarteten Datumsformat entspricht, also "DateTime::createFromFormat" nicht FALSE zurück gibt. Dann ist mir auch das aufgefallen:

Code: Alles auswählen

$this->app->YUI->DatePicker('datums');
muss vermutlich

Code: Alles auswählen

$this->app->YUI->DatePicker('datum');
heißen. Ob der Aufruf an der Stelle richtig ist, kann ich erst heute Nachmittag/Abend sagen, dann kann ich das Modul auch wieder selber in WaWision testen.

Noch einmal komplett:

Code: Alles auswählen

<?php
//WAWIFILEONLYON VERSION=ALL

class Beispielmodul {
  var $app;

  static function TableSearch(&$app, $name, $erlaubtevars)
  {
    // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul
    switch($name)
    {
      case "beispielmodul_list":
        $allowed['beispielmodul'] = array('list');

        $heading = array('Adresse', 'Datum', 'Beschreibung', 'Menü');
        $width = array('40%', '30%', '20%', '10%');

        $findcols = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
        $searchsql = array('b.id', 'b.adresse', 'DATE_FORMAT(b.datum, \'%d.%m.%Y\')', 'b.beschreibung');

        $defaultorder = 1;
        $defaultorderdesc = 0;

        $jahr = date("Y");

        $menu = "<a href=\"index.php?module=beispielmodul&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"></a>";

        $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.adresse, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.beschreibung, b.id FROM beispielmodul b";

//        $where = " YEAR(b.datum) < '$jahr'";

//        $groupby = "GROUP BY b.datum";


//        $count = "SELECT count(DISTINCT b.id) FROM beispielmodul b WHERE $where";
        break;
    }

    $erg = false;

    foreach($erlaubtevars as $k => $v)
    {
      if(isset($$v))$erg[$v] = $$v;
    }
    return $erg;
  }

  function __construct($app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return;
    $this->app->ActionHandlerInit($this);
    //Ab hier alle ActionHandler definieren die das Modul hat
    $this->app->ActionHandler("list", "BeispielmodulList");
    $this->app->ActionHandler("create", "BeispielmodulCreate");
    $this->app->ActionHandler("edit", "BeispielmodulEdit");
    $this->app->ActionHandler("delete", "BeispielmodulDelete");
    $this->app->ActionHandlerListen($app);
    $this->Install();
  }

  function Install()
  {
    $this->app->erp->CheckTable("beispielmodul");
    $this->app->erp->CheckColumn("id", "int(11)", "beispielmodul", "NOT NULL AUTO_INCREMENT");
    $this->app->erp->CheckColumn("adresse", "int(11)", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("datum", "DATE", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("beschreibung", "VARCHAR(255)", "beispielmodul", "NOT NULL");
  }

  function BeispielmodulList()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=create","Neuer Eintrag");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","&Uuml;bersicht");

    $this->app->YUI->TableSearch('TAB1','beispielmodul_list', "show","","",basename(__FILE__), __CLASS__);
    $this->app->Tpl->Parse("PAGE","beispielmodul_list.tpl");

  }

  function BeispielmodulEdit()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=edit&id=$id","Details");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $this->app->YUI->DatePicker('datum');

    $id = (int) $this->app->Secure->GetGET('id');
    $speichern = $this->app->Secure->GetPOST('speichern');

    if(is_numeric($id) && $speichern!=''){

      $input = $this->GetInput();

      $error = '';
      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung'] == '') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        if($error == ""){
          $this->app->DB->Update("UPDATE beispielmodul SET datum='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id'");

          $this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich &uuml;bernommen.</div>");
        }
      }
    }
    $input = $this->app->DB->SelectArr("SELECT datum, beschreibung FROM beispielmodul WHERE id = '$id'");

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");


  }

  function BeispielmodulDelete()
  {
    $ref = $_SERVER['HTTP_REFERER'];
    $id = $this->app->Secure->GetGET("id");
    $this->app->DB->DELETE("DELETE FROM beispielmodul WHERE id = '$id'");

    header("Location: $ref");
    exit;
  }

 function BeispielmodulCreate()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $speichern = $this->app->Secure->GetPOST("speichern");

    $this->app->YUI->DatePicker('datum');

    if($speichern != ""){

      $input = $this->GetInput();

      $error = '';

      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung']=='') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        $this->app->DB->Insert("INSERT INTO beispielmodul (datum, beschreibung) VALUES ('{$input['datum']}', '{$input['beschreibung']}')");
        $newid = $this->app->DB->GetInsertID();
        $msg = $this->app->erp->base64_url_encode("<div class=\"success\">Der Eintrag wurde erfolgreich angelegt.</div>");
        header("Location: index.php?module=beispielmodul&action=edit&id=$newid&msg=$msg");
        exit;
      }
    }

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");
  }

  function GetInput(){
    $date = DateTime::createFromFormat('d.m.Y', $this->app->Secure->GetPOST('datum'));
    return array(
      'datum' => $date!==FALSE ? $date->format('Y-m-d') : '',
      'beschreibung' => $this->app->Secure->GetPOST('beschreibung'),
    );
  }

  function SetInput($input){
    $date = DateTime::createFromFormat('Y-m-d', $input['datum']);
    $this->app->Tpl->Set('DATUM', $date!==FALSE ? $date->format('d.m.Y') : '');
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
}
?>

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Mi 17. Mai 2017, 09:46

Ok jetzt kommt zumindest nicht mehr der Fehler. Ich hab die Id im edit.tpl dann auch auf datum gesetzt.

Er speichert es jetzt richtig in der Datenbank und zeigt alles auch in der list richtig an. Einzige Frage wäre jetzt warum er die einträge die editiert werden sollen beim klick auf edit nicht mehr anzeigt?!? Er ändert zwar genau die daten die editiert werden sollen aber er zeigt keinen der 2 einträge mehr an.

Florian
Beiträge: 0
Registriert: Mo 15. Mai 2017, 15:05

Re: Module schreiben

Beitragvon Florian » Mi 17. Mai 2017, 09:55

So, sollte es gehen:

Code: Alles auswählen

<?php
//WAWIFILEONLYON VERSION=ALL

class Beispielmodul {
  var $app;

  static function TableSearch(&$app, $name, $erlaubtevars)
  {
    // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul
    switch($name)
    {
      case "beispielmodul_list":
        $allowed['beispielmodul'] = array('list');

        $heading = array('Adresse', 'Datum', 'Beschreibung', 'Menü');
        $width = array('40%', '30%', '20%', '10%');

        $findcols = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
        $searchsql = array('b.id', 'b.adresse', 'DATE_FORMAT(b.datum, \'%d.%m.%Y\')', 'b.beschreibung');

        $defaultorder = 1;
        $defaultorderdesc = 0;

        $jahr = date("Y");

        $menu = "<a href=\"index.php?module=beispielmodul&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"></a>";

        $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.adresse, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.beschreibung, b.id FROM beispielmodul b";

//        $where = " YEAR(b.datum) < '$jahr'";

//        $groupby = "GROUP BY b.datum";


//        $count = "SELECT count(DISTINCT b.id) FROM beispielmodul b WHERE $where";
        break;
    }

    $erg = false;

    foreach($erlaubtevars as $k => $v)
    {
      if(isset($$v))$erg[$v] = $$v;
    }
    return $erg;
  }

  function __construct($app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return;
    $this->app->ActionHandlerInit($this);
    //Ab hier alle ActionHandler definieren die das Modul hat
    $this->app->ActionHandler("list", "BeispielmodulList");
    $this->app->ActionHandler("create", "BeispielmodulCreate");
    $this->app->ActionHandler("edit", "BeispielmodulEdit");
    $this->app->ActionHandler("delete", "BeispielmodulDelete");
    $this->app->ActionHandlerListen($app);
    $this->Install();
  }

  function Install()
  {
    $this->app->erp->CheckTable("beispielmodul");
    $this->app->erp->CheckColumn("id", "int(11)", "beispielmodul", "NOT NULL AUTO_INCREMENT");
    $this->app->erp->CheckColumn("adresse", "int(11)", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("datum", "DATE", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("beschreibung", "VARCHAR(255)", "beispielmodul", "NOT NULL");
  }

  function BeispielmodulList()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=create","Neuer Eintrag");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","&Uuml;bersicht");

    $this->app->YUI->TableSearch('TAB1','beispielmodul_list', "show","","",basename(__FILE__), __CLASS__);
    $this->app->Tpl->Parse("PAGE","beispielmodul_list.tpl");

  }

  function BeispielmodulEdit()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=edit&id=$id","Details");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $this->app->YUI->DatePicker('datum');

    $id = (int) $this->app->Secure->GetGET('id');
    $speichern = $this->app->Secure->GetPOST('speichern');

    if(is_numeric($id) && $speichern!=''){

      $input = $this->GetInput();

      $error = '';
      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung'] == '') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        if($error == ""){
          $this->app->DB->Update("UPDATE beispielmodul SET datum='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id'");

          $this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich &uuml;bernommen.</div>");
        }
      }
    }
    
    $input = $this->app->DB->SelectArr("SELECT datum, beschreibung FROM beispielmodul WHERE id = '$id'");
    $input = current($input);

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");


  }

  function BeispielmodulDelete()
  {
    $ref = $_SERVER['HTTP_REFERER'];
    $id = $this->app->Secure->GetGET("id");
    $this->app->DB->DELETE("DELETE FROM beispielmodul WHERE id = '$id'");

    header("Location: $ref");
    exit;
  }

 function BeispielmodulCreate()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $speichern = $this->app->Secure->GetPOST("speichern");

    $this->app->YUI->DatePicker('datum');

    if($speichern != ""){

      $input = $this->GetInput();

      $error = '';

      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung']=='') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';

      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        $this->app->DB->Insert("INSERT INTO beispielmodul (datum, beschreibung) VALUES ('{$input['datum']}', '{$input['beschreibung']}')");
        $newid = $this->app->DB->GetInsertID();
        $msg = $this->app->erp->base64_url_encode("<div class=\"success\">Der Eintrag wurde erfolgreich angelegt.</div>");
        header("Location: index.php?module=beispielmodul&action=edit&id=$newid&msg=$msg");
        exit;
      }
    }

    $this->SetInput($input);

    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");
  }

  function GetInput(){
    $date = DateTime::createFromFormat('d.m.Y', $this->app->Secure->GetPOST('datum'));
    return array(
      'datum' => $date!==FALSE ? $date->format('Y-m-d') : '',
      'beschreibung' => $this->app->Secure->GetPOST('beschreibung'),
    );
  }

  function SetInput($input){
    $date = DateTime::createFromFormat('Y-m-d', $input['datum']);
    $this->app->Tpl->Set('DATUM', $date!==FALSE ? $date->format('d.m.Y') : '');
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
}
?>

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Mi 17. Mai 2017, 09:58

Ja cool danke :D
Jetzt geht es.
Was hast du jetzt geändert damit das geht?
Ich glaub ich habs gefunden. und zwar die zeile 111 -> $input = current($input);