1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
<?php
// fonction permettant de transférer la photo envoyée depuis le navigateur du client sur le serveur
// nous devons vérifier que le fichier est bien sur le serveur et qu'il ne dépasse pas la taille max.
//session_start(); Notice: A session had already been started - ignoring session_start()
// création des variables permettant d'envoyer la photo sur le serveur
$estEnvoye = false; // booléen nous permettra de savoir si le fichier a été envoyé ou pas
$photo_blob = '';
$photo_taille = 0; // on initialise la taille de la photo
$photo_type = '';
$photo_nom = '';
$taille_max = 250000; // taille maximale de la photo
// nous effectuons un test sur l'envoi du fichier avec la variable superglobale $_FILES
// Attention : $_FILES[][] est un tableau et non une fonction
// si la photo est téléchargée elle se trouvera dans le répertoire temporaire C:\xampp\tmp
$estEnvoye = is_uploaded_file($_FILES['photo']['tmp_name']); // on réaffecte la valeur de la variable booléene
if(isset($_POST['desc']) && !empty($_POST['desc']) && isset($_FILES['photo']['name']) && !empty($_FILES['photo']['name']) && isset($_SESSION['id'])) {
$id = $_SESSION['id']; // id du producteur stocké en base
$photo_desc = $_POST['photo_desc'];
if(!$estEnvoye) {
// on affiche un message
$reponse = 'Problème de transfert de la photo';
echo $reponse;
} else {
// la photo a bien été reçue, on réaffecte la valeur de la taille de la photo
$photo_taille = $_FILES['photo']['size'];
// on vérifie la taille de la photo
if($photo_taille > $taille_max) {
echo 'La photo est trop volumineuse !';
}
// on affecte le type de la photo, et le nom de cette dernière
$photo_type = $_FILES['photo']['type'];
$photo_nom = $_FILES['photo']['name'];
// on inclus le script de connexion à la base de données
include_once 'includes/inc_connexion.php';
$conn=opendb_conn(); // on se connecte à la Base de données
// on utilise la fonction file_get_contents() permet de passer le contenu du fichier
// directement dans une variable
$photo_blob = file_get_contents ($_FILES['photo']['tmp_name']);
$photo_blob = addslashes($photo_blob); // on échappe le contenu binaire du fichier
/** partie traitant l'insertion des photos dans la table des photos */
// création de la requête
$req =
"insert into photos(photo_id,photo_nom,photo_taille,photo_type,photo_desc,photo_blob,idproducteur)
values('',:photo_nom,:photo_taille,:photo_type,:photo_desc,:photo_blob,:idproducteur)";
// on prépare le traitement de la requête
$stm=$conn->prepare($req);
// Tentative d'insertion en base d'une photo en utilisant le mode transactionnel
// bloc try ... catch()
try {
$conn->beginTransaction();
// on associe les marqueurs nommés avec les variables crées plus haut
$stm->bindParam(':photo_nom', $photo_nom, PDO::PARAM_STR);
$stm->bindParam(':photo_taille', $photo_taille, PDO::PARAM_STR);
$stm->bindParam(':photo_type', $photo_type, PDO::PARAM_STR);
$stm->bindParam(':photo_desc', $photo_desc, PDO::PARAM_STR);
$stm->bindParam(':photo_blob', $photo_blob, PDO::PARAM_STR);
$stm->bindParam(':idproducteur', $id, PDO::PARAM_INT);
// exécution de la requête
$stm->execute();
// on commit
$conn->commit();
$reponse = 'ok'; // pour le test de l'appel Ajax avec JSON
} catch(PDOException $e) {
// on rollback si cela se passe mal
$conn->rollback();
// on affiche un message d'erreur
print '</br>';
print "Erreur lors de l'insertion en base !: " . $e->getMessage() . "</br>";
} // fin bloc try ... catch()
} // fin if() ... else
} else {
$reponse = 'Tous les champs ne sont pas parvenus';
} // fin if() ... else
$array['reponse'] = $reponse;
echo json_encode($array); // retourne le représentation JSON d'une valeur
print '<pre>';
print_r($_FILES);
print_r($_POST); // pour le débogage
print '</pre>';
?> |
Partager