bonjour
j'ai un problème le voici

code php de mon MediasController.php :

class MediasController extends AppController{

function admin_index($post_id){
$d'medias'] = $this->Media->find('all',array(
'conditions' => array('post_id' => $post_id)
));
$this->set($d);
}
}
cake me renvoie une erreur comme quoi il reconnais $post_id

aidez moi svp

11 réponses


sidii75
Réponse acceptée

Bonjour,
Tu renseigne bien le post_id dans ton url quand t’accède a ta page ?

sidii75
Réponse acceptée

oui quand tu te rend sur l'url qui relie ton admin_index est ce que tu renseigne ton post_id ?
Exemple d'url : /admin/medias/post_id
Tu remplace post_id par ton numero de poste.
Est ce que tu fait sa ?

lavangy
Auteur

tu veut dire dans admin_index.ctp

lavangy
Auteur

bonjour
voici les lignes d'erreur

Missing argument 1 for MediasController::admin_index() [APP\Controller\MediasController.php, line 5]
Undefined variable: post_id [APP\Controller\MediasController.php, line 31]
Undefined variable: id [APP\Controller\MediasController.php, line 34]
Undefined variable: post_id [APP\View\Medias\admin_index.ctp, line 8]
Invalid argument supplied for foreach() [APP\View\Medias\admin_index.ctp, line 8]

lavangy
Auteur
<?php
class MediasController extends AppController {
     function admin_index($post_id) {
           if ($this->request->is('post')) {
            $data = $this->request->data;
            $dir = IMAGES . date('Y');
            if (!file_exists($dir))
                mkdir($dir, 0777);
            $dir .= DS.date('m');
            $f = explode('.', $data'Media']'file']'name']);
            $ext = '.'.end($f);
            $filename = Inflector::slug(implode('.', array_slice($f, 0, -1)), '-');

            $success = $this->Media->save(array(
                'name' => $data'Media']'name'],
                'url' => date('Y').'/'.date('m').'/'.$filename.$ext,
                'post_id' => $post_id
                    ));
            if ($success) {
                //envoye de l'image
                move_uploaded_file($data'Media']'file']'tmp_name'], $dir.DS.$filename.$ext);
            } else {
                $this->Session->setFlash("L'image n'est pas au bon format", 'notif', array('type' => 'error'));
            }
        }

        $d'medias'] = $this->Media->find('all', array(
            'conditions' => array('post_id' => $post_id)
                ));

        $this->set($id);

    }
}
?>

Ba selon tes erreurs qui apparaisse tu ne renseigne pas le post_id dans ton url donc la variable n'existe pas.
Je sais pas si tu a compris l’intérêt de mettre une variable dans la fonction, quand tu met une variable dans la fonction cela veut dire quel sera défini dans l'url

lavangy
Auteur

merci
le premier problème($post_id) est résolu

De rien et quel est le deuxième problème ?

lavangy
Auteur

Warning (2): move_uploaded_file(C:\Program Files\EasyPHP-5.3.9\www\tuto\app\webroot\img\2012\03\Autumn-Leaves.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory [APP\Controller\MediasController.php, line 24]

<table>
    <tr>
        <th>Image</th>
        <th>Nom</th>
         <th>Action</th>
    </tr>
    <?php foreach($medias as $k => $v): $v = current($v);?>
    <tr>
        <td><?php echo $this->Html->image($v'url']) ?></td>
    </tr>
    <?php endforeach ?>

</table>
<h3>Ajouter une image</h3>
<?php echo $this->Form->create('Media',array('type'=>'file'));?>
<?php echo $this->Form->input('file',array('label'=>"Image (format png / jpg)",'type' => 'file'));?>
<?php echo $this->Form->input('name',array('label'=>"Nom de l'image" ));?>
<?php echo $this->Form->end('Ajouter');?>

je suis désolé je commence que cette année sur php (je suis plutôt) dev cfm

Pas de soucis tout le monde commence un jour.
Donc déjà d’après l'erreur si je ne me trompe pas il ne trouve pas le dossier ou tu veut enregistré l'image.
D'aprés ce que je vois ici:

$dir = IMAGES . date('Y');
            if (!file_exists($dir))
                mkdir($dir, 0777);
            $dir .= DS.date('m');

Tu vérifie si le dossier avec l’année en cour existe et si il n'existe pas tu le crée or tu veut placé ton image dans le dossier de l'année en cour et du mois en cour. Donc dans ton traitement tu a oublier de précisé lors de la vérification si le dossier du mois en cour existé et si il n’existe pas tu le crée.
Sa serai plus sa si je me trompe pas:

$dir = IMAGES . date('Y').DS.date('m');
            if (!file_exists($dir)){
                mkdir($dir, 0777, true);
             }

Je ne manipule pas souvent la création de dossier en php donc si des personne vois que je me trompe corriger moi.
Test sa et dit moi des nouvelles.

lavangy
Auteur

bonjour
je vais essayer avec ta proposition
mais je me demande si cé pas à la ligne 30 de mon controller medias (j'ai oublier le i de $id)
et encore mille fois merci a vous tous