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 89 90 91 92 93 94 95 96 97
|
<?php
session_start(); // on veut récupérer l'identifiant de connexion
error_reporting(E_ALL); ini_set('display_errors', 1);
echo "<pre>" . PHP_EOL;
/** function permettant de transférer la photo envoyée depuis le navigateur du client sur le serveur.
Il faut vérifier que le fichier est bien sur le serveur et qu'il ne dépasse pas la taille max. */
// création des variables permettant d'envoyer la photo sur le serveur
$photo_blob = '';
$photo_taille = 0; // on initialise la taille de la photo
$photo_type = '';
$photo_nom = '';
$taille_max = 300000; // 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
//mkdir('fichiers', 0777, true); // création d'un répertoire où seront stockées les photos
$uploads_dir = 'fichiers'; // affectation du répertoire crée
$photo_nom = $_FILES["photo"]["name"]; // le nom du fichier qui sera uploadé
// si la variable de session SESSION['id'] est initialisé
if(isset($_SESSION['id'])) {
$id = $_SESSION['id'];
$photo_nom = $id.'_'.$photo_nom; // on place l'identifiant du producteur devant le nom du fichier
// si toutes les variables envoyées ne sont pas vides et ont été initialisées
if(!empty($_FILES) && isset($_FILES) && isset($_POST) && !empty($_POST)){
$photo_desc = $_POST['photo_desc'];
// alors on déplace sur le serveur le fichier uploadé
$resultat = move_uploaded_file($_FILES['photo']['tmp_name'], "$uploads_dir/$photo_nom");
// on vérifie que le fichier a bien été uploadé et déplacé sur le serveur avant de l'envoyer en base
if(!$resultat) {
echo 'Problème de transfert de la photo';
} 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
$photo_type = $_FILES['photo']['type'];
// on utilise la fonction file_get_contents() permettant de passer le contenu du fichier
// directement dans une variable
$photo_blob = file_get_contents ("$uploads_dir/$photo_nom");
$photo_blob = addslashes($photo_blob); // on échappe le contenu binaire du fichier
// 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
/** 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();
//echo 'Transfert effectué';
header('Location: http://localhost/zone_producteur.php');
} 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()
//echo 'Transfert réussi !';
} // fin if(!$resultat) ... else
} else {
echo 'Tous les champs ne sont pas parvenus';
} // fin if(!empty()) ... else
} // fin if(isset($_SESSION['id']))
print '<pre>';
print_r($_FILES);
print_r($_POST); // pour le débogage
print_r($_SESSION);
print '</pre>';
?> |