|
Php/Mysql : Divers : Placer une image dans une base sql
 | Php/Mysql >> Divers >> Placer une image dans une base sql | 
|  | Le 07/05/2003, ocus a écrit : |
Voici une astuce sympa pour stocker des images dans une base des données plutot que de les stocker en dur et de mettre dans la base un lien vers les images...
Configuration de la table appellée "image" dans la base "test" :
CREATE TABLE image (
image_id int(10) unsigned NOT NULL auto_increment,
image_type varchar(50) NOT NULL default '',
image longblob NOT NULL,
image_size bigint(20) NOT NULL default '0',
image_name varchar(255) NOT NULL default '',
image_date datetime NOT NULL default '0000-00-00 00:00:00',
UNIQUE KEY image_id (image_id)
);
Le script se constitue de 2 fichiers (index.php et image.php) : |
|  | Voici le script : |
//index.php
<?php
// database connection
$conn = mysql_connect("localhost", "root", "") OR DIE (mysql_error());
@mysql_select_db ("test", $conn) OR DIE (mysql_error());
// Si un fichier a été choisi et envoyé
if ($_FILES) {
$image_types = Array ("image/bmp",
"image/jpeg",
"image/pjpeg",
"image/gif",
"image/x-png");
//ouverture du fichier temporaire envoyé en mode binaire
$file = fopen ($_FILES["userfile"]["tmp_name"], "rb");
//récupere la taille du fichier temporaire
$size = filesize ($_FILES["userfile"]["tmp_name"]);
//lit le contenu du fichier temporaire
$content = fread ($file, $size);
//protege le contenu par des / /
$userfile = addslashes ($content);
//recupere le nom du fichier
$file_name = $_FILES["userfile"]["name"];
//recupere la taille du fichier
$file_size = $_FILES["userfile"]["size"];
//recupere le type du fichier
$file_type = $_FILES["userfile"]["type"];
//si le type de fichier est égal a un de ceux contenu dans le tableau $image_type
if (in_array (strtolower ($file_type), $image_types)) {
//construction et execution de la requète pour ajouter une image
$sql = "INSERT INTO image (image_type, image, image_size, image_name, image_date) ";
$sql.= "VALUES (";
$sql.= "'{$file_type}', '{$userfile}', '{$file_size}', '{$file_name}', NOW())";
@mysql_query ($sql, $conn);
//recharge la page index.php
header("Location:".$_SERVER["PHP_SELF"]);
exit();
}
}
// si le lien vers l'image ou pour supprimer l'image a été cliqué
if ($_GET) {
$iid = $_GET["iid"];
$act = $_GET["act"];
switch ($act) {
// si cliqué sur le lien "remove"
case 'rem':
//construction et execution de la requète pour supprimer l'image selectionnée
$sql = "DELETE FROM image WHERE image_id=$iid";
@mysql_query ($sql, $conn);
//recharge la page index.php
header("Location: index.php");
exit();
break;
//si cliqué sur lien vers image
default:
//affichage de l'image par l'intermédiaire du fichier image.php
print "<img src='image.php?iid=$iid'>";
break;
}
}
?>
<html>
<head>
<title>Storing Images in DB</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
Select Image File: <input type="file" name="userfile" size="40"><input type="submit" value="submit">
</form>
<?php
//construction et exécution de la requete pour choisir toutes les images présentes dans la base
$sql = "SELECT * FROM image ORDER BY image_date DESC";
$result = mysql_query ($sql, $conn);
//s'il y a des images
if (mysql_num_rows($result)>0) {
$i=0;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$i++;
//affiche un lien vers l'image et diverses infos sur elle
$str = $i.". ";
$str .= "<a href="index.php?act=no&iid=".$row["image_id"]."">".$row["image_name"]."</a> ";
$str .= "[".$row["image_date"]."] ";
$str .= "[".$row["image_size"]."] ";
$str .= "[<a href="index.php?act=rem&iid=".$row["image_id"]."">Remove</a>]<br>";
print $str."<br>";
}
}
?>
</body>
</html>
//image.php
<?php
$conn = mysql_connect("localhost", "root", "") OR DIE (mysql_error());
@mysql_select_db ("test", $conn) OR DIE (mysql_error());
//choisi l'image selectionnée
$sql = "SELECT * FROM image WHERE image_id=".$_GET["iid"];
$result = mysql_query ($sql, $conn);
if (mysql_num_rows ($result)>0) {
$row = @mysql_fetch_array ($result);
//prend le type de l'image
$image_type = $row["image_type"];
//prend le contenu de l'image en mode binaire
$image = $row["image"];
//spécifie l'entete HTTP
header("Content-type: $image_type");
//affiche le contenu de l'image
echo $image;
}
?>
|
|
|  | Plus : | | |  | 6447 lectures |
| |
| | |
|  | Ajouter une astuce | 
| | Pour ajouter une astuce, c'est très simple ! Il vous suffit de remplir ce formulaire. |
|  | Ajouter un commentaire | 
| |
|
|
|