Page 1 sur 2

crud sur upload

Posté : 22 juil. 2014, 15:04
par tycoons
bonjour à tous ,
je teste en ce moment PDO et je me pose une question concernant le crud lors d'un upload l'insert ce passe sans problème mais le delete et update me pose soucis
je passe juste l' id en bindvalue mais il ne supprime pas l'image dans le dossier pour le update ni le delete comment proceder pour ce genre de chose?
je vous met un extrais de mon code.
<?php
# CREATE
      if(isset($_POST['creer'])){

        $titrel  = $_POST['titrel'];
        $titrec = $_POST['titrec'];
        $description  = $_POST['description'];
        $histo = $_POST['histo'];
        $datepub = $_POST['datepub'];
        $images  = $_FILES['images'];
        //   move_uploaded_file($_FILES['images']['tmp_name'], './upload/'.$_FILES['images']['name']);
        if  ( move_uploaded_file ( $_FILES [ 'images' ][ 'tmp_name' ],  './upload/' . $_FILES [ 'images' ][ 'name' ])) 
        { 
        $images =  './upload/' . $_FILES [ 'images' ][ 'name' ]; 
        $sql  = 'INSERT INTO ouvrage (titrel,titrec,description,histo,datepub,images) ';
        $sql .= 'VALUES (:titrel, :titrec, :description, :histo, :datepub, :images)';

        try {
          $create = $db->prepare($sql);
          $create->bindValue(':titrel', $titrel, PDO::PARAM_STR);
          $create->bindValue(':titrec', $titrec, PDO::PARAM_STR);
          $create->bindValue(':description', $description, PDO::PARAM_STR);
          $create->bindValue(':histo', $histo, PDO::PARAM_STR);
          $create->bindValue(':datepub', $datepub, PDO::PARAM_STR);
          $create->bindValue(':images', $images, PDO::PARAM_STR);
          if($create->execute()){
            echo "<div class='alert alert-success'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Inserer avec succès</strong>
            </div>";
          }
        } catch (PDOException $e) {
            echo "<div class='alert alert-error'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Erreur insertion dans la base/strong>" . $e->getMessage() . "
            </div>";
        }
      }
      }
  # UPDATE
      if(isset($_POST['edition'])){
        $id = (int)$_GET['ouvrageid'];
        $titrel  = $_POST['titrel'];
        $titrec = $_POST['titrec'];
        $description  = $_POST['description'];
        $histo = $_POST['histo'];
        $datepub = $_POST['datepub'];
        $images  = "./upload/" . $_FILES['images']['name'];
   
        $sqlUpdate = 'UPDATE ouvrage SET titrel = ?, titrec= ?,description = ?, histo=  ?, images= ?, datepub = ? WHERE ouvrageid = ?';

        $datas = array($titrel, $titrec, $description, $histo, $images, $datepub, $id);

        try {
          $update = $db->prepare($sqlUpdate);
          if($update->execute($datas)){
            echo "<div class='alert alert-success'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Modifié avec succès</strong>
            </div>";
          }
        } catch (PDOException $e) {
          echo "<div class='alert alert-error'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Erreur d'édition</strong>" . $e->getMessage() . "
            </div>";
        }
      }
       
      # DELETE
      if(isset($_GET['action']) && $_GET['action'] == 'delete'){
        $id = (int)$_GET['ouvrageid'];
         $images = "./upload/" . $_FILES['images']['name'];//supp image dossier /upload/
         unlink("./upload/" . $_FILES['images']['name']);
        $sqlDelete = 'DELETE FROM ouvrage WHERE ouvrageid = :ouvrageid, images=:images';

        try {
          $delete = $db->prepare($sqlDelete);
          $delete->bindValue(':ouvrageid', $id, PDO::PARAM_INT);
          /*$delete->bindValue(':images', $id, PDO::PARAM_STR);*/
          if($delete->execute()){
            echo "<div class='alert alert-success'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Supp avec succès</strong>
            </div>";
          }
        } catch (PDOException $e) {
          echo "<div class='alert alert-error'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Erreur de supp de la base</strong>" . $e->getMessage() . "
            </div>";
        }
      }
si sa marche pour le create cela devrai fonctionner aussi ?
lors de l'update sa me modifier bine le chemin dans ma bdd mais pas le fichier
et le delete supprime bine la ligne dans ma base mais pas mon fichier
si quelque pouvez m’expliquer ou sa pêche un grand merci d'avance

Re: crud sur upload

Posté : 22 juil. 2014, 16:29
par xTG
Il te manque une partie, celle qui agit sur le système de fichier. ;)
Le code présent dans l'ajout :
if  ( move_uploaded_file ( $_FILES [ 'images' ][ 'tmp_name' ],  './upload/' . $_FILES [ 'images' ][ 'name' ])) 
Son principe est qu'après upload d'un fichier ce dernier est stocké dans un répertoire temporaire du serveur.
Le move_uploaded_file te permet d'aller le placer à l'endroit final que tu souhaites.

Dans le cas d'une modification il faut donc :
- si c'est un nouvel upload => refaire un move_uploaded_file pour écraser l'ancien fichier
- si c'est juste renommer le fichier => voir du côté de la fonction rename

Dans le cas d'une suppression il faut appeler la fonction unlink sur le fichier pour le supprimer.

Re: crud sur upload

Posté : 22 juil. 2014, 17:40
par tycoons
merci pour les informations le upload c'est nickel par contre mon delete est récalcitrant :
# DELETE
      if(isset($_GET['action']) && $_GET['action'] == 'delete'){
        $id = (int)$_GET['ouvrageid'];
         $images  = "./upload/" . $_FILES['images']['name'];

   			if(file_exists ( $images))
    		 unlink( $images );

        $sqlDelete = 'DELETE FROM ouvrage WHERE ouvrageid = :ouvrageid';

        try {
          $delete = $db->prepare($sqlDelete);
          $delete->bindValue(':ouvrageid', $id, PDO::PARAM_INT);
          if($delete->execute()){
            echo "<div class='alert alert-success'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Supp avec succès</strong>
            </div>";
          }
        } catch (PDOException $e) {
          echo "<div class='alert alert-error'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Erreur de supp de la base</strong>" . $e->getMessage() . "
            </div>";
        }
      }
J'ai des erreur sur mon unlink
Notice: Undefined index: images
Warning: unlink(./upload/): Permission denied
j ai tester de mettre un chmod
if(file_exists ( $images))
   				chmod($images, 0777);
    		 unlink( $images );
mais sa coince toujours pourquoi le warning et le notice?

Re: crud sur upload

Posté : 22 juil. 2014, 17:56
par xTG
A voir le message tu tentes de supprimer un répertoire.
Est-ce bien ce que tu veux ?

Re: crud sur upload

Posté : 22 juil. 2014, 17:58
par tycoons
Arf non pas du tous je veux juste supprimer l'image du répertoire lors de la suppression
pourtant je le donne le chemin avec le non de l image.

Code : Tout sélectionner

$images = "./upload/" . $_FILES['images']['name'];
que je veut supprimé.
je suis en local avec wamp sous windows

Re: crud sur upload

Posté : 22 juil. 2014, 18:37
par tycoons
Bon la suppresion dans la bdd ce fait bien mais pas dans le dossier ou il y a l'images déroutant ce truck

Re: crud sur upload

Posté : 22 juil. 2014, 18:44
par xTG
Qu'est ce que tu as dans $_FILES['images']['name'] ? ;)

Re: crud sur upload

Posté : 22 juil. 2014, 18:59
par tycoons
je viens de faire un var dump de $image

Code : Tout sélectionner

string './upload/'
donc il trouve pas le nom du fichier pourtant dans la bdd j'ai bien sa /upload/truck.jpg
donc avec $id il devrait retrouver le nom?
je comprend pas là c'est un peu obscure encore je cherche mais je trouve pas le pourquoi
je suis sur que c'est un truck tous con en plus grrr

Re: crud sur upload

Posté : 22 juil. 2014, 20:13
par xTG
Sauf que $_FILES est ce que retourne le formulaire.
Pas ce qui vient de la BDD.

Il faut donc avant ta requête DELETE une requête SELECT pour récupérer l'url vers le fichier pour pouvoir le supprimer.

Re: crud sur upload

Posté : 23 juil. 2014, 13:05
par tycoons
merci pour l'information je pensais que vu que je récupéré déjà l id je pouvais récupérer aussi les autres champ.
par contre faire la requête select avant...
$sqlSelect = 'SELECT * FROM ouvrage WHERE ouvrageid = :ouvrageid';
 $sqlDelete = 'DELETE FROM ouvrage WHERE ouvrageid = :ouvrageid';

        try {
          $delete = $db->prepare($sqlSelect);
          $delete->bindValue(':ouvrageid', $id, PDO::PARAM_INT);
          if($delete->execute($sqlDelete )){
            echo "<div class='alert alert-success'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Supp avec succès</strong>
            </div>";
          }
        } catch (PDOException $e) {
          echo "<div class='alert alert-error'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Erreur de supp de la base</strong>" . $e->getMessage() . "
            </div>";
        }
      }
sa donnerai quelque chose comme sa ou pas du tous?

Re: crud sur upload

Posté : 23 juil. 2014, 13:17
par xTG
Euh... Oui et non ? ^^
Tu mélanges un peu les deux variables dans ce que tu as fais donc je ne sais pas si c'est la totalité du code que tu souhaitais faire.
Ou bien si c'était juste le select.

Re: crud sur upload

Posté : 23 juil. 2014, 13:41
par tycoons
J' essaye d'appliquer tes remarques suis pas un pro donc je teste.
je veux juste récupérer mon chemin d'image proprement
sa marche actuellement mais pas avec la requête que je t ai montrer je te montre comment j'ai contourner le soucis.
 $images=$_GET['images'];
        if( file_exists ( $images))
        unlink($images);
mais la avec une requête slq en plus je patauge dans la semoule mais je veut tenir compte de ce que tu me dit

Re: crud sur upload

Posté : 23 juil. 2014, 13:42
par tycoons
J' essaye d'appliquer tes remarques suis pas un pro donc je teste.
je veux juste récupérer mon chemin d'image proprement
sa marche actuellement mais pas avec la requête que je t ai montrer je te montre comment j'ai contourner le soucis.
 if(isset($_GET['action']) && $_GET['action'] == 'delete'){
        $id = (int)$_GET['ouvrageid']; $images=$_GET['images'];
        if( file_exists ( $images))
        unlink($images); $sqlDelete = 'DELETE FROM ouvrage WHERE ouvrageid = :ouvrageid' ;
        try {
          $delete = $db->prepare($sqlDelete);
          $delete->bindValue(':ouvrageid', $id, PDO::PARAM_INT);
         // $delete->bindValue(':images', $images, PDO::PARAM_STR);
          if($delete->execute()){
            echo "<div class='alert alert-success'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Supp avec succès</strong>
            </div>";
          }
        } catch (PDOException $e) {
          echo "<div class='alert alert-error'>
            <button type='button' class='close' data-dismiss='alert'>&times;</button>
            <strong>Erreur de supp de la base</strong>" . $e->getMessage() . "
            </div>";
        }
      }
mais la avec une requête slq en plus je patauge dans la semoule mais je veut tenir compte de ce que tu me dit

Re: crud sur upload

Posté : 23 juil. 2014, 16:45
par xTG
Voici un exemple basique à adapter :
// Soit $_GET['numero'] un champ fourni par l'url et représentant ma clé primaire

$sql = 'SELECT monChamps FROM maTable WHERE numero = ' . PDO::quote($_GET['numero']); // PDO::quote pour protéger contre l'injection SQL
$result = $pdo->query($sql); // query plutôt que requête préparée car plus adaptée à la situation
if( $result )
{
   $data = $result->fetch();
   if( $data )
   {
      $monChamps = $data['monChamps']; // j'ai récupéré le contenu
   }
}

Re: crud sur upload

Posté : 23 juil. 2014, 20:30
par tycoons
merci bien pour l'aide temps que j ai ton attention j'en profite :D
on ton avis l'utilisation des getter et setter est elle vraiment utile?
je ne parle pas des méthodes magique
si j ai bien piger la doc
les setter pour les verif et les getter pour l affichage c'est bine sa?