bonjour,
voila mon problème est le suivant:
j'ai créé mon formulaire et mon action edit sur mon contrôleur mais le soucis c'est que quand je valide les seuls champs qui se sauvegarde sont le nom de l'image après son changement par le contrôleur et la date qui se sauvegarde uniquement a la date et heure actuelle et non a celle choisie dans le panneau déroulant (au passage j'ai un soucis avec les $this->flash, ils ne s'affichent pas)

voici la fonction edit

function edit($id = null){
        $this->layout="admin";
        $c = $this->Post->Category->find('list',array(
                'recursive'=>-1,
            'fields'=> array('id','title')
                ));
        $this->set('cats',$c);

        if(!empty($this->data)){
            $this->Post->save($this->data);
                $oldimg = $this->Post->field('image');
                if(!empty($this->data'Post']'image']'tmp_name'])){
                    if(!empty($oldimg)){unlink(IMAGES.'posts'.DS.$oldimg); }
                        $filename = $this->Post->id.'-'.substr(md5(uniqid()),0,5).substr($this->data'Post']'image']'name'],-4);
                        move_uploaded_file($this->data'Post']'image']'tmp_name'],IMAGES.'posts'.DS.$filename);
                        $this->Post->saveField('image',$filename);

                $this->flash('Votre post a été sauvegardé.','/posts');
            }
            $this->redirect($this->referer());
        }
        if(empty($this->data)){
            $this->Post->id = $id;
            $this->data = $this->Post->read();
        }

    }

et voici le formulaire

<?php
echo $form->create('Post',array('url'=>array('action'=>'edit'),'enctype'=>'multipart/form-data'));
echo $this->Form->input('Post.title',array('label' => 'Titre : <br/>'));
echo $this->Form->input('Post.content',array('label' => 'Contenu de l\'article : <br/>'));
echo $this->Form->input('Post.category_id',array('label' => 'Categorie : <br/>','options'=>$cats));
echo $this->Form->file('Post.image');
echo $this->Form->input('Post.id', array('type' => 'hidden'));
echo $this->Form->input('Post.date',array('label' => 'Date : <br/>',
                                            'dateFormat' => 'DMY',
                                            'timeFormat' => '24',
                                            'minYear' => date('Y') - 10,
                                            'maxYear' => date('Y') - 0));
echo $this->Form->end('Valider et envoyer');
?>

voila si quelqu'un peut m'aider a résoudre ce petit soucis :)

8 réponses


moket
Auteur
Réponse acceptée

pour le array c'est bon j'ai trouvé c'était le champ image qu'il n'aimait pas car un nom image est déjà utilisé dans cake donc il fallait juste le nommer autrement et du coup sa sauvegarde bien tout :)

pour le flash c'est nomral, c'est

$this->Session->setFlash('message');

qu'il faut mettre et dans la vue :

echo $session->flash();

pour ta non sauvegarde des données... je sais pas est ce que ton modele est bien défini ? est ce qu'il se réfère à la bonne table... vérifie bien tout parce qu'avec un $this->Post->sav($this->data); ca devrait meme pas se poser de questions ^^

moket
Auteur

c'est bien pour ça que je pose la question je ne vois aucune erreur mais ça ne veux pas ça sauvegarde uniquement l'image, au niveau du modèle oui il est bien défini puisque le nom d'image lui se sauvegarde

le model

<?php
class Post extends AppModel{
    var $name='Post';
    var $belongsTo='Category';
}
?>

merci pour le flash() sa marche

met un debug($this->data) juste apres le if(!empty($this->data)), enleve la redirection regarde ce qu'il contient et deplace le jusqu'a ce que tu vois ou est le probleme, c'est ce que je fais quand je trouve pas la solution et souvent ca marche :)

bonne chance :)

moket
Auteur

ah oui tien j'y avais pas pensé je vais test merci

moket
Auteur

il me montre bien mes tableaux avec une erreur en dessous **SQL Error: 1054: Unknown column 'Array' in 'field list'** le debug [code]Array ( [Post] => Array ( [title] => ma news de test [content] => azerty [category_id] => 1 [id] => 7 [date] => Array ( [day] => 04 [month] => 01 [year] => 2011 [hour] => 03 [min] => 45 ) [image] => Array ( [name] => 7-b829b.gif [type] => image/gif [tmp_name] => C:\wamp\tmp\phpA302.tmp [error] => 0 [size] => 2687 ) ) ) [/code]

fais voir la requete SQL généréée et a quelle ligne as tu mis le debug ? (on touche au bout ;) )

moket
Auteur

je l'ai mis juste apres le

if(!emptyempty($this->data)){

de la ligne 9 du edit

il me met
Query: UPDATE posts SET title = 'ma news de test', content = 'vcnxng', category\_id = 1, id = 7, date = '2011-01-14 13:58:00', image = Array WHERE posts.id = 7

ce que je ne comprend pas c'est que fou cet array dans image alors que sa me sauvegarde pourtant bien le fichier (c'est d'ailleurs la seule chose qu'il sauvegarde