Télécharger des images vers une base de données MySQL à l'aide de PHP
L'insertion d'images dans une base de données MySQL à l'aide de PHP nécessite plusieurs étapes. Résolvons les problèmes dans le code que vous avez fourni :
1. Structure de la table de base de données :
Assurez-vous que votre table de base de données comporte une colonne définie comme type BLOB ou MEDIUMBLOB pour stocker les données d'image.
2. Déclarations préparées :
Au lieu d'utiliser la fonction obsolète mysql_query(), passez aux instructions préparées en utilisant PDO ou MySQLi. Les instructions préparées empêchent les vulnérabilités d'injection SQL.
3. Gestion appropriée des images :
Le code actuel récupère les données de l'image directement à partir du fichier temporaire. Il s’agit d’un risque pour la sécurité. Utilisez plutôt file_get_contents() avec l'option FILE_BINARY pour vous assurer que le contenu binaire est correctement géré.
4. Désinfection :
Désinfectez les données de l'image à l'aide de addlashes() ou mysqli_real_escape_string() pour empêcher l'injection SQL.
5. Requête d'insertion correcte :
La requête d'insertion doit correspondre à la structure de la table et nettoyer les données en conséquence. Voici une version corrigée :
$stmt = $mysqli->prepare("INSERT INTO product_images (id, image, image_name) VALUES (?, ?, ?)"); $stmt->bind_param("sis", 1, $image, $image_name); $image = file_get_contents($_FILES['image']['tmp_name'], FILE_BINARY); $image_name = addslashes($_FILES['image']['name']); if ($stmt->execute()) { echo "Image uploaded successfully"; } else { echo "Error: " . $mysqli->error; }
6. Formulaire HTML :
Le formulaire HTML doit utiliser l'attribut enctype="multipart/form-data", qui permet de transmettre des données binaires dans la requête. De plus, utilisez une balise de fermeture appropriée pour le formulaire