IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

fonction update avec foreach dans pdo [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut fonction update avec foreach dans pdo
    Bonjour à tous, je rencontre deux problèmes lorsque je souhaite mettre à jour une fiche article avec pdf joint et les catégories auxquelles se rattache l'article.

    En mettant à jour la fiche, les informations concernants la fiche article sont prises en compte, les variables des catégories sont présentes dans le print_r de l'array posté mais ne s'intègrent pas en base de données (l'id_product est rentré mais pas l'id_cat.)

    Mon foreach est-il correct en pdo ? Je n'arrive pas à trouver l'erreur.
    Voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
      public function update($product)
      {
        $q = $this->db->prepare('UPDATE products SET name = :name, brand = :brand, description = :description, article = :article, SEO_Title = :SEO_Title ,SEO_Description = :SEO_Description ,SEO_Keywords = :SEO_Keywords WHERE id = :id');
        $q->bindValue(':id', $product->id(), PDO::PARAM_INT);
        $q->bindValue(':name', $product->name());
        $q->bindValue(':brand', $product->brand());
        $q->bindValue(':description', $product->description());
        $q->bindValue(':article', $product->article());
        $q->bindValue(':SEO_Title', $product->SEO_Title());
        $q->bindValue(':SEO_Description', $product->SEO_Description());
        $q->bindValue(':SEO_Keywords', $product->SEO_Keywords());
     
        $q->execute();
     
     
        foreach ($_POST['category'] as $key => $value)
        {
            $q = $this->db->prepare('UPDATE product_cat SET id_cat = :id_cat, id_product =:id_product');
            $q->bindValue(':id_cat', $key);
            $q->bindValue(':id_product',$product->id());
            $q->execute();
        }
     
      }
    et voici l'envoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (isset($_POST['edit']) && isset($_POST['id'])) 
    {
     
    print_r($_POST);
    	  $rand = rand();
    	  $chemin_destination = '../article/';
          $product = new Product(array('name' => $_POST['name'], 'description' => $_POST['description'], 'article' => $rand.'.pdf', 'SEO_Title' => $_POST['seo_title'], 'SEO_Description' => $_POST['seo_description'], 'SEO_Keywords' => $_POST['seo_keywords'], 'brand' => $_POST['brand'],'category' => $_POST['category'],'id'=>$_POST['id']));
     
          move_uploaded_file($_FILES['article']['tmp_name'], $chemin_destination . $rand . '.pdf');
          $manager->update($product);
     
    }

    Deuxième question, peut-on faire un isset sur un fichier envoyé pour mettre à jour celui-ci uniquement s'il existe avant d'enchainer avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	  $rand = rand();
    	  $chemin_destination = '../article/';
              move_uploaded_file($_FILES['article']['tmp_name'], $chemin_destination . $rand . '.pdf');

    Merci pour votre aide !

  2. #2
    Membre confirmé
    Femme Profil pro
    Etudiante en informatique
    Inscrit en
    Janvier 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 98
    Par défaut
    Difficile de comprendre de quoi tu parles sans connaitre le schéma de ta base de données...
    Montre nous ton schéma et réexplique ton problème, car la c'est vraiment pas clair

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il ne manquerait pas un peu un WHERE dans ton UPDATE ?
    De plus, la préparation de la requête est à faire en dehors de la boucle.

    Pour la deuxième question :
    http://www.php.net/manual/fr/function.file-exists.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Merci pour ta réponse, je vais essayer d'être plus précis. (désolé, je débute avec PDO)
    Je possède 4 tables :
    - products (id, reference, name, brand, description, article, SEO_Title, SEO_Description, SEO_Keywords)
    - brands (id, brand)
    - categories (id, categorie)
    - product_cat (id, id_cat, id_product) jointure entre la table "categories" et "products".

    Un produit appartient à une seule marque, le CRUD fonctionne bien.

    Un produit peut appartenir à plusieurs catégories. La fonction create fonctionne bien mais pas la fonction update qui ne met pas à jour les catégories auxquelles le produit appartient , la table "products" est donc bien mise à jour mais pas "product_cat", des erreurs sont présentes dans l'update. en effet, l'id_product est bien mis à jour, mais l'id_cat va faire apparaitre 6 fois la même valeur et non les valeurs mises à jour, présentent dans le print_r($_POST) avant mise à jour.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Merci Sabotage pour ton aide. En intégrant le WHERE comme ceci, aucune donnée est mise à jour concernant la partie catégorie. Je vois pour intégrer la boucle en dehors..pas encore habitué à PDO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public function update($product)
      {
        $q = $this->db->prepare('UPDATE products SET name = :name, brand = :brand, description = :description, article = :article, SEO_Title = :SEO_Title ,SEO_Description = :SEO_Description ,SEO_Keywords = :SEO_Keywords WHERE id = :id');
        $q->bindValue(':id', $product->id(), PDO::PARAM_INT);
        $q->bindValue(':name', $product->name());
        $q->bindValue(':brand', $product->brand());
        $q->bindValue(':description', $product->description());
        $q->bindValue(':manual', $product->article());
        $q->bindValue(':SEO_Title', $product->SEO_Title());
        $q->bindValue(':SEO_Description', $product->SEO_Description());
        $q->bindValue(':SEO_Keywords', $product->SEO_Keywords());
     
        $q->execute();
     
     
        foreach ($_POST['category'] as $key => $value)
        {
            $q = $this->db->prepare('UPDATE product_cat SET id_cat = :id_cat WHERE id_product =:id_product');
            $q->bindValue(':id_cat', $key);
            $q->bindValue(':id_product',$product->id(), PDO::PARAM_INT);
            $q->execute();
        }
     
      }

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    En intégrant mes boucles en dehors, cela ne fonctionne toujours pas et l'id product n'est plus prise en compte. Ai-je une erreur dans la structure ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public function update($product)
      {
        $q = $this->db->prepare('UPDATE products SET name = :name, brand = :brand, description = :description, article = :article, SEO_Title = :SEO_Title ,SEO_Description = :SEO_Description ,SEO_Keywords = :SEO_Keywords WHERE id = :id');
        $q->bindValue(':id', $product->id(), PDO::PARAM_INT);
        $q->bindValue(':name', $product->name());
        $q->bindValue(':brand', $product->brand());
        $q->bindValue(':description', $product->description());
        $q->bindValue(':manual', $product->article());
        $q->bindValue(':SEO_Title', $product->SEO_Title());
        $q->bindValue(':SEO_Description', $product->SEO_Description());
        $q->bindValue(':SEO_Keywords', $product->SEO_Keywords());
     
        $q->execute();
     
         $q2 = $this->db->prepare('UPDATE product_cat SET id_cat = :id_cat WHERE id_product =:id_product');
        foreach ($_POST['category'] as $key => $value)
        $q2->bindValue(':id_cat', $key);
        $q2->bindValue(':id_product',$product->id(), PDO::PARAM_INT);
        $q2->execute();
     
      }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Fonction SI avec résulat dans une autre cellule
    Par jbs68 dans le forum Excel
    Réponses: 5
    Dernier message: 31/03/2010, 18h44
  2. Réponses: 0
    Dernier message: 11/01/2010, 10h49
  3. Appleler une fonction VBScript avec parametre dans un batch
    Par spoun95 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 10/10/2008, 17h08
  4. update avec paramètre dans access (pour modifier une image)
    Par salihovic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/02/2008, 21h27
  5. astuce avec fonction update
    Par cubepiege dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/11/2005, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo