Bonsoir à tous,
En croyant que j'avais trouvé mon problème, j'ai mis mon ancien poste en résolu, j'ai voulu changer la taille de l'image en modifiant dans mon code et rebolote le même problème !

Voici un récapitulatif : j'upload une image nom.png avec une fonction resizedImage il en créer une deuxième en l'appellant nom_230x135.png, jusque là pas de soucis mon fichier existe bien dans img/works/nom_230x135.png.

Le soucis c'est que l'image ne s'affiche pas sur le site, en inspectant mes éléments, il met img/works/_230x135. il manque donc le nom et l'extension. Voici mon code :

La fonction resizedName, ici apparemment il n'y à pas d'erreur :

function resizedName($file, $width, $height){
    $info = pathinfo($file);
    $return = '';
    if($info['dirname'] != '.'){
        $return .= $info['dirname'] . '';
    }
    $return .= $info['filename'] . "_$width". "x$height." . $info['extension'];
    return $return;
    var_dump($info['dirname']);
}

l'envoie de l'image :

$work_id = $db->quote($_GET['id']);
        $files = $_FILES['images'];
        $images = array();
        require '../lib/image.php';
        foreach($files['tmp_name'] as $k => $v){
            $image = array(
                'name' => $files['name'][$k],
                'tmp_name' => $files['tmp_name'][$k]
            );
            $extension = pathinfo($image['name'], PATHINFO_EXTENSION);
            if(in_array($extension, array('jpg','png'))){
                $db->query("INSERT INTO images SET work_id=$work_id");
                $image_id = $db->lastInsertId();
                $image_name = $image_id . '.' . $extension;
                move_uploaded_file($image['tmp_name'], '../img/works/' . $image_name);
                resizeImage('../img/works/' . $image_name, 220,135);
                $image_name = $db->quote($image_name);
                $db->query("UPDATE images SET name=$image_name WHERE id=$image_id");
            }
        }

index.php :

<div class="row">
            <?php foreach ($works as $k => $work): ?>
                <div class="col-sm-3">
                    <a href="<?= WEBROOT; ?>realisation/<?= $work['slug']; ?>">
                        <img src="img/works/<?= resizedName($work['image_name'], 220, 135); ?>" alt="">
                        <?php var_dump($work['image_name']);?>
                        <h2><?= $work['name']; ?></h2>
                    </a>
                    <em><?php echo "{$work['category_name']}"; ?></em>
                </div>
            <?php endforeach ?>

Comme vos m'aviez conseillé je fait un var_dump($work['image_name']); et il me dit qu'il est vide. Le fichier existe bien à l'endroit souhaité.

Désolé pour le double sujet et je vous remercie de votre aide qui m'aide toujours autant !

2 réponses


humanoid89
Auteur
Réponse acceptée

J'ai trouvé le véritable soucis, c'est la base de donnée qui n'avait pas mis à jour l'id de l'image dans la table works. Je penses que c'est dû d'un beug de mysql parce que j'ai modifier une autre image, il a bien pris en compte. Il fallait le trouvé, moi qui m'acharnait sur mon code ! :)

Pour information, avant que vous me le demandez, dans index.php il y a ce code php :

$works = $db->query("
    SELECT works.name, works.id, works.slug, categories.name as category_name, images.name as image_name
    FROM works
    LEFT JOIN images ON images.id = works.image_id
    LEFT JOIN categories ON categories.id = works.category_id
")->fetchAll();

Pour simplifier un peu, pour prendre en compte seulement ceux qui nous intéresse :

$works = $db->query(" SELECT images.name as image_name FROM works LEFT JOIN images ON images.id = works.image_id")->fetchAll();

C'est pourquoi je lis dans $work['image_name'];