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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
<?php
/**
Script effectuant le traitement de l'insertion dans la table des annonces de l'annonce publiée depuis le formulaire par le membre
Il faudra par ailleurs envoyer un email au membre afin de lui communiquer la réception puis la validation ou pas de son annonce.
Il faudra également vérifier la validité des autres informations saisis par l'utilisateur
**/
session_start();
error_reporting(E_ALL); ini_set('display_errors', 1);
//echo "<pre>" . PHP_EOL;
require_once 'includes/inc_connexion.php'; // pour se connecter à la Base de données
include 'includes/inc_identification.php'; // pour accéder à l'identifiant de connexion
$conn=opendb_conn(); // on se connecte à la Base de données
// variables correspondant aux champs présents en base
// utilisation de l'opérateur ternaire ?: pour assigner les variables aux valeurs des champs du formulaire
$id = (isset($_SESSION['id']))?$_SESSION['id']:null; // id du producteur stocké en base
$titre = !(empty($_POST['titre']))?$_POST['titre']:null; // pour tester l'existence et que le champ est non vide
$description = !(empty($_POST['description']))?$_POST['description']:null;
$taille = !(empty($_POST['taille']))?$_POST['taille']:null;
$marque = !(empty($_POST['marque']))?$_POST['marque']:null;
$couleur = !(empty($_POST['couleur']))?$_POST['couleur']:null;
$prix = !(empty($_POST['prix']))?$_POST['prix']:null;
$valide = 0; // l'annonce n'est pas encore validée
// nous effectuons un test sur l'envoi du fichier avec la variable superglobale $_FILES
// Attention : $_FILES[][] est un tableau et non une fonction
//mkdir('photos_annonces', 0777, true); // création d'un répertoire où seront stockées les vignettes et la photo principale
$uploads_dir = 'photos'; // affectation du répertoire crée
// création des variables permettant d'envoyer la photo et les vignettes 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
// si les variables envoyées sont vides
if(empty($_POST)) {
echo 'erreur'; // utilisé comme callback dans firebug
}
// si toutes les variables envoyées ne sont pas vides et ont été initialisées
if(isset($_POST)){
// requête pour l'insertion de l'annonce en base
$req =
"insert into annonces(annonce_id,titre,description,taille,marque,couleur,prix,valide,id_membre)
values(null,:titre,:description,:taille,:marque,:couleur,:prix,:valide,:id_membre)";
// on prépare le traitement de la requête
$stm=$conn->prepare($req);
// Tentative d'insertion en base d'une (nouvelle) publication 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(':titre', $titre, PDO::PARAM_STR);
$stm->bindParam(':description', $description, PDO::PARAM_STR);
$stm->bindParam(':taille', $taille, PDO::PARAM_STR);
$stm->bindParam(':marque', $marque, PDO::PARAM_STR);
$stm->bindParam(':couleur', $couleur, PDO::PARAM_STR);
$stm->bindParam(':prix', $prix, PDO::PARAM_INT);
$stm->bindParam(':valide', $valide, PDO::PARAM_INT);
$stm->bindParam(':id_membre', $id, PDO::PARAM_INT);
// exécution de la requête
$stm->execute();
// on commit
$conn->commit();
echo 'enregistré'; // utilisé comme callback dans firebug
} 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()
// on récupére l'id de l'annonce insérée avec succès par le membre, cet id nous servira comme nom de répertoire
$sql = "select annonce_id from annonces where id_membre ='".$id."'";
// on prépare le traitement de la requête
$stmt=$conn->prepare($sql);
// exécution de la requête
$stmt->execute();
// creation de la variable $result recuperant la ligne et la retournant EN TANT QU'OBJET
$result=$stmt->fetch(PDO::FETCH_OBJ);
$annonce_id=$result->annonce_id; //récupération de la valeur de l'id de l'annonce en base
$stmt->closeCursor(); // fermeture du curseur
} // fin if(isset($_POST))
// Traitement de l'upload des images de l'annonce
if(!empty($_FILES) && isset($_FILES)) {
/**
objectif :
Lors de l'upload des images (photo principale + vignettes) nous voulons que les images soient
stockées dans un répertoire qui aura pour nom l'id de l'annonce.
**/
// on vérifie qu'il s'agit bien d'une image donc avec l'extension adéquate et non d'un fichier quelconque
$photo_principale = $_FILES['photoPrincipale']['name']; // le nom du fichier qui sera uploadé
$photo_add1 = $_FILES['photo_add1']['name'];
$photo_add2 = $_FILES['photo_add2']['name'];
$photo_add3 = $_FILES['photo_add3']['name'];
// on récupère l'extension du fichier uploadé et on la met en minuscule
// on stockera toutes ces extensions dans un tableau
$ext = array();
array_push($ext, strtolower(substr($photo_principale,-3)), strtolower(substr($photo_add1,-3)),
strtolower(substr($photo_add2,-3)), strtolower(substr($photo_add3,-3)));
// on place les extensions dans un tableau
$allow_ext = array("jpg", "png", "gif");
// si l'extension du fichier uploadée est dans le tableau
if(in_array($ext, $allow_ext)) {
// alors on déplace sur le serveur tous les fichiers uploadés l'un après l'autre
$photo_principale = move_uploaded_file($_FILES['photoPrincipale']['tmp_name'], "$uploads_dir/$annonce_id");
$photo_add1 = move_uploaded_file($_FILES['photo_add1']['tmp_name'], "$uploads_dir/$annonce_id");
$photo_add2 = move_uploaded_file($_FILES['photo_add2']['tmp_name'], "$uploads_dir/$annonce_id");
$photo_add3 = move_uploaded_file($_FILES['photo_add3']['tmp_name'], "$uploads_dir/$annonce_id");
} else {
// on affiche un message d'erreur qui sera utilisé dans le fichier afficherZonePhotos.js
echo 'erreur';
} // fin if() ... else
// on vérifie que le répertoire d'upload n'est pas vide donc que les fichiers ont bien été uploadés
include_once('includes/inc_dossierEstVide.php');
if(is_empty_dir('$uploads_dir/$annonce_id')) {
echo 'Problème de transfert des images !';
//header('Location: http://localhost/clothesBusiness/index.php'); // on reste sur la page
} else {
// la photo a bien été reçue, on réaffecte la valeur de la taille des images
$photoPrinc_taille = $_FILES['photoPrincipale']['size'];
$photoAdd1_taille = $_FILES['photo_add1']['size'];
$photoAdd2_taille = $_FILES['photo_add2']['size'];
$photoAdd3_taille = $_FILES['photo_add3']['size'];
// on vérifie la taille de la photo
if(($photoPrinc_taille || $photoAdd1_taille || $photoAdd2_taille || $photoAdd3_taille) > $taille_max) {
echo 'Les photos sont trop volumineuses, vérifiez le poids des photos !';
}
// on affecte le type de la photo
$photoPrinc_type = $_FILES['photoPrincipale']['type'];
$photoAdd1_type = $_FILES['photo_add1']['type'];
$photoAdd2_type = $_FILES['photo_add2']['type'];
$photoAdd3_type = $_FILES['photo_add3']['type'];
// on utilise la fonction file_get_contents() permettant de passer le contenu du fichier
// directement dans une variable
$photoPrinc_blob = file_get_contents ("$uploads_dir/$photo_principale");
$photoPrinc_blob = addslashes($photoPrinc_blob); // on échappe le contenu binaire du fichier
$photoAdd1_blob = file_get_contents ("$uploads_dir/$photo_add1");
$photoAdd1_blob = addslashes($photoAdd1_blob);
$photoAdd2_blob = file_get_contents ("$uploads_dir/$photo_add2");
$photoAdd2_blob = addslashes($photoAdd2_blob);
$photoAdd3_blob = file_get_contents ("$uploads_dir/$photo_add3");
$photoAdd3_blob = addslashes($photoAdd3_blob);
}
} // fin if(!empty($_FILES) && isset($_FILES)
//pour les tests
print '<pre>';
print_r($_FILES);
print_r($_POST); // pour le débogage
print_r($_SESSION);
print '</pre>';
?> |
Partager