Bonjour à tous et à toutes,

Je suis actuellement entrain d'essayer de confectionner une "galerie d'art" dynamique, liant les informations de l'oeuvre (image) publié au membre qui la posté.

J'aurais besoin d'aide pour la mise en forme du code php :/,

Voici mon code actuelle de ma page publication.php

<?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" /></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="imgpublication"/></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="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="pointillisme">Pointillisme</option>
           <option value="cubisme">Cubisme</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" /></p></div>
<input type="submit" name="envoyer" value="envoyer"/>
</div></form>';
     if (isset($_POST'envoyer'])) 
{ 
if (!empty($_FILES))
{
$imgpublication=$_FILES'image_oeuvre']'imgpublication'];
$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']);
}
}
?>

voici ma table oeuvre_artiste, qui récupère les informations de l'upload d'une image.

-- 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 ;

précédemment, le système que j'avais mis en place permettait de télécharger l'image a partir du formulaire directement dans un dossier "oeuvres", j'ai donc tenté d'insérer le nom de l'image uploader dans ma table (bdd) mais ça ne fonctionne pas :/ et aucun message d'erreur de s'affiche après l'envoie du formulaire d'upload qui ne fonctionne pas ^^'.

Merci pour votre attention et votre aide :).

11 réponses


Benjamin Derepas
Réponse acceptée

Dans ta fonction love_upload_file tu doit renseigner le name de l'input file + celui de la variable !
Ex : ton input file à le name image_oeuvre et dans ton upload tu fais $imgpublication'tmp_name'],$destination.
Petite erreur, se doit être :

move_uploaded_file($imgpublication'image_oeuvre']'tmp_name'],$destination);

En toute logique, l'upload devrait fonctionner !

Bonjour,
Tout d'abord, il y a une ligne que je ne comprend pas ...

$_FILES'image_oeuvre']'imgpublication']

d'où sors tu sa ?

As tu essayer de faire un try{} catch() de ta requête ?
L'un des interets de PDO est qu'il gère la gestion des erreurs, tu aura peut être plus d'information avec sa

Reverb
Auteur

Salut à toi :),

Je viens d'appliquer ton conseil :

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,:date_edit)');

 $req->bindValue(':artiste_id', $id);
    $req->bindValue(':titre_oeuvre', $titre);
    $req->bindValue(':description_oeuvre', $oeuvre_description);
    $req->bindValue(':oeuvre_categorie', $cat);
    $req->bindValue(':oeuvre_style', $styl);
    $req->bindValue(':date_crea', $datecreaoeuvre);
 $req->execute();
 }
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}

Mais aucune erreur ne s'affiche ^^'

Merci pour ton attention et ton aide :).

Regarde :

<input type="file" name="imgpublication"/>

Et dans ton code php :

$imgpublication=$_FILES'image_oeuvre']'imgpublication'];

Essais de debuger le tableau $_FILES ...
Il doit être sous la forme $_FILE'name_input']'informations divers']
Or ici, tu appelle un tableau qui n'existe pas je pense

Et si je peut me permettre , je te déconseille de faire tes if de la sorte ...
mais plutot :

<?php if(condition):?>
<ton code html>
<?php endif;?>

Tu gagnera en lisibilité et ça peut aussi éviter les erreurs de guillemet etc

Reverb
Auteur

Salut à toi désolé je ne t'ai pas envoyé la mise a jour du code complet,

Voici mon code actuelle :

<?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'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=($_POST($_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,:date_edit)');

 $req->bindValue(':artiste_id', $id);
    $req->bindValue(':titre_oeuvre', $titre);
    $req->bindValue(':description_oeuvre', $oeuvre_description);
    $req->bindValue(':oeuvre_categorie', $cat);
    $req->bindValue(':oeuvre_style', $styl);
    $req->bindValue(':date_crea', $datecreaoeuvre);
 $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 encore pour ton attention et ton aide :), Sincèrement ^^.

PS: merci pour ton conseil elseif je vais tenter de mettre ça en application :)

Essais d'afficher chaque variable , pour voir si les valeurs sont correctes .
Le $_POST($_SESSION'membre_id']) est assez spéciale je trouve ...

Reverb
Auteur

Re et merci encore pour ton aide benjamin :),

Effectivement ^^'

$id=($_POST($_SESSION'membre_id']));

n'as pas l'air de fonctionner ^^',

J'ai également essayé :

$sess=($_SESSION'membre_id']);
$id=($_POST($sess));

mais je suppose que cette phrase de code doit être assez spéciale aussi ^^'.

J'ai également essayé tout simplement :

$id=($_SESSION'membre_id']);

( j'obtient l'erreur suivante : Erreur : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens )

j'ai le souvenir que pour une $_SESSION, il n'est pas utile d'ajouter une requête correspondant à la variable :/

Merci encore du temps que tu consacre à m'aider :) sincèrement ^^

L'un des interets des variables de sessions, est que l'on peut garder en mémoire pour un temps x , le contenu des variables.
Utilises si le traitement par exemple se fait sur plusieurs pages différentes, ou pour faire par exemple une "preview" .

Pour ton erreur, c'est au niveau du contenu de ta variable.

Reverb
Auteur

Re,

Tout fonctionne correctement :) ou enfin presque ^^' l'insertion des informations dans la table s'effectue parfaitement en revanche, l'image ne se transfère pas dans le dossier oeuvres :/,

Voici mon code 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 encore pour ton aide ^^.

Reverb
Auteur

Salut à toi :)

Merci vraiment pour ton aide :D

effectivement l'erreur venait bien d'ici j'ai corrigé par :

move_uploaded_file($_FILES'image_oeuvre']'tmp_name'],$destination);

est tout fonctionne parfaitement :),

Merci encore pour ton temps consacré :).