Salut !

Premièrement, bravo à toi Grafikart pour tes magnifiques tutoriels que je suis depuis longtemps, et c'est grâce à toi que j'ai réussi à développer un site web complet :P
Donc très récemment, ayant vu les tutoriels sur Développer un site web de A à Z, je me suis dit "Pourquoi pas recommencer le site avec une structure MVC ?"

Donc, tout allait bien, sauf à quelques épisodes, mais j'ai réussi à corriger par moi même, jusqu'à ce jour 6, où je bloque.

Donc, le problème à lieu au niveau de l'upload de l'image.
Quand je l'upload, j'ai un problème de variable $id non définie, alors que la fonction est belle et bien "function admin_index($id){" !
J'ai essayé de mettre admin_index($id = null), et tout va bien, mais c'est au moment de mettre dans la base de donnée, j'ai une erreur comme quoi je ne peux pas mettre deux entrées avec le même id (id étant une clef primaire).

Voilà le MediasController.php:

<?php
class MediasController extends Controller{

    function admin_index($id){
        $this->loadModel('Media');
        if($this->request->data && !empty($_FILES'file']'name'])){
            if(strpos($_FILES'file']'type'], 'image') !== false) {
                $dir = WEBROOT.DS.'img'.DS.date('Y-m');
                if(!file_exists($dir)) mkdir($dir, 0777);
                move_uploaded_file($_FILES'file']'tmp_name'], $dir.DS.$_FILES'file']'name']);
                $this->Media->save(array(
                    'name' => $this->request->data->name,
                    'file' => date('Y-m').'/'.$_FILES'file']'name'],
                    'post_id' => $id,
                    'type' => 'img'
                    ));
            }else{
                $this->Form->errors'file'] = "Erreur: Le fichier n'est pas une image !";
            }
        }
        $this->layout = 'modal';
        $d'post_id'] = $id;
        $this->set($d);
    }
}
?>

Et éventuellement le admin_index.php

<div class="page-header">
    <h1>Ajouter une image</h1>
</div>
<form action="<?php echo Router::url('admin/medias/index/', $post_id); ?>" method="post" enctype="multipart/form-data">
    <?php echo $this->Form->input('file', 'Image', array('type' => 'file')) ?>
    <?php echo $this->Form->input('name', 'Titre') ?>
    <div class="actions">
    <input type="submit" class="btn primary" value="Héberger" />
    <input type="reset" class="btn"/>
    </div>
</form>

Si tu as besoin de plus d'informations, d'autres fichier, n'hésite pas à me demander ! :)

Merci d'avance,
Keith'

2 réponses


Gregory
Réponse acceptée

Il faut mettre <?php echo Router::url('admin/medias/index/'.$post_id); ?> dans l'action du form et non une virgule
C'est pour cela que ton $id est vide

Keyzou
Auteur

En effet, c'était bel et bien ça !
Et j'ai aussi résolu le problème du "je ne peux pas mettre deux fois la même entrée", j'avais oublié de mettre le champ id en auto increment :)

Merci beaucoup, problème résolu ! :)