[RESOLU] liaison d'une publication avec le membre qui publie

Eléphant du PHP | 79 Messages

19 sept. 2013, 14:11

Bonjour à tous et à toutes,

Je suis actuellement entrain de confectionner un système de publication pour une galerie d'oeuvre.
J'ai précédemment réussi à enregistrer une image dans un dossier ( oeuvre ) via le formulaire de publication, mais je souhaiterai également que le nom de l'image aille s'insérer ma base de donnée, pour, par la suite réaliser une liaison entre l'image poster et le membre qui l'as posté ( avec le titre de l'image, la description, etc.. )^^.

voici mon code actuelle :
<?php session_start(); ?>
<?php  require_once("connexioninscription.inc.php"); ?>

<div id="container">
<?php include("header.inc.php"); ?>
<?php include("menus.inc.php"); ?>
<div id="corpspublication">
<div id="retourselect">
<a href="publication.php" title="recharger la page"><h1 class="titre1">Publication</h1></a>
</div>
 <div id="souscorpspublication">
 <div id="encartpubl"><h3 class="textesimple">Publier une oeuvre</h3></div>
 <?php
 $query=$bdd->prepare('SELECT artiste_id, titre_oeuvre, description_oeuvre, image_oeuvre, oeuvre_categorie, oeuvre_style, oeuvre_id, date_crea, date_edit FROM oeuvre_artiste');
if (empty($_SESSION['membre_id']))
{
	echo '<p class="textewarning">'."vous devez vous connectez pour accéder à la publication oeuvre".'</p>';
}
else
{

echo '<form method="post" action="" enctype="multipart/form-data">

<label for="titre"><p class="textesimple">Titre : </p></label><input type="text" name="titre" id="oeuvretitre" />

<label for="oeuvre"><p class="textesimple">Oeuvre : </p></label><input type="file" name="imgpublication"/>

<label for="description"><p class="textesimple">Description : </p></label><input type="text" name="oeuvredescription" id="oeuvredescription" />

 <label for="categorie"><p class="textesimplesans">Catégorie</p></label><br />
       <select name="categorie" id="categorie">
           <option value="peinture">Peinture</option>
           <option value="croquis">Croquis</option>
           <option value="dessin">Dessin</option>
           <option value="autre">Autre...</option>
       </select>
	   
	   <label for="style"><p class="textesimplesans">Style</p></label><br />
       <select name="style" id="style">
           <option value="abstrait">Abstrait</option>
           <option value="pointillisme">Pointillisme</option>
           <option value="cubisme">Cubisme</option>
           <option value="autre">Autre...</option>
       </select>

<label for="datecreaoeuvre"><p class="textesimple">Date de création : </p></label><input type="text" name="datecreaoeuvre" id="datecreaoeuvre" />

<input type="submit" name="envoyer" value="envoyer"/>
</form>';

	 if (isset($_POST['envoyer'])) 
{ 
if (!empty($_FILES))
{
$imgpublication=$_FILES['imgpublication'];
$ext = strtolower(substr($imgpublication['name'],-3));
$allow_ext = array('jpg','png','gif');
if (in_array($ext,$allow_ext))
{
move_uploaded_file($imgpublication['tmp_name'],"images/oeuvres/".$imgpublication['name']);
}
}
else
{
	$erreurpublication = "Votre fichier contient une mauvaise extension, ou n'est pas une image.";
}

 if (isset($erreurpublication))
 {
	 echo $erreurpublication;
 }
 $titre = ($_POST['titre']);
 $oeuvredescription = ($_POST['oeuvredescription']);
 $style = ($_POST['style']);
 $datecreaoeuvre = ($_POST['datecreaoeuvre']);
}
}
?>
 </div>
</div>
<?php include("footer.inc.php"); ?>
</div>
Je sais qu'il faut utiliser ['image_oeuvre'] ( qui correspond au champs du nom de l'image ) pour inséré le nom dans la table, mais je ne suis pas sur ou il faut le placer :/
$imgpublication=$_FILES['image_oeuvre']['imgpublication'];
?

Merci pour votre attention et votre aide.
Créateur du site www.crobara2bal.com.

Mammouth du PHP | 790 Messages

19 sept. 2013, 15:41

Salut, tu peux tester ici:
if (in_array($ext, $allow_ext)) {
    move_uploaded_file($imgpublication['tmp_name'], "images/oeuvres/" . $imgpublication['name']);
    // Tape ta requete d'insection ici !!!
    // A ce moment la normalement tu as vérifier les infos, tu déplace l'image vers le bon dossier c'est donc aussi le bon moment pour enregistrer son nom en BDD
}
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 79 Messages

19 sept. 2013, 16:27

Salut à toi, et merci pour ton attention :),

j'ai commencer ma requête UPDATE, aucune erreur ne s'affiche, et le fichier ne s'insère ni dans le dossier d'image, ni le nom qui s'insère dans la table :/,

voici la structure de ma table 'oeuvre_artiste' Qui contient les informations d'une image posté :
-- Structure de la table `oeuvre_artiste`
--

CREATE TABLE IF NOT EXISTS `oeuvre_artiste` (
  `artiste_id` int(11) NOT NULL,
  `titre_oeuvre` varchar(100) NOT NULL,
  `description_oeuvre` text NOT NULL,
  `image_oeuvre` varchar(100) NOT NULL DEFAULT 'défaut.jpg',
  `oeuvre_categorie` int(11) NOT NULL,
  `oeuvre_style` int(11) NOT NULL,
  `oeuvre_id` int(11) NOT NULL AUTO_INCREMENT,
  `date_crea` date NOT NULL,
  `date_edit` date NOT NULL,
  PRIMARY KEY (`oeuvre_id`),
  KEY `titre_oeuvre` (`titre_oeuvre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stockage oeuvre' AUTO_INCREMENT=1 ;
et voici mon code php avec la requête : ( je coupe le formulaire etc. pour diminuer la taille du code ^^ )
$imgpublication=$_FILES['image_oeuvre']['imgpublication'];
$ext = strtolower(pathinfo($imgpublication['image_oeuvre']['name'],PATHINFO_EXTENSION));
$allow_ext = array('jpg','png','gif');
if (in_array($ext,$allow_ext))
{
move_uploaded_file($imgpublication['image_oeuvre']['tmp_name'],"images/oeuvres/".$imgpublication['image_oeuvre']['name']);

$id=($_SESSION['membre_id']);
    $query1 = $bdd->prepare('UPDATE membres SET image_oeuvre=:oeuvre, oeuvre_id=:oid WHERE artiste_id=:id');
	$query1->bindValue(':oeuvre',$imgpublication,PDO::PARAM_STR);
	$query1->bindValue(':id',$id,PDO::PARAM_INT);
	$query1->execute();
	$query1->CloseCursor();
merci encore pour ton aide :).
Créateur du site www.crobara2bal.com.

Mammouth du PHP | 2278 Messages

20 sept. 2013, 10:54

Il faudrait au minimum structurer ta bdd:
oeuvres:
id_opus : int unique autoincrement clef primaire
titre text
description text
//autres
nom_sur_disque: text ou char(20) ou du genre
auteurs
id_auteur: int unique autoincrement clef primaire
nom
etc

opus_auteurs
id_liaison : int unique autoincrement clef primaire
id_auteur: pris dans auteurs
id_opus : pris dans oeuvres

On pourrait faire de même pour les catégories...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 79 Messages

20 sept. 2013, 15:24

Re,

Concernant ma bdd, j'ai corrigé 'image_oeuvre' en supprimant : tel que definit : defaut.jpg ^^'.

Voici ma premiere table
-- Structure de la table `oeuvre_artiste`
--

CREATE TABLE IF NOT EXISTS `oeuvre_artiste` (
  `artiste_id` int(11) NOT NULL,
  `titre_oeuvre` varchar(100) NOT NULL,
  `description_oeuvre` text NOT NULL,
  `image_oeuvre` varchar(100) NOT NULL,
  `oeuvre_categorie` int(11) NOT NULL,
  `oeuvre_style` int(11) NOT NULL,
  `oeuvre_id` int(11) NOT NULL AUTO_INCREMENT,
  `date_crea` date NOT NULL,
  `date_edit` date NOT NULL,
  PRIMARY KEY (`oeuvre_id`),
  KEY `titre_oeuvre` (`titre_oeuvre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stockage oeuvre' AUTO_INCREMENT=1 ;
ma deuxième table :
-- Structure de la table `oeuvre_style`
--

CREATE TABLE IF NOT EXISTS `oeuvre_style` (
  `styoe_id` int(11) NOT NULL,
  `styoe_style` int(11) NOT NULL,
  `styoe_nomstyle` varchar(50) NOT NULL,
  `styoe_ordre` int(11) NOT NULL,
  KEY `styoe_nomstyle` (`styoe_nomstyle`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Oeuvre style';
et ma troisième table :
-- Structure de la table `oeuvre_categorie`
--

CREATE TABLE IF NOT EXISTS `oeuvre_categorie` (
  `catov_id` int(11) NOT NULL,
  `catov_categorie` int(11) NOT NULL,
  `catov_nomcat` varchar(50) NOT NULL,
  `catov_ordre` int(11) NOT NULL,
  PRIMARY KEY (`catov_id`),
  KEY `catov_nomcat` (`catov_nomcat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Categorie des oeuvres';
c'est trois table seront utilisé pour classer chaque image ajouté par tel membre etc...

La difficulté que j'ai est par rapport au code php :/ mettre en place toutes les liaisons etc :/

voici mon code php mis à jour :
<?php session_start(); ?>
<?php  require_once("connexioninscription.inc.php"); ?>
 <?php
 $query=$bdd->prepare('SELECT artiste_id, titre_oeuvre, description_oeuvre, image_oeuvre, oeuvre_categorie, oeuvre_style, oeuvre_id, date_crea, date_edit FROM oeuvre_artiste');
if (empty($_SESSION['membre_id']))
{
	echo '<p class="textewarning">'."vous devez vous connectez pour accéder à la publication oeuvre".'</p>';
}
else
{

echo '<form method="post" action="" enctype="multipart/form-data">

<legend><p class="textesimple"><b>Ajout d\'une oeuvre</b></p></legend>
<div id="encartpubldiv"><div id="encpubldiv"><label for="titre"><p class="textesimple">Titre : </label><input type="text" name="titre" id="oeuvretitre" placeholder="Choisissez un titre"/></p></div>

<legend><p class="textesimple"><b>Sélectionnez une oeuvre</b></p></legend>

<div id="encpubldiv"><label for="oeuvre"><p class="textesimple">Image : </label><input type="file" name="image_oeuvre"/></p></div>

<legend><p class="textesimple"><b>Décrivez votre oeuvre</b></p></legend>

<div id="encpubldiv"><label for="description"><p class="textesimple">Description : </label><textarea name="oeuvredescription" id="description" cols="40" rows="5" placeholder="Ecrivez une description de votre oeuvre ici !"></textarea></p></div>

<legend><p class="textesimple"><b>Classification</b></p></legend>

 <div id="encpubldiv"><label for="categorie"><p class="textesimplesans">Catégorie : </label>
       <select name="categorie" id="categorie">
           <option value="peinture">Peinture</option>
           <option value="croquis">Croquis</option>
           <option value="dessin">Dessin</option>
		   <option value="graphe">Graphe</option>
           <option value="autre">Autre...</option>
       </select></p></div>
	   
	  <div id="encpubldiv"><label for="style"><p class="textesimplesans">Style : </label>
       <select name="style" id="style">
           <option value="abstrait">Abstrait</option>
		   <option value="arturbain">Art urbain</option>
		   <option value="baroc">Baroc</option>
		   <option value="cubisme">Cubisme</option>
		   <option value="dadaisme">Dadaisme</option>
		   <option value="expressionnisme">Expressionnisme</option>
		   <option value="fauvisme">Fauvisme</option>
		   <option value="futurisme">Futurisme</option>
		   <option value="gothisme">Gothisme</option>
		   <option value="hyperrealisme">Hyperrealisme</option>
		   <option value="impressionnisme">Impressionnisme</option>
		   <option value="rococo">Rococo</option>
		   <option value="romantisme">Romantisme</option>
		   <option value="lettrisme">Lettrisme</option>
		   <option value="modernisme">Modernisme</option>
		   <option value="naturalisme">Naturalisme</option>
		   <option value="neoclassicisme">Néoclassicisme</option>
		   <option value="neogothique">Néogothique</option>
           <option value="pointillisme">Pointillisme</option>
		   <option value="popart">Popart</option>
		   <option value="photorealisme">Photoréalisme</option>
		   <option value="postimpressionnisme">Postimpressionnisme</option>
		   <option value="surréalisme">Surréalisme</option>
		   <option value="symbolisme">Symbolisme</option>
		   
           <option value="autre">Autre...</option>
       </select></p></div>

<legend><p class="textesimple"><b>Date de réalisation</b></p></legend>

<div id="encpubldiv"><label for="datecreaoeuvre"><p class="textesimple">Date de création : </label><input type="text" name="datecreaoeuvre" id="datecreaoeuvre" placeholder="AAAA-MM-JJ"/></p></div>

<input type="submit" name="envoyer" value="envoyer"/>
</div></form>';

	 if (isset($_POST['envoyer'])) 
{ 
if (!empty($_FILES))
{
$imgpublication=$_FILES['image_oeuvre'];
$ext = strtolower(pathinfo($imgpublication['image_oeuvre']['name'],PATHINFO_EXTENSION));
$allow_ext = array('jpg','png','gif','bmp','jpeg');
if (in_array($ext,$allow_ext))
{
move_uploaded_file($imgpublication['image_oeuvre']['tmp_name'],"images/oeuvres/".$imgpublication['image_oeuvre']['name']);

$id=($_SESSION['membre_id']);
    $query1 = $bdd->prepare('UPDATE membres SET image_oeuvre=:oeuvre, oeuvre_id=:oid WHERE artiste_id=:id');
	$query1->bindValue(':oeuvre',$imgpublication,PDO::PARAM_STR);
	$query1->bindValue(':id',$id,PDO::PARAM_INT);
	$query1->execute();
	$query1->CloseCursor();
}
}
else
{
	$erreurpublication = "Votre fichier contient une mauvaise extension, ou n'est pas une image.";
}

 if (isset($erreurpublication))
 {
	 echo $erreurpublication;
 }
 $titre = ($_POST['titre']);
 $oeuvredescription = ($_POST['oeuvredescription']);
 $style = ($_POST['style']);
 $datecreaoeuvre = ($_POST['datecreaoeuvre']);
}
}
?>
Merci pour votre attention et votre aide ^^,
Sincèrement.
Créateur du site www.crobara2bal.com.

Mammouth du PHP | 2278 Messages

20 sept. 2013, 16:35

Rappel:
mysql est obsolete. Il faut passer à mysqli ou PDO...
Rapidement, quand tu crées un enregistrement dans lequel il y a un champ autoincrement,
mysqli_insert_id de php donne cette valeur qu'on peut utiliser pour d'autres mises à jour ou LAST_INSERT_ID() de mysql
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 79 Messages

23 sept. 2013, 18:58

Bonjour à vous :),

J'ai avancer dans mon code, et tout fonctionne bien, les informations s'insère bien dans ma table, mais l'image ne s'enregistre plus dans mon dossier oeuvres :(

Voici mon code actuelle mis à jour :
<?php session_start(); ?>
<?php  require_once("connexioninscription.inc.php"); ?>
 <?php
if (empty($_SESSION['membre_id']))
{
	echo '<p class="textewarning">'."vous devez vous connectez pour accéder à la publication oeuvre".'</p>';
}
else
{

echo '<form method="post" action="" enctype="multipart/form-data">

<legend><p class="textesimple"><b>Ajout d\'une oeuvre</b></p></legend>
<div id="encartpubldiv"><div id="encpubldiv"><label for="titre"><p class="textesimple">Titre : </label><input type="text" name="titre_oeuvre" id="oeuvretitre" placeholder="Choisissez un titre"/></p></div>

<legend><p class="textesimple"><b>Sélectionnez une oeuvre</b></p></legend>

<div id="encpubldiv"><label for="oeuvre"><p class="textesimple">Image : </label><input type="file" name="image_oeuvre"/></p></div>

<legend><p class="textesimple"><b>Décrivez votre oeuvre</b></p></legend>

<div id="encpubldiv"><label for="description"><p class="textesimple">Description : </label><textarea name="description_oeuvre" id="description" cols="40" rows="5" placeholder="Ecrivez une description de votre oeuvre ici !"></textarea></p></div>

<legend><p class="textesimple"><b>Classification</b></p></legend>

 <div id="encpubldiv"><label for="categorie"><p class="textesimplesans">Catégorie : </label>
       <select name="oeuvre_categorie" id="categorie">
           <option value="peinture">Peinture</option>
           <option value="croquis">Croquis</option>
           <option value="dessin">Dessin</option>
		   <option value="graphe">Graphe</option>
           <option value="autre">Autre...</option>
       </select></p></div>
	   
	  <div id="encpubldiv"><label for="style"><p class="textesimplesans">Style : </label>
       <select name="oeuvre_style" id="style">
           <option value="abstrait">Abstrait</option>
		   <option value="arturbain">Art urbain</option>
		   <option value="baroc">Baroc</option>
		   <option value="cubisme">Cubisme</option>
		   <option value="dadaisme">Dadaisme</option>
		   <option value="expressionnisme">Expressionnisme</option>
		   <option value="fauvisme">Fauvisme</option>
		   <option value="futurisme">Futurisme</option>
		   <option value="gothisme">Gothisme</option>
		   <option value="hyperrealisme">Hyperrealisme</option>
		   <option value="impressionnisme">Impressionnisme</option>
		   <option value="rococo">Rococo</option>
		   <option value="romantisme">Romantisme</option>
		   <option value="lettrisme">Lettrisme</option>
		   <option value="modernisme">Modernisme</option>
		   <option value="naturalisme">Naturalisme</option>
		   <option value="neoclassicisme">Néoclassicisme</option>
		   <option value="neogothique">Néogothique</option>
           <option value="pointillisme">Pointillisme</option>
		   <option value="popart">Popart</option>
		   <option value="photorealisme">Photoréalisme</option>
		   <option value="postimpressionnisme">Postimpressionnisme</option>
		   <option value="punk">Punk</option>
		   <option value="surréalisme">Surréalisme</option>
		   <option value="symbolisme">Symbolisme</option>
		   
           <option value="autre">Autre...</option>
       </select></p></div>

<legend><p class="textesimple"><b>Date de réalisation</b></p></legend>

<div id="encpubldiv"><label for="datecreaoeuvre"><p class="textesimple">Date de création : </label><input type="text" name="date_crea" id="datecreaoeuvre" placeholder="AAAA-MM-JJ"/></p></div>

<input type="submit" name="envoyer" value="envoyer"/>
</div></form>';

	 if (isset($_POST['envoyer'])) 
{ 
if (!empty($_FILES))
{
$imgpublication=$_FILES['image_oeuvre']['name'];
$ext = strtolower(pathinfo($imgpublication,PATHINFO_EXTENSION));
$allow_ext = array('jpg','png','gif','bmp','jpeg');
if (in_array($ext,$allow_ext))
{
	$destination = ("./images/oeuvres/".$imgpublication);
move_uploaded_file($imgpublication['tmp_name'],$destination);

 $id=($_SESSION['membre_id']);
 $titre = ($_POST['titre_oeuvre']);
 $oeuvre_description = ($_POST['description_oeuvre']);
 $cat = ($_POST['oeuvre_categorie']);
 $styl = ($_POST['oeuvre_style']);
 $datecreaoeuvre = ($_POST['date_crea']);
try
{
 $req = $bdd->prepare('INSERT INTO oeuvre_artiste (artiste_id, titre_oeuvre, description_oeuvre, image_oeuvre, oeuvre_categorie, oeuvre_style, date_crea, date_edit) VALUES(:artiste_id,:titre_oeuvre,:description_oeuvre,:image_oeuvre,:oeuvre_categorie,:oeuvre_style,:date_crea, NOW())');
 
$req->bindValue(':artiste_id', $id, PDO::PARAM_INT);
$req->bindValue(':titre_oeuvre', $titre, PDO::PARAM_STR);
$req->bindValue(':description_oeuvre', $oeuvre_description, PDO::PARAM_STR);
$req->bindValue(':image_oeuvre', $imgpublication, PDO::PARAM_STR);
$req->bindValue(':oeuvre_categorie', $cat, PDO::PARAM_INT);
$req->bindValue(':oeuvre_style', $styl, PDO::PARAM_INT);
$req->bindValue(':date_crea', $datecreaoeuvre, PDO::PARAM_INT);

$req->execute();
 }
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
}
}
else
{
	$erreurpublication = "Votre fichier contient une mauvaise extension, ou n'est pas une image.";
}

 if (isset($erreurpublication))
 {
	 echo $erreurpublication;
 }

}
}
?>
Merci pour votre attention et votre aide :)
Créateur du site www.crobara2bal.com.

Eléphant du PHP | 79 Messages

24 sept. 2013, 18:25

Bonjour à tous et à toutes,

J'ai résolu mon erreur :
move_uploaded_file($_FILES['image_oeuvre']['tmp_name'],$destination);
au lieu de
move_uploaded_file($imgpublication['tmp_name'],$destination);
Créateur du site www.crobara2bal.com.