Affichage d'images depuis base MySQL

Signaler
Messages postés
24
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
16 mai 2008
-
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour,
Au commencement j'utilisai une simple interface d'admin sans insertion d'images. Mais j'ai du adapter pour pouvoir insérer des images.

Comment lier mon champ 'img_blob' (de ma table 'images') à ma news ?
Quelle syntaxe et où la placer ?

//Je transfert mes images ainsi :
$req = "INSERT INTO images ("."img_nom, img_taille, img_type, img_blob ".")
VALUES ("."'".$img_nom."', ".
"'".$img_taille."', ".
"'".$img_type."', ".
"'".addslashes ($img_blob)."') ";

//partie du code de la page apercu.php
$req = "SELECT img_id, img_type, img_blob ".
"FROM images WHERE img_id = ".$id;

//je selectionne ma news (nombre, id, ordre d'apparition).
$news->SelectNews($nb,$sort,$order);

//j'affiche mon image depuis la page apercu.php
echo "";


Jusqu'ici, les news s'insèrent correctement et les images rentrent dans ma table 'images'. Le seul problème est l'affichage de ces dernières. Je ne parviens pas à les associer à leur news repective.

Je me répète, mais c'est par souci de clarté ;)

7 réponses

Messages postés
151
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 juillet 2018

salut

je ne comprend pas ce que tu veux dire par lier tion champ img_blob a ta news...... tu veux dire l'afficher .

enfin, coté code, tu t'es un peu compliqué la vie avec les apostophe et guillemets .... essaye plutot avec ça :
//Je transfert mes images ainsi :
$req = "INSERT INTO images (img_id, img_nom, img_taille, img_type, img_blob) VALUES ('', '".$img_nom."', '".$img_taille."', '".$img_type."', '".addslashes ($img_blob)."') ";

//partie du code de la page apercu.php$req "SELECT img_id, img_type, img_blob FROM images WHERE img_id ".$id;


//je selectionne ma news (nombre, id, ordre d'apparition).
$news->SelectNews($nb,$sort,$order);

//j'affiche mon image depuis la page apercu.php
echo "";


mais il serait plus d'afficher tout le code plutot que des bribes
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

Salut !

Moi ce que j'ai du mal a capter, c'est le but d'enregistrer une image dans la bdd... c'est tres deconseille ! Pourquoi ne pas faire un repertoire sur le site et mettre tes images dedans ? Niveau place, tu y gagnerais grave (d'autant que sur certains hebergeurs, la taille de la base de donnees n'est pas la meme).

que la taille du disque).

@+
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Hello,

ouais...ceci dit, il faudrait plutôt montrer le code de apercu.php ET ce que tu insères réellement dans img_blob...bref, comment tu insères ton image dans ce champ. Et je ne parle pas de la requête, mais de ce qu'il y a avant. Bref, y a quoi dans $img_blob ?
Et apercu.php hein, important...le pb vient de là à mon avis et j'ai déjà ma petite idée...
Messages postés
24
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
16 mai 2008

Bien, bien, alors voici mon code de apercu.php :

<?php
if ( isset($_GET['id']) )
{
$id = intval ($_GET['id']);
include ("includes/config.inc.php");
$req = "SELECT img_id, img_type, img_blob ".
"FROM images WHERE img_id = ".$id;
$ret = mysql_query ($req) or die (mysql_error ());
$col = mysql_fetch_row ($ret);
if ( !$col[0] )
{
echo "Id d'image inconnu";
}
else
{
header ("Content-type: ".$col[1]);
echo $col[2];
}
}
else
{
echo "Mauvais id d'image";
}
?>



Et voici ma fonction de transfert pour img_blob :




<?php
function transfert ()
{
$ret = false;
$img_blob = '';
$img_taille = 0;
$img_type = '';
$img_nom = '';
$taille_max = 250000;
$ret = is_uploaded_file ($_FILES['fic']['tmp_name']);
if ( !$ret )
{
echo "Problème de transfert";
return false;
}
else
{

// je reçois le fichier

$img_taille = $_FILES['fic']['size'];
if ( $img_taille > $taille_max )
{
echo "Trop gros !";
return false;
}
$img_type = $_FILES['fic']['type'];
$img_nom = $_FILES['fic']['name'];
include ("includes/connexion.php");
$img_blob = file_get_contents ($_FILES['fic']['tmp_name']);

$req = "INSERT INTO images (".
"img_nom, img_taille, img_type, img_blob ".
") VALUES (".
"'".$img_nom."', ".
"'".$img_taille."', ".
"'".$img_type."', ".
// echap contenu binaire
"'".addslashes ($img_blob)."') ";

$ret = mysql_query ($req) or die (mysql_error ());
return true;
}
}
?>

Et ma fonction d'insertion de news :

<?php
if (isset($_POST['addnews'])) {

$time = date('Y-m-d H:m:s');
$title = $_POST['title'];
$poster = $_POST['poster'];
$text = nl2br($_POST['text']);

$news->AddNews($time,$title,$poster,$text);
}
?>

Ce que je cherche à faire c'est :
lorsque je rentre une actu, l'image associée s'affiche avec cette actu et non à la queue leu leu comme c'est le cas actuellement.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Ah, j'avais pas pigé ton bin's.
Déjà je pige pas pourquoi tu passes $col['1'] à apercu.php alors que selon ta requête, ce serait plutôt $col[2]...?
Messages postés
24
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
16 mai 2008

et c'est ce qu'il y'a :






header ("Content-type: ".$col[1]);
echo $col[2];
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Je parlais de ton 1er code, mais ce ne sont que des bouts donc les variables ne correspondent pas forcément.

ceci dit, le code affichant les news, donc, c'est ça :
$news->SelectNews($nb,$sort,$order);

Ok ? Et vu les paramètres, cette méthode en affiche plusieurs (nombre, $nb) ? Ou pas ?
Donc si tu fous APRES cette méthode, une balide il me semble normal que tes news s'affichent d'abord, toutes à la suite, puis tes images, toutes à la suite aussi, non ?

Enfin, ce n'est pas très clair ton truc.  Une méthode affichant une news devrait à priori afficher la/les image/s liée/s à la news aussi.