Bonjour,
je viens vers vous, après avoir suivie le tutaux de "développer un site en 7 jour".
Après avoir us plusieurs soucis que j'ai jusque la réussi a régler tout seul, la je bloque!

Enfaite je n'est aucune image qui s'affiche, quand j'upload une image sa me mes les liens sous cette forme :

\"/img/2012-12/logofayaprmontage---3.gif

alors que la bonne url pour que l'image s'affiche devrait être sa:

img/2012-12/logofayaprmontage---3.gif

et a la place de l'image j'ai sa qui s'affiche

/"/"

esse que quelqu'un saurais comment régler ce problème svp???
Je suis débutant et la je vois pas du tout.
Apparement il faudrais mettre un stripslashes($d'post']->content) avant d'envoyer a la vue. mes etant debutant je suis pas sur que ou et comment je le met soi correct.
Si quelqu'un pouvais m'aidez svp.

12 réponses


sly
Auteur
Réponse acceptée

Bon ba je ne sais pas pourquoi j'ai réessayer de télécharger une image et maintenant ça marche mes images s'affiche nikel
Désolé pour le dérangement et merci de s’être pencher sur mon problème.

Bonsoir,
Pourrais tu nous mettre le code en question ?

sly
Auteur

La page 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'
                ));
                $this->Session->setFlash("L'image a bien été uploadé");
            }else{
                $this->Form->errors'file'] = "Le fichier n'est pas une image";
            }
        }
        $this->layout = 'modal';
        $d'images'] = $this->Media->find(array(
            'conditions' => array('post_id' => $id
        ))); 
        $d'post_id'] = $id;
        $this->set($d); 
    }
    function admin_delete($id){
        $this->loadModel('Media');
        $media = $this->Media->findFirst(array(
            'conditions' => array('id'=>$id)
        ));
        unlink(WEBROOT.DS.'img'.DS.$media->file);
        $this->Media->delete($id);
        $this->Session->setFlash("Le média a bien été supprimé");
        $this->redirect('admin/medias/index/'.$media->post_id);
    }
}

La page admin_index

<table>
    <thead>
        <tr>
            <th></th>
            <th>Titre</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($images as $k => $v): ?>
            <tr>
                <td>
                    <a href="#" onclick="FileBrowserDialogue.sendURL('<?php echo Router::webroot('img/'.$v->file); ?>')">
                        <img src="<?php echo Router::webroot('img/'.$v->file); ?>" height="50">
                    </a>
                </td>
                <td><?php echo $v->name; ?></td>
                <td>
                    <a onclick="return confirm('Voulez vous vraiment supprimer cette image'); " href="<?php echo Router::url('admin/medias/delete/'.$v->id); ?>">Supprimer</a>
                </td>
            </tr>
        <?php endforeach ?>
    </tbody>
</table>
<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" value="Envoyer" class="btn primary">
    </div>
</form>
<script type="text/javascript" src="<?php echo Router::webroot('js/tinymce/tiny_mce_popup.js'); ?>"></script>
<script type="text/javascript">
    var FileBrowserDialogue = {
        init : function () {
            // Here goes your code for setting your custom things onLoad.
        },
        sendURL : function (URL) {
            var win = tinyMCEPopup.getWindowArg("window");
            // insert information now
            win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = URL;
            // are we an image browser
            if (typeof(win.ImageDialog) != "undefined") {
                // we are, so update image dimensions...
                if (win.ImageDialog.getImageData)
                    win.ImageDialog.getImageData();
                // ... and preview if necessary
                if (win.ImageDialog.showPreviewImage)
                    win.ImageDialog.showPreviewImage(URL);
            }
            // close popup window
            tinyMCEPopup.close();
        }
    }
    tinyMCEPopup.onInit.add(FileBrowserDialogue.init, FileBrowserDialogue);
</script>

La page Posts_Controller.php

<?php 
class PostsController extends Controller{

    /**
    * Blog, liste les articles
    **/
    function index(){
        $perPage = 10; 
        $this->loadModel('Post');
        $condition = array('online' => 1,'type'=>'post'); 
        $d'posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
            'order' => 'created DESC',
            'limit' => ($perPage*($this->request->page-1)).','.$perPage,
            'join' => array('categories as Category'=>'Category.id=Post.category_id')
        ));
        $d'total'] = $this->Post->findCount($condition); 
        $d'page'] = ceil($d'total'] / $perPage);
        $this->set($d);
    }
    /**
    * Permet d'afficher les posts d'une catégorie
    **/
    function category($slug){
        $this->loadModel('Category'); 
        $category = $this->Category->findFirst(array(
            'conditions' => array('slug' => $slug),
            'fields' => 'id,name'
        ));
        if(empty($category)){
            $this->e404();
        }
        $perPage = 10; 
        $this->loadModel('Post');
        $condition = array('online' => 1,'type'=>'post','category_id' => $category->id); 
        $d'posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
            'order' => 'created DESC',
            'limit' => ($perPage*($this->request->page-1)).','.$perPage,
            'join' => array('categories as Category'=>'Category.id=Post.category_id')
        ));
        $d'total'] = $this->Post->findCount($condition); 
        $d'page'] = ceil($d'total'] / $perPage);
        $d'title'] = 'Tous les articles "'.$category->name.'"'; 
        $this->set($d);
        // Le système est le même que la page index alors on rend la vue Index
        $this->render('index'); 
    }
    /**
    * Affiche un article en particulier
    **/
    function view($id,$slug){
        $this->loadModel('Post');
        $d'post'] = $this->Post->findFirst(array(
            'fields' => 'Post.id,Post.content,Post.name,Post.slug,Category.name as catname,Category.slug as catslug',
            'conditions' => array('Post.online' => 1,'Post.id'=>$id,'Post.type'=>'post'),
            'join' => array('categories as Category'=>'Category.id=Post.category_id')
        )); 
        if(empty($d'post'])){
            $this->e404('Page introuvable'); 
        }
        if($slug != $d'post']->slug){
            $this->redirect("posts/view/id:$id/slug:".$d'post']->slug,301);
        }
        $this->set($d);
    }

    /**
    * ADMIN ACTIONS
    **/
    /**
    * Liste les différents articles
    **/
    function admin_index(){
        $perPage = 10; 
        $this->loadModel('Post');
        $condition = array('type'=>'post'); 
        $d'posts'] = $this->Post->find(array(
            'fields' => 'Post.id,Post.name,Post.online,Category.name as catname,Category.slug as catslug',
            'order' => 'created DESC',
            'conditions' => $condition,
            'limit' => ($perPage*($this->request->page-1)).','.$perPage,
            'join' => array('categories as Category'=>'Category.id=Post.category_id')
        ));
        $d'total'] = $this->Post->findCount($condition); 
        $d'page'] = ceil($d'total'] / $perPage);
        $this->set($d);
    }
    /**
    * Permet d'éditer un article
    **/
    function admin_edit($id = null){
        $this->loadModel('Post'); 
        if($id === null){
            $post = $this->Post->findFirst(array(
                'conditions' => array('online' => -1),
            ));
            if(!empty($post)){
                $id = $post->id;
            }else{
                $this->Post->save(array(
                    'online' => -1,
                    'created' => date('Y-m-d')
                ));
                $id = $this->Post->id;
            } 
        }
        $d'id'] = $id; 
        if($this->request->data){
            if($this->Post->validates($this->request->data)){
                $this->request->data->type = 'post';
                $this->Post->save($this->request->data);
                $this->Session->setFlash('Le contenu a bien été modifié'); 
                $this->redirect('admin/posts/index'); 
            }else{
                $this->Session->setFlash('Merci de corriger vos informations','error'); 
            }

        }else{
            $this->request->data = $this->Post->findFirst(array(
                'conditions' => array('id'=>$id)
            ));
        }
        // On veut un sélecteur de catégorie donc on récup la liste des catégories
        $this->loadModel('Category');
        $d'categories'] = $this->Category->findList(); 
        $this->set($d);
    }
    /**
    * Permet de supprimer un article
    **/
    function admin_delete($id){
        $this->loadModel('Post');
        $this->Post->delete($id);
        $this->Session->setFlash('Le contenu a bien été supprimé'); 
        $this->redirect('admin/posts/index'); 
    }
    /**
    * Permet de lister les contenus
    **/
    function admin_tinymce(){
        $this->loadModel('Post');
        $this->layout = 'modal'; 
        $d'posts'] = $this->Post->find();
        $this->set($d);
    }

}

Bonjour,
La POO c'est pas trop mon truc donc pourrais tu mettre juste le bout de code concerné par ton affichage image déjà?

Vérifie ta webroot(), je pense qu'il y a des slashes ou antislashes de plus avant le chemin de l'image.

sly
Auteur

Bonjour, merci de prendre le temps de regarder mon problème.

ses le lien qui permet d'afficher l'image (ligne 13 et 14 de la page admin_index.php visble au dessus)

<a href="#" onclick="FileBrowserDialogue.sendURL('<?php echo Router::webroot('img/'.$v->file); ?>')">
    <img src="<?php echo Router::webroot('img/'.$v->file); ?>" height="50">

ce qui envoie a la vue : (ligne 22 a 27 de la page MediasController.php visible au dessus)

$this->layout = 'modal';
            $d'images'] = $this->Media->find(array(
            'conditions' => array('post_id' => $id
        ))); 
        $d'post_id'] = $id;
        $this->set($d);
sly
Auteur

Bonjour hesham,
Sa c ce qui est définie dans la page index du dossier webroot :
Je vérifie ou ma webroot ?

define('WEBROOT',dirname( __FILE__ )); 
define('ROOT',dirname(WEBROOT)); 
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core'); 
define('BASE_URL',dirname(dirname($_SERVER'SCRIPT_NAME'])));
sly
Auteur

Apparement sa serai ce que "sgalou" explique mes je ne c pas du tout ou et comment faire ce qu'il dit.

voici le message qu'il avait publié dans les commentaires sous la video 6
de sgalou:
Juste une info, l'insertion des images dans un article, ATTENTION a PHP 5 et ses "magic quote".
Les images ne s'afficheront jamais dans vos articles car les liens inséré dans la base de donne seront formates (exemple: src="\"/site/img/2011-10/xxx.jpg\"").

Ce qui oblige un stripslashes($d'post']->content) avant d'envoyer a la vue.

Ou alors... passer a PHP6. :)

Ou alors mieux gérer tes guillemets ? Tu es sur un forum évite le language proche du sms (c au lieu de c'est), de plus c'est ça et pas sa qui est un pronom possessif, enfin je ne suis pas là pour te faire un cours d'orthographe ;) . Mais si tu prenais le temps d'observer ce que fait Grafikart dans chaque vidéo tu comprendrais comment tout ça fonctionne j'ai l'impression que tu as simplement fais un "copier/coller" de ce qu'il faisait.

Pour la solution ,voici comment je fais mes liens vers mes images:

<img src="<?php echo Router::webroot('img/xxxxx/xxxxx/'.$product->id.'.jpg'); ?>"

Remplace les xxx par les noms de tes dossiers, et assures toi que le dossier img est bien dans webroot (qu'il n'y ai pas d'intermédiaire entre les deux).

sly
Auteur

Effectivement mon orthographe laisse a désiré. Prendre le temps de regarder... bah vla le nombre de fois que je les ai regarder, après ses sur sa fait peu de temps que je m'initie a la programmation donc forcement j'ai énormément de lacune.
quand je teste en local avec wamp sa fonctionne très bien mes quand je balance sur le serveur (1and1) sa me met des / dans l'url.

Xtr3me je ne comprend pas votre réponse concernant le liens ver les images. vue que le dossier ce crée lorsque l'on télécharge une image.
Dans le dossier "img" du dossier "webroot" il y a le dossier qui ses créer quand j'ai télécharger une image,(2012-12) rien d'autre. je voi pas quoi mettre a la place des "xxx" vue que sa ce créer tout seul au téléchargement

L'adresse du lien et bonne, juste sa me rajoute des / dans l'url, quand je regarde avec firebug je les enlèves et l'image apparait.

<img src="<?php echo Router::webroot('img/'.$v->file); ?>" height="50">

voila ce que sa me met :

\"/img/2012-12/logofayaprmontage---3.gif\"

au lieu de :

img/2012-12/logofayaprmontage---3.gif

A la place des xxx tu peux mettres des variables si le dossiers varie ;) . Par exemple j'ai fait un système de catégorie qui crée un dossier et y enregistre toutes les images dont j'ai spécifié la catégorie. Par exemple si je mets Machin en catégorie et je mets une image que j'appellerai 2, l'image 2 s'enregistrera dans le dossier Machin et je pourrai afficher toutes les images de Machin avec une variable category que j'ai crée au préalable.
Ainsi dans le controller de ma page je charge tout les produits par exemple qui auront la catégorie Machin ce qui fait que sur ma page je n'aurai que les images de catégories Machin qui s'afficheront. Mais je pense pas que c'est ce que tu voulais, pour en revenir au sujet, tu avais sûrement mis un slash au tout début du lien relatif, ce qui faisait que le serveur cherchait deux slash et ne trouvait donc pas l'image ;) .

sly
Auteur

Xtr3me merci pour la méthode je ne connaissez pas et je pense que sa me servira surement.... Un grand merci d'avoir pris le temps de m'aidez.