Empfehlungen: Erweiterte Suche

Select-Feld wird nicht in Datenbank gespeichert

Daten auslesen, verarbeiten und den Views übergeben

Select-Feld wird nicht in Datenbank gespeichert

Beitragvon SeGoTe » So 14. Aug 2011, 13:10

Hi,
mein Code zum erstellen und updaten von Kapiteln sieht zurzeit so aus:
Code: Alles auswählen

function admin_add() {
        if (!empty($this->data)) {
            $this->data['Cat']['slug'] = $this->stringToSlug($this->data['Cat']['name']);  

            if ($this->Cat->save($this->data)) {
                $this->Session->setFlash('Das Kapitel wurde erfolgreich erstellt');
                $this->redirect(array('controller' => 'cats','action' => 'admin_index'));
            }
        }
       
        $parents[0] = "Kein Oberkapitel";
        $catlist = $this->Cat->generatetreelist(NULL,NULL,NULL," - ");
        if($catlist) {
            foreach ($catlist as $key=>$value)
                $parents[$key] = $value;
        }
        $this->set(compact('parents'));
    }
   
    function admin_edit($id = NULL) {
        if (!empty($this->data)) {
            $this->data['Cat']['slug'] = $this->stringToSlug($this->data['Cat']['name']);  
            if($this->Cat->save($this->data)) {
                $this->Session->setFlash('Das Kapitel wurde erfolgreich bearbeitet');
                $this->redirect(array('controller' => 'cats','action' => 'admin_index'));
            }
        }
        if($id==null) $this->redirect(array('controller' => 'cats','action' => 'admin_index'));
           
        $this->data = $this->Cat->read(null, $id);
   
        $parents[0] = "Kein Oberkapitel";
        $catlist = $this->Cat->generatetreelist(NULL,NULL,NULL," - ");
        if($catlist) {
            foreach ($catlist as $key=>$value)
                $parents[$key] = $value;
        }
        $this->set(compact('parents'));
    }
 

Die Views sehen beide so aus(nur anderer Text):
Code: Alles auswählen

<h2>Kapitel ändern</h2>
<?=$this->Form->create('Cat')?>
<fieldset>
    <legend>Kapitel hinzufügen</legend>
    <p>
        <?=$this->Form->input('name', array('label' => 'Name'))?>
    </p>
   <p>
        <?=$this->Form->input('description', array('type' => 'textarea','label' => 'Beschreibung'))?>
    </p>
    <p>
        <?=$this->Form->input('parent_id', array('label' => 'Oberkapitel'))?>
    </p>
</fieldset>
<?=$this->Form->end("Kapitel updaten")?>
 


Wenn ich nun eine neue Kategorie erstelle und als Oberkapitel "Kein Oberkapitel" wähle, trägt er 0 korrekt bei parent_id in die Datenbank ein. Beim Updaten macht er jedoch aus der "0" jedes Mal "NULL", obwohl vorher value="0" im Select-Feld markiert wurde. Woran kann das liegen?
SeGoTe
 
Beiträge: 11
Registriert: Di 25. Jan 2011, 19:19

Re: Select-Feld wird nicht in Datenbank gespeichert

Beitragvon euromark » So 14. Aug 2011, 14:06

meine felder sind prinzipiell immer not null
ich schätze dass da statt 0 ein leerer string übergeben wird

PS warum kein behavior für das slugging verwenden? wäre doch sauberer...
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Select-Feld wird nicht in Datenbank gespeichert

Beitragvon SeGoTe » So 14. Aug 2011, 15:01

Ich arbeite noch nicht lange mit CakePHP, kenne ich daher mit Behaviours & Co noch nicht aus. Aber danke für den Tipp ich werde versuchen es umzusetzen.
Der ausgegebene HTML-Code sieht wie folgt aus:
Code: Alles auswählen
<form id="CatAdminEditForm" method="post" action="/book/admin/cats/edit/7" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="PUT" /></div><fieldset>
    <legend>Kapitel hinzufügen</legend>
    <p>
        <div class="input text required"><label for="CatName">Name</label><input name="data[Cat][name]" type="text" maxlength="100" value="tester" id="CatName" /></div>    </p>
   <p>
        <div class="input textarea"><label for="CatDescription">Beschreibung</label><textarea name="data[Cat][description]" cols="30" rows="6" id="CatDescription" >gihöjäk</textarea></div>    </p>

    <p>
        <div class="input select required"><label for="CatParentId">Oberkapitel</label><select name="data[Cat][parent_id]" id="CatParentId">
<option value="0" selected="selected">Kein Oberkapitel</option>
<option value="1">Test</option>
<option value="2">Test 2</option>
<option value="4"> - Test 4</option>

<option value="6">Test 6</option>
<option value="5">Test 5</option>
<option value="7">tester</option>
</select></div> </p>
</fieldset>
<div class="submit"><input type="submit" value="Kapitel updaten" /></div></form>

Dort wird doch eindeutig bei parent_id "0" übergeben, daher verstehe ich nicht, wie daraus ein leerer String werden kann
SeGoTe
 
Beiträge: 11
Registriert: Di 25. Jan 2011, 19:19

Re: Select-Feld wird nicht in Datenbank gespeichert

Beitragvon euromark » So 14. Aug 2011, 15:21

stimmt
sieht sehr nach 0 aus

haste in beforeSave mal ein pr($this->data); die(); probiert?
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Select-Feld wird nicht in Datenbank gespeichert

Beitragvon SeGoTe » So 14. Aug 2011, 15:30

Hab ich gerade gemacht, dort ist tatsächlich nur ein leerer String zu sehen:
Code: Alles auswählen

Array
(
    [Cat] => Array
        (
            [name] => tester
            [description] => gihöjäk
            [parent_id] =>
            [slug] => tester
        )

)
 


Dies trifft aber nur bei der Kategorie 0 zu. Wenn ich 1 als parent_id wählen, gibt es auch 1 zurück.
SeGoTe
 
Beiträge: 11
Registriert: Di 25. Jan 2011, 19:19


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron