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 98 99
|
<?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;
/** script permettant de transférer la photo envoyée depuis le navigateur du client sur le serveur de Base de données.
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();
/** rappelle-toi : une variable ne passe d'une page à une autre que par les superglobales.
Dans ton cas, tu définis $id, et hop, tu changes de page,
(donc de script, et donc d'exécution). Dommage, ta variable est perdue. */
// il faut effectuer un refresh de la page pour rester sur celle-ci, et non un Location qui nous envoi sur le script ci-présent
header('refresh:0.5;url=http://localhost/zone_producteur.php?id='.$id); // il faut passer en GET pour récupérer la variable de session $id
} 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(!$resultat) ... else
} else {
echo 'Tous les champs ne sont pas parvenus';
} // fin if(!empty()) ... else
} // fin if(isset($_SESSION['id']))
/* pour les tests
print '<pre>';
print_r($_FILES);
print_r($_POST); // pour le débogage
print_r($_SESSION);
print '</pre>';
*/
?> |
Partager