J'essaie de sauvegarder des images dans ma base de données à partir d'un formulaire HTML. J'ai écrit PHP code pour accomplir cette tâche. Le programme ne génère aucun message d'erreur, mais n'insère pas non plus de données d'image dans la base de données MySQL. Veuillez le vérifier. Ici, je partage un extrait de mon code.
/*-------------------
IMAGE QUERY
---------------*/
$file =$_FILES['image']['tmp_name'];
if(!isset($file))
{
echo 'Please select an Image';
}
else
{
$image_check = getimagesize($_FILES['image']['tmp_name']);
if($image_check==false)
{
echo 'Not a Valid Image';
}
else
{
$image = file_get_contents ($_FILES['image']['tmp_name']);
$image_name = $_FILES['image']['name'];
if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
{
echo $current_id;
//echo 'Successfull';
}
else
{
echo mysql_error();
}
}
}
/*-----------------
IMAGE QUERY END
---------------------*/
<form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
File : <input type='file' name= 'image' >
</form>
Message d'erreur Votre syntaxe SQL contient une erreur. vérifiez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de '' à la ligne 1
Tout d’abord, vous devriez vérifier si votre colonne d’image est de type BLOB !
Je ne sais rien de votre table SQL, mais si je vais essayer de créer le mien à titre d'exemple.
Nous avons des champs id
(int), image
(blob) et image_name
(varchar (64)).
Le code devrait donc ressembler à ceci (supposons que l'ID soit toujours '1' et utilisons ceci mysql_query):
$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
$image_name = addslashes($_FILES['image']['name']);
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
if (!mysql_query($sql)) { // Error handling
echo "Something went wrong! :(";
}
Vous le faites mal à bien des égards. N'utilisez pas les fonctions mysql - elles sont obsolètes! Utilisez PDO ou MySQLi . Vous devriez également penser à stocker les emplacements de fichiers sur le disque. L'utilisation de MySQL pour stocker des images est considérée comme une mauvaise idée. La manipulation d'une table SQL avec des données volumineuses telles que des images peut être problématique.
De plus, votre formulaire HTML est hors normes. Ça devrait ressembler à ça:
<form action="insert_product.php" method="POST" enctype="multipart/form-data">
<label>File: </label><input type="file" name="image" />
<input type="submit" />
</form>
Sidenote:
Lorsque vous traitez des fichiers et les stockez sous forme de BLOB, vous devez échapper les données à l'aide de mysql_real_escape_string()
, sinon une erreur de syntaxe sera générée.
Juste quelques détails supplémentaires :
`image` blob
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";
<img src="data:image/png;base64,'.base64_encode($row['image']).'">