upload de fichier dans cakephp 2.3
Je suis nouveau dans cakephp et je suis en train de créer un simple fichier de téléchargement avec cakephp 2.3 voici mon contrôleur
public function add() {
if ($this->request->is('post')) {
$this->Post->create();
$filename = WWW_ROOT. DS . 'documents'.DS.$this->data['posts']['doc_file']['name'];
move_uploaded_file($this->data['posts']['doc_file']['tmp_name'],$filename);
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Your post has been saved.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to add your post.');
}
}
}
et mon ajouter.ctp
echo $this->Form->create('Post');
echo $this->Form->input('firstname');
echo $this->Form->input('lastname');
echo $this->Form->input('keywords');
echo $this->Form->create('Post', array( 'type' => 'file'));
echo $this->Form->input('doc_file',array( 'type' => 'file'));
echo $this->Form->end('Submit')
il enregistre firstname, lastname, mots-clés, et le nom du fichier dans la bd , mais le fichier que je veux enregistrer dans app/webroot/documents est pas l'économie , quelqu'un peut-il aider ? Grâce
Mise à jour
thaJeztah j'ai fait comme tu dit, mais il donne quelques erreurs ici est de contrôleur si je ne me trompe pas
public function add() {
if ($this->request->is('post')) {
$this->Post->create();
$filename = WWW_ROOT. DS . 'documents'.DS.$this->request->data['Post']['doc_file']['name'];
move_uploaded_file($this->data['posts']['doc_file']['tmp_name'],$filename);
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Your post has been saved.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to add your post.');
}
}
}
et mon ajouter.ctp
echo $this->Form->create('Post', array( 'type' => 'file'));
echo $this->Form->input('firstname'); echo $this->Form->input('lastname');
echo $this->Form->input('keywords');
echo $this->Form->input('doc_file',array( 'type' => 'file'));
echo $this->Form->end('Submit')
et les erreurs sont
Avis (8): Tableau de conversion de chaîne de caractères
[CORE\Cake\Model\Datasource\DboSource.php ligne 1005]Erreur de base de données d'Erreur: SQLSTATE[42S22]: Colonne qui n'a pas trouvé: 1054 Unknown
la colonne 'Array' in 'field list'Requête SQL: INSERT INTO première.postes (prénom, nom, mots-clés,
doc_file) VALUES ('dfg', 'cbhcfb', 'dfdbd', Array)et Victor j'ai fait votre version trop , il ne marche pas trop .
OriginalL'auteur Hovo | 2013-04-28
Vous devez vous connecter pour publier un commentaire.
Vous semblent utiliser le mauvais " clé " pour accéder aux données publiées;
Doit correspondre à la "alias" de votre Modèle; singulier et un capital première lettre
Aussi,
$this->data
est un wrapper pour$this->request->data
pour la compatibilité ascendante, il est donc préférable d'utiliser cette;De vérifier le contenu des données publiées et de comprendre comment il est structuré, vous pouvez le corriger à l'aide de ce;
Juste être sûr d'activer le débogage, par la mise en
debug
à1
ou2
à l'intérieur deapp/Config/core.php
Mise à jour; double balises de Formulaire!
Je viens de remarquer que vous êtes également la création de plusieurs (imbriqué) des formes dans votre code;
De nidification des formulaires jamais travail, supprimer cette ligne et ajouter le 'type' => file " pour la première
Form->create()
En utilisant uniquement le fichier nom pour la base de données
La "Tableau de conversion de chaîne de caractères" problème est causé par le fait que vous essayez d'utiliser directement les données de "doc_file" pour votre base de données. Parce que c'est un champ de téléchargement de fichier, 'doc_file" contiendra un Tableau de données ('nom', 'tmp_name', etc.).
Pour votre base de données, vous avez besoin seulement le nom de ce tableau si vous avez besoin de modifier les données avant de les enregistrer dans votre base de données.
Pour exemple de cette façon;
tout d'abord, vous êtes toujours à l'aide de la clé incorrecte ici;
$this->data['posts']['doc_file']['tmp_name']
, qui devrait être$this->data['Post']['doc_file']['tmp_name']
. Cependant, le problème que vous voyez n'est causé parce que vous essayez d'utiliser$this->data['Post']['doc_file']
comme valeur pour l' 'doc_file' dans votre base de données, mais parce que c'est un tableau, cela ne fonctionne pas directement. Vous aurez à changer les données et d'utiliser uniquement le nom de fichier de votre base de données. Je vais essayer d'ajouter un exempleOriginalL'auteur thaJeztah
..s'assurer que les documents répertoire existe déjà et vérifiez que vous disposez des autorisations d'écriture? Si il n'existe pas le créer, ou dans votre code de vérifier si elle existe et de le créer si il n'y est pas:
exemple de code qui permettra de vérifier si le répertoire est là ou pas et de créer ensuite, téléchargez le fichier-
également vous assurer que vous n'envoyez pas de vide/vide fichier - elle peut échouer.
OriginalL'auteur Victor
Juste au cas où quelqu'un est à la recherche de nouveau. Voici mon code (testé & utilisé sur Cakephp 2.5.5). Il est basé sur http://www.templemantwells.com.au/article/website-development/cakephp-image-uploading-with-database & http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::file
Vue de fichier (*.ctp)
Fonction de contrôleur (*.php)
OriginalL'auteur Britc
J'ai trouvé le guide complet pour le téléchargement des fichiers et des images dans CakePHP, à partir d'ici - Gérer les Uploads de Fichier dans CakePHP
L'exemple de code est donné ci-dessous.
Contrôleur:
Vue:
OriginalL'auteur JoyGuru