Empfehlungen: Erweiterte Suche

Validierung funktioniert nicht wie sie soll

Datenbankobjekte strukturieren und validieren

Validierung funktioniert nicht wie sie soll

Beitragvon getit » Do 1. Jan 2009, 12:03

Hallo,

habe eine Formular:

Code: Alles auswählen

<?php
echo $form->create('Job');
echo $form->input('company');
echo $form->input('title');
echo $form->input('description');
echo $form->end('Speichern');
echo $html->link('zurück', array(
    'controller'    =>  'jobs',
    'action'        =>  'index'
));
?>
 


und folgende Methode dazu im Controller
Code: Alles auswählen

function add() {
        pr($this->data);        //NUR FÜR TESTZWECKE
    if (!empty($this->data)) {
        $this->Job->create();
        if ($this->Job->save($this->data)) {
            $this->Session->setFlash('Der Job wurde gespeichert.');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Der Job konnte nicht angelegt werden.');
        }
    }
}
 


Ohne eine Validierung der Formularfelder im Model klappt das sehr gut.
Jetzt habe ich aber noch folgende Validierung im Model hinzugefügt:
Code: Alles auswählen

var $validate = array(
    'title' =>  array(
        'rule'      =>  false,
        'required'  =>  true,
        'message'   =>  'Bitte geben Sie einen Titel für das Jobangebot ein.'
    ),
);
 


Jetzt kann ich nichts mehr speichern :?:

Erhalte immer die im Validator angegeben Meldung ('Bitte geben Sie...') unterhalb des Formularfelds und von cake die folgende Meldung 'Warning (2): preg_match() [function.preg-match]: Empty regular expression [CORE\cake\libs\model\model.php, line 2413]'

:!: Ich möchte nochmals betonen, dass alle Felder im Formular ausgefüllt sind (sehe ich auch durch das pr(), das ich zu Testzwecken in die add() des Controllers mit rein hab) :!:

Lasse ich die 'rule' im Validate-Array weg
Code: Alles auswählen

var $validate = array(
    'title' =>  array(
        'required'  =>  true,
        'message'   =>  'Bitte geben Sie einen Titel für das Jobangebot ein.'
    ),
);
 

erhalte ich folgende Fehlermeldung: 'Warning (2): preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash [CORE\cake\libs\model\model.php, line 2413]'

Wieso kann ich keine neuen Jobs mehr anlegen?
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Validierung funktioniert nicht wie sie soll

Beitragvon Mathias » Do 1. Jan 2009, 12:42

Hmm die Fehlermeldung sagt, dass title nicht alphanumerisch sein darf.
Dann würde ich einfach versuchen, in der rule festzulegen, dass es alphanumerisch sein muss:
Code: Alles auswählen
'rule' => 'alphaNumeric'


Hier noch was ausm cookbook
The 'rule' key is required. If you only set 'required' => true, the form validation will not function correctly. This is because 'required' is not actually a rule.

Also du musst rule immer einen Wert geben wie z.b. alphaNumeric. In cake integrierte rules sollten dir da weiterhelfen. Die Seiten davor sind auch noch sehr hilfreich, wenn du mehrere Regeln für ein Feld definieren möchtest.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Validierung funktioniert nicht wie sie soll

Beitragvon Ifrit » Sa 11. Sep 2010, 12:16

Hallihallo,

ich nehme an getit arbeitet auch am O'Reilly Buch "Webentwicklung mit CakpPHP"

Ich habe somit fast den gleichen Code. Die Validierung wird jedoch komplett ignoriert.

Cakeversion: 1.2.8

Code: Alles auswählen

/* games_controller.php */
<?php

    class GamesController extends AppController {
        var $name = 'Games';
       
        function index() {
       
            $games = $this->Game->find('all', array('order' => 'title ASC' ,));
            $this->set('games', $games);
           
            $this->pageTitle = 'Lidgee.org Deine Spieledatenbank';
       
        }
       
        function view($id) {
           
            $games = $this->Game->read(null, $id);
            $this->set('games', $games);
           
            $this->pageTitle = 'Lidgee.org Deine Spieledatenbank';
           
        }

        function edit($id) {
       
            if(!empty($this->data)) {
                if($this->Game->save($this->data)) {
                    $this->Session->setFlash('Das Spiel wurde gespeichert');
                    $this->redirect(array('action'=>'index')); }
               
                else {
                    $this->Session->setFlash('Das Spiel konnte nicht gespeichert werden'); } }
               
                else {
                    $this->data = $this->Game->read(null, $id); }
                   
            $this->pageTitle = 'Lidgee.org Deine Spieledatenbank - bearbeiten';
                   
        }

        function add() {
       
            if(!empty($this->data)) {
                $this->Game->create();
               
                if ($this->Game->save($this->data)) {
                    $this->Session->setFlash('Das Spiel wurde neu angelegt');
                    $this->redirect(array('action'=>'index')); }
               
                else {
                    $this->Session->setFlash('Das Spiel konnte nicht angelegt werden'); } }
               
        }

        function delete($id = null) {
           
            if(!$id) {
                $this->Session->setFlash('Spiel nicht gefunden, ungültige ID');
                $this->redirect(array('action'=>'index')); }
               
            if ($this->Game->del($id)) {
                $this->Session->setFlash('Das Spiel mit der ID '.$id.' wurde erfolgreich gelöscht');
                $this->redirect(array('action'=>'index')); }
               
        }

    }

?>
 


Code: Alles auswählen

/* Game.php */
<?php

    class Games extends AppModel {
        var $name = 'Games';
       
        var $validate = array (
                'title' => array (
                    'rule' => 'notEmpty',
                    'required' => true,
                    'message' => 'Der Spieltitel muss angegeben werden'
                )

        );
       
    }

?>
 


Code: Alles auswählen

/* add.ctp */
<h2>Neues Spiel</h2>

<?php

    echo $form->create('Game');
    echo $form->input('title', array ( 'label' => 'Spieletitel'));
    echo $form->input('platform', array ( 'label' => 'Plattform'));
    echo $form->end('speichern');

?>
 
Ifrit
 
Beiträge: 1
Registriert: So 7. Sep 2008, 08:45
Wohnort: Cologne
CakePHP-Version: 1.2.0.7296-rc2
OS: Ubuntu


Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast