Comment afficher toutes les images stockées dans une base de données
Je fais une galerie qui utilise une base de données MySQL (ouais je sais c'est une mauvaise pratique, mais c'est l'exigence pour le moment). Je peux télécharger des images multiples, mais je vais avoir des difficultés pour afficher toutes les images stockées dans la base de données. Le FORMULAIRE permet de cinq images à télécharger. Ensuite, l'utilisateur doit procéder à une autre page où toutes les images dans la base de données (y compris celles téléchargées récemment) sera affiché, ainsi que la description des images. J'ai un code déjà, mais celui qui va travailler sur l'affichage ne fonctionne pas ou que je pense est faux.
Voici le code du formulaire:
<html>
<head>
<title> Upload image</title>
</head>
<body>
<div align="center">
<form action="fUpload.php" method="POST" enctype="multipart/form-data">
All forms must be filled. <br />
File: <br />
<input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />
<input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />
<input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />
<input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />
<input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />
<input type="submit" value="Upload image" />
</form>
</div>
</body>
</html>
Voici le script de téléchargement:
<?php
//connect to the database//
$con = mysql_connect("localhost","root", "");
if(!$con)
{
die('Could not connect to the database:' . mysql_error());
echo "ERROR IN CONNECTION";
}
$sel = mysql_select_db("imagedatabase");
if(!$sel)
{
die('Could not connect to the database:' . mysql_error());
echo "ERROR IN CONNECTION";
}
//file properties//
$file = $_FILES['image']['tmp_name'];
echo '<br />';
/*if(!isset($file))
echo "Please select your images";
else
{
*/for($count = 0; $count < count($_FILES['image']); $count++)
{
//$image = file_get_contents($_FILES['image']['tmp_name']);
$image_desc[$count] = addslashes($_POST['imageDescription'][$count]);
$image_name[$count] = addslashes($_FILES['image]']['name'][$count]); echo '<br \>';
$image_size[$count] = @getimagesize($_FILES['image']['tmp_name'][$count]);
$error[$count] = $_FILES['image']['error'][$count];
if($image_size[$count] === FALSE || ($image_size[$count]) == 0)
echo "That's not an image";
else
{
//Temporary file name stored on the server
$tmpName[$count] = $_FILES['image']['tmp_name'][$count];
//Read the file
$fp[$count] = fopen($tmpName[$count], 'r');
$data[$count] = fread($fp[$count], filesize($tmpName[$count]));
$data[$count] = addslashes($data[$count]);
fclose($fp[$count]);
//Create the query and insert
//into our database.
$results = mysql_query("INSERT INTO images( description, image) VALUES ('$image_desc[$count]','$data[$count]')", $con);
if(!$results)
echo "Problem uploding the image. Please check your database";
//else
//{
echo "";
//$last_id = mysql_insert_id();
//echo "Image Uploaded. <p /> <p /><img src=display.php? id=$last_id>";
//header('Lcation: display2.php?id=$last_id');
}
//}
}
mysql_close($con);
header('Location: fGallery.php');
?>
Et, enfin, celui qui doit s'afficher:
<html>
<body>
</body>
<?php
//connect to the database//
mysql_connect("localhost","root", "") or die(mysql_error());
mysql_select_db("imagedatabase") or die(mysql_error());
//requesting image id
$id = addslashes($_REQUEST['id']);
$image = mysql_query("SELECT * FROM images WHERE id = $id");
while($datum = mysql_fetch_array($image, MYSQL_ASSOC))
{
printf("Description %s $image = $image['image'];
header("Content-type: image/jpeg");
}
mysql_close();
?>
Votre aide est très appréciée. J'ai besoin de mal à passer.
- eh bien, au moins vous êtes absent de s'échapper avant que les guillemets doubles printf... alors vous avez besoin d'appeler $datum['image']...
- que voulez-vous dire? 😀
Vous devez vous connecter pour publier un commentaire.
De ce que je comprends de votre message, c'est que le téléchargement et le stockage n'est pas un problème, mais en montrant les images. C'est probablement parce que vous êtes à l'aide de revendeurs à valeur ajoutée qui ne sont pas ensemble, donc pas de résultats peut être trouvé dans la base de données. Si j'ai mal compris, faites le moi savoir.
Aussi regarder ce que Prof83 dit. Ignorer mon post si votre script fonctionne avec une seule image.
Dernière mais pas moins, si vous êtes à l'aide de différents types de fichiers, aussi écho le bon format MIME dans l'en-tête.
Mise à jour
J'ai combiné les deux réponses.
Modifier votre boucle:
Créer un nom de page img.php
Ok, vous ne pouvez pas afficher plusieurs images dans une image/jpeg page...
Vous êtes dit au navigateur que la page est image/jpeg (en d'autres termes, la page est UNE IMAGE), mais vous êtes en écho à de multiples données d'image
Vous devriez plutôt utiliser la page de la galerie pour afficher toutes les images comme ceci:
et dans img.php: