ilch Forum » Ilch CMS 2.X » Module und Modifikationen » Eigenes Modul oder eher nicht???

Geschlossen
  1. #31
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Habe schon wieder ein Problem.

    Wenn ich im Adminbereich meinen Termin ändern möchte bekomme ich folgenden Fehler

    Fatal error: Uncaught Error: Cannot use object of type Modules\mod1\Models\Termine as array in C:\xampp\htdocs\.....


    Was da los...?

    0 Mitglieder finden den Beitrag gut.
  2. #32
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Steht doch in der Fehlermeldung.

    ZitatZitat
    Cannot use object of type Modules\mod1\Models\Termine as array

    Du versuchst ein Objekt vom Typ Termine so zu benutzen als wäre es ein Array.

    Schaue dir mal die Stelle im Code an, die du in der Fehlermeldung abgeschnitten hast.
    Ohne die entsprechende Stelle im Code kann ich da auch nur vermuten.


    Zuletzt modifiziert von blackcoder am 25.10.2019 - 19:14:39
    0 Mitglieder finden den Beitrag gut.
  3. #33
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Hab es hinbekommen;)

    Aber sag mal....kann ich eigentlich mehrere Views haben und darauf verweisen?

    Habe bei mir eine Tabelle in der alle Termine aus der Datenbank angezeigt werden.
    Nun möchte ich bei Auswahl eines einzelnen Termin eine separate Ansicht hierfür.

    Die Einzelansicht habe ich allerdings in der selben Tabelle...

    Mfg

    0 Mitglieder finden den Beitrag gut.
  4. #34
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    0 Mitglieder finden den Beitrag gut.
  5. #35
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    @ Blackcoder bitte um Hilfe...blicke nicht durch...


    1. Lese alle Datensätze aus der DB aus und zeige diese mittels foreach in einer Tabelle. Jeder Datensatz bekommt zusätzlich einen Link/Button angehängt.
    Bei mir Anzeigen, bearbeiten oder löschen jeweils mit der Id des Datensatzes und alles im Frontend.

    2. Nun möchte ich gerne wenn ich auf Anzeigen klicke den Datensatz als Einzelansicht angezeigt bekommen.
    Über $_GET bekomme ich dann anzeigen=1 .... also ganz simpel....lerne ja noch zwinker


    Im Frontend IndexController habe ich nun folgende Action hinzugefügt.


    
    
    public function anzeigenAction()
        {
            
    		if(isset( $_GET['anzeigen']) && $_GET['anzeigen'] != ''){
    			$TerminId = $_GET['anzeigen'];
    			
    			$EinTermin = new TerminMapper();
    			
            $this->getView()
                ->set('EinTermin', $EinTermin->getTerminById($TerminId) , ['action' => 'anzeigen']);
    		
            }
    		
    	
    	}


    Im Frontend-View-Ordner habe ich einfach Mal Testweise eine anzeigen.php angelegt.
    Inhalt ist einfach nur ein echo-Befehl.

    Wie bekomme ich es hin, dass bei Klick auf den Button "anzeigen" die VIEW anzeigen.php angezeigt wird...

    Sorry, ich weis nicht wie ich es besser erklären kann....hoffe du verstehst trotzdem was ich meine...

    danke

    0 Mitglieder finden den Beitrag gut.
  6. #36
    User Pic
    hhunderter Entwickler
    Registriert seit
    12.08.2018
    Beiträge
    501
    Beitragswertungen
    87 Beitragspunkte
    Normalerweise so wie du das beschrieben hast sollte es funktionieren, aber...

    in der "index"-action mit zb:
    <a href="<?=$this->getUrl(['action' => 'anzeige', 'anzeige' => $entrie->getId()]) ?>"><?=$this->getTrans('show') ?></a>

    gelingt der Sprung in die "anzeige"-action.
    Dort dann die id abfangen mit:
    public function anzeigenAction()
    {
        $terminMapper= new TerminMapper();
    
        if($this->getRequest()->getParam('anzeigen')) {
            $TerminId = $this->getRequest()->getParam('anzeigen');
    
            $EinTermin = $terminMapper->getTerminById($TerminId);
    
            $this->getView()->set('EinTermin', $EinTermin);
        } else {
            $this->redirect(['action' => 'index']);
        }
    }

    Dann sollte deine Seite das echo ausgeben.
    0 Mitglieder finden den Beitrag gut.
  7. #37
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Werde ich mal testen....dann lag ich ja vielleicht doch nicht so falsch.
    Glaube ich denke einfach zu kompliziert...
    Danke dir ...schönen Abend

    0 Mitglieder finden den Beitrag gut.
  8. #38
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Super...läuft wie gewünscht..

    Jetzt blicke ich glaub ich bei getView() auch durch.

    Erste Key->value ruft die Action auf
    Zweite Key->value übergibt parameter...

    Richtig..?

    0 Mitglieder finden den Beitrag gut.
  9. #39
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Hm nein. Bin mir aber auch nicht sicher ob ich dich richtig verstanden habe.

    Du hast einen oder mehrere Controller. In diesen Controllern hast du Actions.
    Zu den Actions gibt es oft eine entsprechende View.

    Im Controller kannst du mit
    $this->getView()->set('EinTermin', $EinTermin);

    ein Objekt an die View "übergeben". Das Objekt heißt in diesem Fall "EinTermin" und hat den Wert $EinTermin.

    In der View kannst du dann auf das übergebene Objekt zugreifen mit
    $this->get('EinTermin')

    Wenn das Objekt z.B. ein Model mit entsprechenden Funktionen (Getter/Setter) ist, dann kannst du diese Funktionen so aufrufen [1]:
    $this->get('EinTermin')->getDatum()
    $this->get('EinTermin')->getTitle()
    ...

    Wäre das Objekt ein Array dann z.B. so:
    $this->get('EinTermin')['datum']
    ...


    getView(), get(), set(), ... sind Funktionen. Eine Funktion kann eventuell Werte annehmen. Diese nennt man Parameter. Eine Funktion kann auch einen Rückgabewert haben.
    Siehe hier:
    www.php-einfach.de/php-tutorial/php-eigene-funktionen/

    [1] www.php-einfach.de/experte/objektorientierte-programmierung-oop/php-design-patterns/get-und-set-methoden/
    1 Mitglieder finden den Beitrag gut.
  10. #40
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Hi...wird immer besser mit meinem Verständnis ...hehe..hoffe ich zumindest.

    Jetzt habe ich aber mal ne andere Frage:

    Und zwar habe ich ein Formular mit Select-Auswahl

    <select name="lieferung" id="lieferung" class="form-control selectpicker" >
          <option value"bv">Zum Bauvorhaben</option>
    	  <option value"platz">Zum Platz</option>
    	  <option value"abholung">Abholung</option>
    	  <option value"abruf">Abruf</option>
          
        </select>


    Wie bekomme ich es hin, das meine Auswahl in der Datenbank gespeichert wird ???


    Hier der Mapper
    public function save(TerminModel $Termin)
        {
            $fields = [
                'matchcode' => $Termin->getMatchcode(),
                'vorgang' => $Termin->getVorgang(),
    			'name' => $Termin->getName(),
    			'adresse' => $Termin->getAdresse(),
    			'hausnummer' => $Termin->getHausnummer(),
    			'plz' => $Termin->getPlz(),
    			'ort' => $Termin->getOrt(),
    			'lieferung' => $Termin->getLieferung(),
    			'lieferdatum' => $Termin->getLieferdatum(),
    			'uhrzeit' => $Termin->getUhrzeit(),
    			'info' => $Termin->getInfo(),
    			'ersteller' => $Termin->getErsteller()
                
            ];
    
            if ($Termin->getId()) {
                $this->db()->update('mod1')
                    ->values($fields)
                    ->where(['id' => $Termin->getId()])
                    ->execute();
            } else {
                $this->db()->insert('mod1')
                    ->values($fields)
                    ->execute();
            }
        }


    Zeile 11 sollte das doch eigentlich regeln...oder muss ich vorher das $_POST-Array auswerten ???

    Würde auch gerne mal einen Screenshot zeigen, leider funktioniert der Bildupload im UserPanel hier auf ilch.de irgendwie nicht...


    Zuletzt modifiziert von RTX2070 am 30.10.2019 - 21:58:19

    0 Mitglieder finden den Beitrag gut.
  11. #41
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Im passenden Controller musst du natürlich die Werte verarbeiten, eine Instanz von "TerminModel" erstellen und diese übergibst du der save-Funktion in deinem Mapper um sie in der Datenbank abzulegen.

    $_POST musst du nicht direkt auswerten, sondern im Controller in Ilch so:
    $this->getRequest()->getPost('lieferung')


    "mod1" ist kein schöner Tabellenname. Üblich in ilch ist sowas "articles_templates", "forum_posts", ... wobei "articles" und "forum" der key des Moduls ist.


    Zuletzt modifiziert von blackcoder am 31.10.2019 - 09:48:55
    0 Mitglieder finden den Beitrag gut.
  12. #42
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Hoh...ich hoffe ich sprenge das Forum nicht mit meinen ganzen (blöden) Fragen.

    Habe es auch hinbekommen.... hatte nur einen Schreibfehler lieferung ist nicht gleich lieferug....

    Mit dem Tabellennamen gebe ich dir natürlich recht....ich spiele mehr oder weniger ja auch nur rum und probiere aus....

    Danke

    0 Mitglieder finden den Beitrag gut.
  13. #43
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Nein, die Fragen sind kein Problem. lächeln

    Bin am überlegen ob man einige der beantworteten Fragen irgendwie in der Dokumentation unterbringt.
    0 Mitglieder finden den Beitrag gut.
  14. #44
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Das ist eine gute Idee.... zwinker

    Hätte da auch noch eine weitere Frage *hehe*


    Wenn ich bei mir auf meinen Button löschen klicke, wird mein DB-Eintrag unwiderruflich gelöscht....

    Also es wird direkt

    public function deleteAction()
        {
    		
    		
    		if ($this->getRequest()->getParam('deleteId')) {
                $TerminMapper = new TerminMapper();
    			
                $TerminMapper->delete($this->getRequest()->getParam('deleteId'));
    
                $this->addMessage('deleteSuccess');
            }
    
            $this->redirect(['action' => 'index']);
        }



    sowie Mapper

    public function delete($id)
        {
            $this->db()->delete('mod1')
                ->where(['id' => $id])
                ->execute();
        }


    verarbeitet....

    Hätte gerne vor dem endgültigem löschen ein
    echo "Soll der Eintrag endgültig gelöscht werden ?" mit 2 Buttons (Ja/Nein)

    Wo und wie baue ich sowas am besten ein ??

    0 Mitglieder finden den Beitrag gut.
  15. #45
    User Pic
    hhunderter Entwickler
    Registriert seit
    12.08.2018
    Beiträge
    501
    Beitragswertungen
    87 Beitragspunkte
    Da Fallen mir gerade 2 Lösungen ein:
    1. über eine weitere action-Seite
    2. Mit Javascript den Befehle abfangen
    0 Mitglieder finden den Beitrag gut.
  16. #46
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    Ich würde einfach ein Modal aufgehen lassen, wo dort steht möchten Sie diesen Beitrag wirklich löschen ? Und dann dort das submite auslösen lassen, so mache ich es bei vielen dingen.
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
  17. #47
    User Pic
    Slipi Hall Of Fame
    Registriert seit
    19.01.2018
    Beiträge
    954
    Beitragswertungen
    120 Beitragspunkte
    ZitatZitat geschrieben von Nex4T
    Ich würde einfach ein Modal aufgehen lassen, wo dort steht möchten Sie diesen Beitrag wirklich löschen ? Und dann dort das submite auslösen lassen, so mache ich es bei vielen dingen.


    Mach ich auch so. Einen Button der die Modal (bootstrap bietet fertige an) steuert, und darin die eigentliche lösch funktion.
    0 Mitglieder finden den Beitrag gut.
  18. #48
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Hi Leute,

    wenn ich einen Datensatz ändern möchte bekomme ich beim saven folgende Fehlermeldung.

    An unexpected error occurred:
    No valid secure token given, add function getTokenField() to formular. If you previously visited this website over HTTPS, try again accessing this site over HTTPS or clear cookies and restart your browser.


    Übergebe den Datensatz eine meine View, welche ein Formular enthält. Hier setze ich die Werte in die Value ein.
    Das geht auch alles....außer beim speichern bekomme ich dann diesen Fehler...
    Könnt ihr wieder helfen ??

    0 Mitglieder finden den Beitrag gut.
  19. #49
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Hast du denn diese Zeile untergebracht:

    github.com/IlchCMS/Ilch-2.0/blob/v2.1.26/application/modules/article/views/admin/index/treat.php#L10

    // Edit:
    Link korrigiert


    Zuletzt modifiziert von blackcoder am 02.11.2019 - 21:09:06
    0 Mitglieder finden den Beitrag gut.
  20. #50
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    welche meinst denn ?

    0 Mitglieder finden den Beitrag gut.
  21. #51
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Zeile 10
    <?=$this->getTokenField(); ?>
    0 Mitglieder finden den Beitrag gut.
  22. #52
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Ja die habe ich genauso...
    Habe auch schon Cookies und Verlauf gelöscht....

    Beim anlegen eines Datensatzes kommt kein Fehler.


    Zuletzt modifiziert von RTX2070 am 02.11.2019 - 19:27:10

    0 Mitglieder finden den Beitrag gut.
  23. #53
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Vllt kann man dir besser helfen wenn du den ganzen Code posten würdest
    0 Mitglieder finden den Beitrag gut.
  24. #54
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Ja bestimmt...


    MAPPER

    public function save(TerminModel $Termin)
        {
    			
    		$fields = [
                'matchcode' => $Termin->getMatchcode(),
                'vorgang' => $Termin->getVorgang(),
    			'name' => $Termin->getName(),
    			'adresse' => $Termin->getAdresse(),
    			'hausnummer' => $Termin->getHausnummer(),
    			'plz' => $Termin->getPlz(),
    			'ort' => $Termin->getOrt(),
    			'lieferdatum' => $Termin->getLieferdatum(),
    			'uhrzeit' => $Termin->getUhrzeit(),
    			'telefon' => $Termin->getTelefon(),
    			'info' => $Termin->getInfo(),
                
            ];
    
            if ($Termin->getId()) {
                $this->db()->update('mod1')
                    ->values($fields)
                    ->where(['id' => $Termin->getId()])
                    ->execute();
            } else {
                $this->db()->insert('mod1')
                    ->values($fields)
                    ->execute();
            }
        }




    ACTION

    // bearbeiten Ansicht
    	public function bearbeitenAction()
    	{
        
    	$terminMapper= new TerminMapper();
     
        
    	if($this->getRequest()->getParam('bearbeiten')) {
            
    		
    		$TerminId = $this->getRequest()->getParam('bearbeiten');
     
            
    		$TerminArray = $terminMapper->getTerminById($TerminId);
     
            
    		
    		$this->getView()->set('TerminArray', $TerminArray);
        } else {
            
    		$this->redirect(['action' => 'index']);
    		}
    	}



    VIEW

    <style>
    .bg {
        background-color: #fcf8e3;
       
    }
    </style>
    
    
    <div class="panel panel-primary">
      <div class="panel-heading"><h2>Termin bearbeiten / ändern</h2></div>
      <div class="panel-body">
    
        <form class="well form-horizontal bg" action="" method="POST" >
    	<?php $this->getTokenField();?> 
    
    	<?php
    	
    	$array = $this->get('TerminArray');
    	foreach ($array as $array):
    
    // Debuggen	
    echo "<pre>";	
    var_dump($array);
    echo "</pre>";
    ?>
    	
    	
    <fieldset>
    
    
    <div class="form-group">
      <label class="col-md-4 control-label">Matchcode</label>  
      <div class="col-md-4 inputGroupContainer">
      <div class="input-group">
      <span class="input-group-addon"><i class="glyphicon glyphicon-option-horizontal"></i></span>
      <input  name="matchcode" id="matchcode" pattern="[A-Z][A-Z][0-9]{3}$" class="form-control"  type="text"
      value="<?=$array->getMatchcode()?>">
        </div>
      </div>
    </div>
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label" >Vorgang</label> 
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
      <span class="input-group-addon"><i class="glyphicon glyphicon-option-horizontal"></i></span>
      <input name="vorgang" id="vorgang" placeholder="z.B. 1234" pattern="^[0-9]{4}$" class="form-control"  type="text"
      value="<?= $array->getVorgang() ?>">
        </div>
      </div>
    </div>
    
    
       
    <div class="form-group"> 
      <label class="col-md-4 control-label">Auswahl treffen:</label>
        <div class="col-md-4 selectContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-list"></i></span>
        <select name="lieferung" id="lieferung" class="form-control selectpicker" >
          <option value"bv">Zum Bauvorhaben</option>
    	  <option value"platz">Zum Platz</option>
    	  <option value"abholung">Abholung</option>
    	  <option value"abruf">Abruf</option>
          
        </select>
      </div>
    </div>
    </div>
    
           <div class="form-group">
      <label class="col-md-4 control-label">Name / Firma:</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
      <input name="name" id="name" placeholder="Name / Firma" class="form-control"  type="text"
      value="<?= $array->getName() ?>">
        </div>
      </div>
    </div>
    
    
    
           
    <div class="form-group">
      <label class="col-md-4 control-label">Adresse:</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-list-alt"></i></span>
      <input name="adresse" id="adresse" placeholder="Lieferadresse" class="form-control" type="text"
      value="<?= $array->getAdresse() ?>">
        </div>
      </div>
    </div>
    
    
          
    <div class="form-group">
      <label class="col-md-4 control-label">Hausnummer:</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-home"></i></span>
      <input name="hausnummer" id="hausnummer" placeholder="Hnr."  class="form-control" type="text"
      value="<?= $array->getHausnummer() ?>">
        </div>
      </div>
    </div>
    
    
     
    <div class="form-group">
      <label class="col-md-4 control-label">Postleitzahl</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-home"></i></span>
      <input name="plz" id="plz" placeholder="Plz" pattern="^[0-9]{5}$" class="form-control"  type="text "
      value="<?= $array->getPlz() ?>">
        </div>
      </div>
    </div>
    
    
    <div class="form-group">
      <label class="col-md-4 control-label">Ort</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-home"></i></span>
      <input name="ort" id="ort" placeholder="Ort" class="form-control"  type="text"
      value="<?= $array->getOrt() ?>">
        </div>
      </div>
    </div>
       
    
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label">Lieferdatum</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
      <input name="lieferdatum" id="lieferdatum" placeholder="Lieferdatum" class="form-control"  type="date"
      value="<?= $array->getLieferdatum() ?>">
        </div>
    </div>
    </div>
    
    
    <div class="form-group">
      <label class="col-md-4 control-label">Uhrzeit (optional):</label>  
       <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
      <input name="uhrzeit" id="uhrzeit" placeholder="z.B. bis Mittag, ab 15 Uhr" class="form-control" type="text"
      value="<?= $array->getUhrzeit() ?>">
        </div>
      </div>
    </div>
    
    <div class="form-group">
      <label class="col-md-4 control-label">Telefon:</label>  
       <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-earphone"></i></span>
      <input name="telefon" id="telefon" placeholder="Telefonnummer" class="form-control" type="text"
      value="<?= $array->getTelefon() ?>">
        </div>
      </div>
    </div>
    
    
    
      
    <div class="form-group">
      <label class="col-md-4 control-label">Information</label>
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-align-left"></i></span>
            	<textarea class="form-control" name="info" id="info" placeholder="Information zur Lieferung"
    			value="<?= $array->getInfo() ?>"></textarea>
      </div>
      </div>
    
    </div>
    <h2><?=($this->get('array') != '') ? $this->getSaveBar('edit') : $this->getSaveBar('add') ?></h2>
    </fieldset>
    
    
    
    <?php endforeach ; ?>
    
    </form>
    </div>
    
    
        </div>
    
    <h3><a class="btn btn-primary"  href="<?= $this->getUrl(['action' => 'index']); ?>">Zurück </a></h3>

    0 Mitglieder finden den Beitrag gut.
  25. #55
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Das kann doch nicht so kompliziert sein einen Datensatz zu ändern...

    0 Mitglieder finden den Beitrag gut.
  26. #56
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.414
    Beitragswertungen
    394 Beitragspunkte
    Ich würde oben bei der Form das leere "Action"-Attribut entfernen und getSaveBar() (Zeile 188) nicht innerhalb der Foreach-Schleife packen.
    0 Mitglieder finden den Beitrag gut.
  27. #57
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Also wenn es hieran liegt dann fress ich einen Besen...
    Werde es morgen testen...

    0 Mitglieder finden den Beitrag gut.
  28. #58
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    schade...daran lag es nicht...

    Immernoch..


    An unexpected error occurred:
    No valid secure token given, add function getTokenField() to formular. If you previously visited this website over HTTPS, try again accessing this site over HTTPS or clear cookies and restart your browser.


    Wo könnte das Problem liegen ??? Beim normalen INSERT nutze ich doch auch getTokenField()....und hier sind dann keine Probleme

    Wenn ich die Zeile komplett weg lasse erscheint die selbe Fehlermeldung...also scheint ja Pflicht zu sein..


    Zuletzt modifiziert von RTX2070 am 05.11.2019 - 19:56:03

    0 Mitglieder finden den Beitrag gut.
  29. #59
    User Pic
    RTX2070 Hall Of Fame
    Registriert seit
    14.06.2019
    Beiträge
    284
    Beitragswertungen
    48 Beitragspunkte
    Möchte mein Problem nochmal detailliert schildern....

    Hoffe ihr könnt mir dabei helfen.

    Datensatz ändern

    Meine Index-VIEW listet Termine in einer Tabelle mit jeweils einem Link und angehängter ID
    <td>
    	    <a class="btn btn-primary" href="<?= $this->getUrl(['action' => 'anzeigen', 'id' => $termin->getId()]); ?>">Anzeigen</a>
    		<a class="btn btn-warning"  href="<?= $this->getUrl(['action' => 'bearbeiten', 'id' => $termin->getId()]); ?>">Bearbeiten</a>
    		<?php if ($admin == true){?>
    		<a class="btn btn-danger" href="<?= $this->getUrl(['action' => 'delete', 'id' => $termin->getId()]); ?>">Löschen</a>
    		<?php } ?>
    	  </td>


    Wenn ich nun einen Termin bearbeiten möchte, also Button bearbeiten klicke
    (http://localhost/ilch/index.php/mod1/index/bearbeiten/id/1)

    Es wird meine bearbeitenAction aufgerufen und der Datensatz wird aus der Datenbank geholt und an die VIEW übergeben.

    public function bearbeitenAction()
    	{
        
    	$TerminMapper= new TerminMapper();
     
        
    	if($this->getRequest()->getParam('id')) {
            
    		
    		$id = $this->getRequest()->getParam('id');
     
            
    		$TerminArray = $TerminMapper->getTerminById($id);
     
            
    		
    		$this->getView()->set('TerminArray', $TerminArray);
        } else {
            
    		$this->redirect(['action' => 'index']);
    		}
    	}


    Meine VIEW, ein Formular zeigt den Datensatz dann in den jeweiligen Inputs an.

    <style>
    .bg {
        background-color: #fcf8e3;
       
    }
    </style>
    
    <?php if ($this->get('TerminArray') != ''){ 
    $daten = $this->get('TerminArray');?>
    
    
    
    <?php 
    foreach ($daten as $daten):
    ?>
    
    
    
    
    <div class="panel panel-primary">
      <div class="panel-heading"><h2>Termin bearbeiten/ändern</h2></div>
      <div class="panel-body">
    
        <form class="well form-horizontal bg" action="" method="POST" >
    	<?=$this->getTokenField() ?>
    <fieldset>
    
    
    
    <!-- Verstecktes Feld --> 
      <input  name="id" id="id" class="form-control"  type="hidden" value="<?= $daten->getId();?>">
    <!-- Feld ENDE --> 
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Matchcode</label>  
      <div class="col-md-4 inputGroupContainer">
      <div class="input-group">
      <span class="input-group-addon"><i class="glyphicon glyphicon-option-horizontal"></i></span>
      <input  name="matchcode" id="matchcode" pattern="[A-Z][A-Z][0-9]{3}$" class="form-control"  type="text"
      value="<?= $daten->getMatchcode();?>">
        </div>
      </div>
    </div>
    
    
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift" >Vorgang</label> 
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
      <span class="input-group-addon"><i class="glyphicon glyphicon-option-horizontal"></i></span>
      <input name="vorgang" id="vorgang" pattern="^[0-9]{4}$" class="form-control"  type="text"
      value="<?= $daten->getVorgang(); ?>">
        </div>
      </div>
    </div>
    
    
    
    
       
    <div class="form-group"> 
      <label class="col-md-4 control-label schrift">Auswahl treffen:</label>
        <div class="col-md-4 selectContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-list"></i></span>
        <select name="lieferung" id="lieferung" class="form-control selectpicker" >
          <option value"bv">Zum Bauvorhaben</option>
    	  <option value"platz">Zum Platz</option>
    	  <option value"abholung">Abholung</option>
    	  <option value"abruf">Abruf</option>
          
        </select>
      </div>
    </div>
    </div>
    
    
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Name / Firma:</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
      <input name="name" id="name" class="form-control"  type="text"
      value="<?= $daten->getName(); ?>">
        </div>
      </div>
    </div>
    
    
    
    
           
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Adresse:</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-list-alt"></i></span>
      <input name="adresse" id="adresse" class="form-control" type="text"
      value="<?= $daten->getAdresse(); ?>">
        </div>
      </div>
    </div>
    
    
    
          
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Hausnummer:</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-home"></i></span>
      <input name="hausnummer" id="hausnummer"  class="form-control" type="text"
      value="<?= $daten->getHausnummer(); ?>">
        </div>
      </div>
    </div>
    
    
    
     
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Postleitzahl</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-home"></i></span>
      <input name="plz" id="plz" pattern="^[0-9]{5}$" class="form-control"  type="text "
      value="<?= $daten->getPlz(); ?>">
        </div>
      </div>
    </div>
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Ort</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-home"></i></span>
      <input name="ort" id="ort" class="form-control"  type="text"
      value="<?= $daten->getOrt(); ?>">
        </div>
      </div>
    </div>
       
    
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Lieferdatum</label>  
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
      <input name="lieferdatum" id="lieferdatum" class="form-control"  type="date"
      value="<?= $daten->getLieferdatum(); ?>">
        </div>
    </div>
    </div>
    
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Uhrzeit (optional):</label>  
       <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
      <input name="uhrzeit" id="uhrzeit" class="form-control" type="text"
      value="<?= $daten->getUhrzeit(); ?>">
        </div>
      </div>
    </div>
    
    
    
    
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Telefon:</label>  
       <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-earphone"></i></span>
      <input name="telefon" id="telefon" placeholder="Telefonnummer" class="form-control" type="text"
      value="<?= $daten->getTelefon(); ?>">
        </div>
      </div>
    </div>
    
    
    
      
    <div class="form-group">
      <label class="col-md-4 control-label schrift">Information</label>
        <div class="col-md-4 inputGroupContainer">
        <div class="input-group">
            <span class="input-group-addon"><i class="glyphicon glyphicon-align-left"></i></span>
            	<textarea class="form-control" name="info" id="info" placeholder="Information zur Lieferung"
    			value="<?= $daten->getInfo(); ?>"></textarea>
      </div>
      </div>
    
    </div>
    <?php endforeach; 
    }?>
    <a class="btn btn-primary" href="<?= $this->getUrl(['action' => 'speichern', 'id' => $daten->getId()]); ?>">Termin ändern</a>
    
    </form>
    </div>
    </div>
    </div>
    
    
    <a href="<?= $this->getUrl(['action' => 'speichern']); ?>"><input type="submit" value="Termin ändern" /></a>


    Hier kann ich dann meine Änderungen machen und mit Zeile 218 das Submit ausführen und die speichernAction aufrufen.

    public function speichernAction()
    	{
    		$TerminMapper = new TerminMapper();
    
            
    
                
                    $Termin = new TerminModel();
                    if ($this->getRequest()->getPost('id')) {
                        $Termin->setId($this->getRequest()->getPost('id'));
                    }
                    
    				$Termin->setId($this->getRequest()->getPost('id'))
    					->setMatchcode($this->getRequest()->getPost('matchcode'))
                        ->setVorgang($this->getRequest()->getPost('vorgang'))
                        ->setName($this->getRequest()->getPost('name'))
    					->setAdresse($this->getRequest()->getPost('adresse'))
    					->setHausnummer($this->getRequest()->getPost('hausnummer'))
    					->setPlz($this->getRequest()->getPost('plz'))
    					->setLieferdatum($this->getRequest()->getPost('lieferdatum'))
    					->setUhrzeit($this->getRequest()->getPost('uhrzeit'))
    					->setLieferung($this->getRequest()->getPost('lieferung'))
    					->setOrt($this->getRequest()->getPost('ort'))
    					->setInfo($this->getRequest()->getPost('info'));
                    
    				
    				
    				$TerminMapper->save($Termin);
    
                    $this->redirect()
                        ->withMessage('saveSuccess')
                        ->to(['action' => 'index']);
    
                if ($this->getRequest()->getPost('id')) {
                    $this->redirect()
                        ->to(['action' => 'anzeigen', 'id' => $this->getRequest()->getPost('id')]);
                } else {
                    $this->redirect()
                        ->to(['action' => 'index']);
                }
            
    	}



    Bis hier läuft alles sauber durch. Bekomme sogar die Message "erfolgreich gespeichert (Zeile 31)"
    Es wird aber leider nichts gespeichert...


    Hier nochmal die Mapper-Methode

    public function save(TerminModel $Termin)
        {
    			
    		$fields = [
                'id'		=> $Termin->getId(),
    			'matchcode' => $Termin->getMatchcode(),
                'vorgang' => $Termin->getVorgang(),
    			'name' => $Termin->getName(),
    			'adresse' => $Termin->getAdresse(),
    			'hausnummer' => $Termin->getHausnummer(),
    			'plz' => $Termin->getPlz(),
    			'ort' => $Termin->getOrt(),
    			'lieferung' => $Termin->getLieferung(),
    			'lieferdatum' => $Termin->getLieferdatum(),
    			'uhrzeit' => $Termin->getUhrzeit(),
    			'info' => $Termin->getInfo(),
    			'telefon' => $Termin->getTelefon()
                
            ];
    
            if ($fields['id']){
                $this->db()->update('mod1')
                    ->values($fields)
                    ->where(['id' => $Termin->getId()])
                    ->execute();
            } else {
                $this->db()->insert('mod1')
                    ->values($fields)
                    ->execute();
            }
        }


    Habe jetzt schon viel probiert und versucht...komme ohne eure Hilfe aber nicht weiter....

    0 Mitglieder finden den Beitrag gut.
  30. #60
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    Wie sehen deine Models aus?
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Module und Modifikationen

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten