Empfehlungen: Erweiterte Suche

Query über Link ausführen

Ausgabedaten formatieren und darstellen

Query über Link ausführen

Beitragvon Luckie » Di 11. Aug 2009, 12:14

Ich habe in einem View der einen Datensatz anzeigt einen Link. Über diesen Link soll ein Feld des Datensatzes geändert werden. Ich muss also über diesen Link ein Query abschicken:
Code: Alles auswählen
UPDATE ... WHERE ...

Wie kann ich das machen?
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Query über Link ausführen

Beitragvon euromark » Di 11. Aug 2009, 12:52

falls das ein purer "get" request ist, ist dies kein gutes coding
rein per "link" anklicken (also ohne ajax post etc) darf sich nichts an der DB ändern (nur lesezugriffe erlaubt)

mal davon abgesehen dass cake das natürlich auch falsch macht (delete actions!)

aber dann ist das halt eine methode (action) ohne view, der direkt nachdem die aktion ausgeführt wurde, wieder
auf die ursprungsseite umleitet
Zuletzt geändert von euromark am Di 11. Aug 2009, 14:44, insgesamt 1-mal geändert.
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Query über Link ausführen

Beitragvon Luckie » Di 11. Aug 2009, 12:56

Ich verstehe deine Antwort ehrlich gesagt nicht so ganz.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Query über Link ausführen

Beitragvon Luckie » Di 11. Aug 2009, 14:26

Ich habe folgendes rausgefunden. Wenn ich das so mache:
Code: Alles auswählen
$html->link($value['VertragsangebotStatus']['name'], 'updatestatus')

sucht er im zugehörigen Controller die Methode updatestatus. Soweit so gut. Habe ich implementiert. Jetzt will er aber noch einen view haben. Den gibt es aber nicht. In der Methode soll nur ein Feld von dem angezeigten Datensatz geändert werden. Den neuen Wert kann ich ihm ja über Parameter mitgeben:
Code: Alles auswählen
$html->link($value['VertragsangebotStatus']['name'], 'updatestatus/neuer_wert')


So zwei Probleme für mich:
- Wie kann ich eine Methode ohne View im Controller implementieren?
- Wie mache ich den Query?
Zuletzt geändert von Luckie am Di 11. Aug 2009, 14:44, insgesamt 1-mal geändert.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Query über Link ausführen

Beitragvon euromark » Di 11. Aug 2009, 14:44

in der action
$this->autoRender = false

oder einfach die() am Ende
dann sucht er keinen view mehr

oder gleich wieder irgendwohin weiterleiten

der query ist nich anders wie sonst auch
nimmt halt den parameter aus der url entgegen
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Query über Link ausführen

Beitragvon Luckie » Mi 12. Aug 2009, 11:27

Ok. Habe es jetzt soweit geschaft, dass er mir die update-Methode aufruft mit den richtigen Parametern:
Code: Alles auswählen
$title = $value['VertragsangebotStatus']['name'];
$link = "updatestatus/".$params;
echo "<li>".$html->link($title, $link)."</li>";


Der Link sieht dann so aus: http://foobar.de/admin/vertraege/update ... eschlossen

Der zugehörige Code im Controller:
Code: Alles auswählen
function admin_updatestatus($id = null, $status = null)
{
    $this->autoRender = false;
    $this->Session->setFlash(__('The status has been set.', true), 'default', array(), 'info');
    $this->redirect(array('action' => 'index'));
}

Was jetzt noch fehlt ist das Aktualisieren des einen Feldes in der Tabelle zu dem Datensatz.

der query ist nich anders wie sonst auch
nimmt halt den parameter aus der url entgegen

Teil zwei habe ich. Nur das "wie sonst auch" macht mir etwas Probleme. Bisher habe ich die Daten immer aus einem Formular bekommen. Da konnte ich mit save und data arbeiten:
Code: Alles auswählen
$this->Vertrag->save($this->data)

Nur wie geht das jetzt "wie sonst auch"?
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Query über Link ausführen

Beitragvon euromark » Mi 12. Aug 2009, 15:08

schau dir in der doku alles zu $this->params an
dort sind sie drin

PS: wenn du dir das mit dem id:1 sparst
und nur /id/param/param2 machst
sind die auch tatsächlich in

function foo($id, $param)

ansonsten kannste auch gleich

function foo()

machen (weil dann werden id und param nicht gefüllt!)
und dir dann eben aus $this->params[named] holen was de brauchst
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Query über Link ausführen

Beitragvon Luckie » Mi 12. Aug 2009, 23:24

Oh, danke für den Tip. Das habe ich noch gar nicht gemerkt. dann mus sich mir das Kapitl zu der Parameterübergabe in meinem Buch noch mal angucken.

Dann fehlt mir nur noch das Schreiben der Werte in die Datenbank. Aber das muss bis Montag erstmal warten.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Query über Link ausführen

Beitragvon Luckie » Mo 17. Aug 2009, 10:23

So, habs geschaft. Allerdings bin ich über das Array params nicht an meine Parameter dran gekommen. Ich habe es dann ohne benannte Parameter gemacht:
Code: Alles auswählen
function admin_updatestatus($id = null, $statusid = null)
{
    $this->autoRender = false;
    $this->data['status_id'] = $statusid;
    $this->Vertragsangebot->save($this->data);
    $this->Session->setFlash(__('The status has been set.', true), 'default', array(), 'info');
    $this->redirect(array('action' => 'view', $id));
}
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Query über Link ausführen

Beitragvon euromark » Mo 17. Aug 2009, 14:49

dachte das soll ein update sein?

dann fehlt doch die primary id

$this->Vertragsangebot->id = $id;

oder mit ins data array packen!
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Nächste

Zurück zu Views

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast