Bonjour à tous,
En suivant quelques tuto ici et là (surtout là d'ailleurs, où je tiens à féliciter Grafikart pour la qualité du travail réalisé), j'ai réussi à programmer un blog en PHP grâce auquel il est possible à un administrateur d'ajouter des articles qui pourront être commentés... J'ai aussi réalisé le tuto de Grafikart sur la galerie d'images qui permet à un utilisateur d'uploader des images avec des miniatures générées automatiquement. J'ai donc pensé dans un premier temps qu'en croisant tout ça je serai en mesure de créer un blog où un utilisateur pourrait ajouter des articles avec images. Sauf que ça ne fonctionne pas tout à fait comme prévu dans la mesure où j'ai la même image (la miniature de la dernière image uploader) qui s'affiche dans tous les articles. Comment pourrai-je procéder pour lier une image uploadée à un article et forcer cette image à s'afficher avec le contenu de l'article rattaché uniquement ?

Merci d'avance pour vos réponses.

6 réponses


Cruwp
Réponse acceptée

Si je comprends bien, tu as ajouté un champs de texte pour l'URL, tu n'en a pas besoin.
Dans ta requête tu as juste à mettre dans l'URL le nom de l'image qui sera uploadée.
C'est à dire $img'name'].
Ta requête ressemblera à ça :

$sql = "INSERT INTO post(`id`,`titre`,`image`,`desc`)
         VALUES('','".$img'name']."','".$img'name']."','".$desc."')";

(c'est ma requête). Tu peux nous montrer ta requête ?

je pense que le problème est sans doute dans la requête SQL et plus précisément dans l a close WHERE, est ce que tu peut nous donner la requête (celle que tu a écrit pour insérer un nouvel article) comme ça on pourra te venir en aide

Je te conseille de partir de ta galerie puis de rajouter les champs de ton formulaire.
Ensuite dans ta BDD il te faut avoir une table avec l'ID le l'URL de ton image la variable est $img'name'] si je me souviens bien, un INSERT INTO suffit pour insérer le tout :)

grems02
Auteur

Merci pour vos réponses.
Alors... j'ai trouvé un début de solution, mais tout ça reste pour l'instant très bordélique. J'ai d'une part une page qui après avoir vérifié que l'admin est bien connecté permet d'uploader des images et créer les miniatures (basée sur le tuto PHP de grafikart) et d'autre part, une page qui permet d'ajouter des articles avec titre et contenu. Pour croiser tout ça j'ai ajouté un champ "img" dans ma table article et j'ai ajouté un champ "nom de l'image" en plus des champs "titre" et "contenu" dans le formulaire de l'article. Ainsi, si l'admin rentre le nom d'une photo qui se trouve dans le répertoire des miniatures, celle-ci s'affiche bien avec l'article, sinon, aucune image ne s'affiche.

Sur l'index qui affiche le tout ça donne quelque chose comme ça :
echo '<a href="article.php?p='.$data'article_id'].'"><h2>'.strip_tags($data'titre']).'</h2></a>';
?>
<?php if(!empty($data'img'])){
echo '<div class="min"><img src="admin/images/min/'.$data'img'].'"></div>';
}

echo '<a href="article.php?p='.$data'article_id'].'"><p>'.substr($data'contenu'],0,250).'…</p></a>';
echo '<p class="date">'.date('d/n/Y H:i',strtotime($data'date'])).'</p>';
}
(Je sais que tout ça est très brouillon, mais je débute, lol)

Le problème, c'est qu'il faut que l'administrateur saisisse à chaque fois le nom de l'image pour que celle-ci s'affiche. Auriez-vous une astuce pour que le nom de l'image uploadée soit récupérée et enregistré directement dans le champ img de la base ?

grems02
Auteur

Merci pour ta réponse Cruwp. Je n'avais pas pensé à récupérer le nom de l'image avec $img'name'] mais ça me paraît une bonne idée. Je testerai ça dès que possible. Merci encore.

grems02
Auteur

Voilà, je viens d'adapter ta solution à ma requette. J'ai fait un peu différemment. Ca donne quelque chose comme ça :

$req = $bdd->prepare('INSERT INTO articles (titre, contenu, img) VALUES (:titre, :contenu, :img)');
$req->execute(array('titre'=>$titre, 'contenu'=>$article, 'img'=>$img'name']));
$req->closeCursor();
header('Location: index.php');

Et a priori ça marche bien. Il récupère le nom de l'image, le stock dans la base MySQL, et affiche la bonne miniature dans la page index. Merci encore.