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 :

probléme d'insertion au BD [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut probléme d'insertion au BD
    Bonsoir tous

    j'ai utilisé dans mon application la notion du POO du PHP et aussi la notion du PDO (mes besoins fonctionnels du projet) donc voilà mes classes

    classe db:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?php
     
    class Database
    {
     
        private $pdo = null;
     
     
         private db_name = "projet";
            private  db_user = "postgres";
        private  db_pass = "1230";
          private  db_host = "localhost";
     
     
     
     
        private function connect_db()
        {
            if ($this->pdo === null) {
     
                try {
                    $p= new PDO('pgsql:host=$this->db_host;port=5433;
                              dbname=$this->db_name;
                               host=$this->db_host;
                               username=$this->db_user;
                               password=$this->db_pass');
                    $p->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
                    $this->pdo = $p;
                } catch (PDOException $ex) {
                    echo 'erreur de la connexion à la BD : ' . $ex->getMessage();
                    die();
                    /* Fermeture de la connection */
                    pg_close($pdo);
                }
     
            }
     
            return $this->pdo;
        }
    classe catégories:
    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
    25
     
    <?php
     
    require "Database.php";
    class Categories extends Database{
     
     
     
        public function __construct()
        {
     
            $this->pdo = new Database();
        }
     
     
     
        public function add($nom="",$date="",$type="")
        {
            if ($nom && $date && $type) {
                $qry = $this->pdo->pg_prepare("INSERT INTO catg (nom,date_creation,type) VALUES (?, ?, ?)");
                $qry->pg_execute(array($nom,$date,$type));
            }
            return $qry;
        }
    }
    -dans la page ajouter catégories j'ai fait le code php suivant pour assurer l'insertion:
    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
     
    <?php
    require("Categories.php"); //classe categories
     
    if(isset($_POST['save'])){ //bouton
        var_dump($_POST);
    if(isset($_POST['date']) && isset($_POST['nom']) && isset($_POST['type']) ){ //les champs html
     
         $dd=htmlentities($_POST['date']);
        $nn=htmlentities($_POST['nom']);
        $tt=htmlentities($_POST['type']);
     
        $categorie = new Categories();
       $i= $categorie->add($dd,$nn,$tt);
     
      if($i){
          header('Location:listes.php');
      }else{
          header('Location:add.php?erreur="date ou nom ou type de la categorie est invalide"');
      }
    }
    }
    ?>
    le probléme que j'ai peux pas insérer des données dans la base postgresql, j'en sais pas s j'a un probléme au niveau de la fonction add..! il affiche toujours "date ou nom ou type de la categorie est invalide"(les paramètres sont bien passé mais l'insertion ne fonctionne pas)
    s'il vous aide moi

    MERCI

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as contrôlé ce que valait $nom, $date et $type dans ta méthode add ?

    Au passage retire tes htmlentities ; cette fonction sert à afficher des données dans une page HTML, pas à inserer dans une base de données.
    Et nomme tes variables explicitement et pas $nn.

    Il y a également un problème d'organisation : $qry est le résultat du prepare(), pas le résultat de l'execution de la requête.
    C'est l'execution de la requête qu'il faut tester.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    merci pour ton réponse Monsieur
    une petite question :l'erreur suivant qu'est ce que signifie !
    Fatal error: Call to a member function prepare() on a non-object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    include_once("database.php");
      function add($nom, $date, $type)
        {
            $DB_con=connectdb();
            if ($nom && $date && $type) {
                $qry =$DB_con->prepare("INSERT INTO categories(nom_cat,date_creation,type_cat) VALUES (?,?,?)");
                $qry->execute(array($nom, $date, $type));
            }
            return $qry;
        }
    aide moi s'il vous plait

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ca signifie que ta connexion n'a pas fonctionné ($DB_con n'est pas un objet PDO).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut autre probléme
    Citation Envoyé par sabotage Voir le message
    Ca signifie que ta connexion n'a pas fonctionné ($DB_con n'est pas un objet PDO).
    Merci j'ai rectifie le code de mon fichier BD.
    concernant ce code j'en sais pas pourquoi il stocke dans l'attribut "couleurs" ->ARRAY (la sélection des couleurs est multiple la couleur peut être a la fois noir et rouge)

    Nom : 2015-12-25_23-18-46.png
Affichages : 169
Taille : 4,1 Ko

    -code la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $qt = $DB_con->prepare("INSERT INTO produits SET couleurs=:nou ");
                    $qt->bindParam(':nou',$_POST["couleur_pro"]);
                    $az = $qt->execute();
    -code en html sachant que les différents couleurs seront affiché d'aprés la BD
    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
     
    <select  name="couleur_pro[]" required="required" multiple>
     
                                                    <?php
     
                                                    try {
                                                        $req = "SELECT couleurs FROM  couleur_produits ";
                                                        $sql = $DB_con->query($req);
                                                        while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
     
                                                            echo '<option value="'.$row['couleurs'].'">'.$row["couleurs"].'</option>';
                                                        }
                                                    }
                                                    catch(PDOException $exc){
                                                        echo "erreur d'affichage ".$exc->getMessage();
                                                    }
                                                    ?>
     
                                                </select>

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    La réponse EST dans ta question. Le select étant multiple, tu n'as pas une réponse, mais un tableau de réponses et tu dois donc les récupérer ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $qt = $DB_con->prepare("INSERT INTO produits SET couleurs=:nou ");
    foreach($_POST["couleur_pro"] as $item){
                    $qt->bindParam(':nou',$item);
                    $az = $qt->execute();
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    je peux pas enlevé multiple car la sélection ne doit pas être plusieurs choix pour l'utilisateur.
    sans [] il détecte seulement la 1ére sélection (c'est pas mon besoin fonctionnel), il faut donc stocker le différents choix possibles.

    le probléme est résolu j'ai oublié de faire l'existance du tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
      if (is_array($_POST["couleur"])) {
                        $qr->bindParam(':col', join(', ', $_POST["couleur"]));
                    } else {
                        $qry>bindParam(':col', $_POST["couleur"]);
                    }
    une autre difficulté que j'ai c'est l'insertion d'une image dans la BD. donc j'ai essayé de récupérer le path de l'image et stocké dans la table.

    up_file.php
    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
     
     
    <?php
     
    $nouveauNom="";
     
    if(isset($_FILES['up_img'])){
     
    if(($_FILES['up_img']['error']===UPLOAD_ERR_OK)) {
     
        $m=array(".png",".jpeg",".gif");
     
        if (in_array($_FILES['up_img']['name'],$m) && ($_FILES['cv']['size'] < 1024*1024)) {
            $nouveau = 'img/';
            $this->nouveauNom = $nouveau.basename($_FILES['up_img']['name']);
            move_uploaded_file($_FILES['up_img']['tmp_name'], $nouveauNom);
        }else{
           echo"votre image doit etre de type .png ou . jpeg ou .gif";
        }
    }else{
        echo erreur se produit lors de telechargement du votre fichier;
    }
    }
    ajouter_img.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    include("up_file.php");
     
    //récuperation de l'id du produit 
                    $last = $DB_con->lastInsertId();
     
                    $qt = $DB_con->prepare("INSERT INTO images SET id_produits=:pim,imge=:nou ");
                    $qt->bindParam(':pim',$last);
                    $qt->bindParam(':nou',$nouveauNom);
                    $az = $qt->execute();
    j'arrive pas a stocker le path il affiche tousjours que image ne peut pas etre null (je pense qu'il est null le $nouveauNom(variable proviens du fichier up_file.php) )

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    $this->nouveauNom

    Que vient faire ce $this ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    $this->nouveauNom

    Que vient faire ce $this ?
    pour changer la valeur de la variable $nouveauNom (comme en POO) car il est toujours null

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    $nouveauNom, c'est $nouveauNom, tu n'as pas le droit de changer comme ça, au mileu de nulle part.
    Corrige et teste au lieu de m'expliquer pourquoi tu te trompes !
    $truc, $Truc, $this->truc, $TRUC... tout ça, c'est pas équivalent.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    $nouveauNom, c'est $nouveauNom, tu n'as pas le droit de changer comme ça, au mileu de nulle part.
    Corrige et teste au lieu de m'expliquer pourquoi tu te trompes !
    $truc, $Truc, $this->truc, $TRUC... tout ça, c'est pas équivalent.
    j'ai évité tous ces problémes et j'ai mis le code dans un méme bloque comme ceci:

    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
    25
    26
     
     
    <input type="file"  required="required"  name="up_img[]" > // code html
     
    //code php
    if (($_FILES['up_img']['error'] === UPLOAD_ERR_OK)) {
     
                        $m = array(".png", ".jpeg", ".gif");
     
                        if (in_array($_FILES['up_img']['name'], $m) && ($_FILES['up_img']['size'] < 200000)) {
                            $nouveau ="up_img/";
     
                            $nouveauNom = $nouveau . basename($_FILES['up_img']['name']);//basename - Retourne le nom du fichier dans un chemin.
                            move_uploaded_file($_FILES['up_img']['tmp_name'], $nouveauNom);
     
     
                            $qt = $DB_con->prepare("INSERT INTO images SET id=:pim,image=:nou ");
                            $qt->bindParam(':pim', $last);
                            $qt->bindParam(':nou', $nouveauNom);
                            $az = $qt->execute();
                        } else {
                            echo "votre image doit etre de type .png ou . jpeg ou .gif";
                        }
                    } else {
                        echo"erreur se produit lors de telechargement du votre fichier";
                    }
    j'ai fais un test avec var_dump($_FILES['up_img']) il affiche une page vide (sans erreur et aussi sans paramétres ) j'en sais pas pourquoi

  12. #12
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-il normal que tu aies un $_FILES['cv'] qui se ballade dans le code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Est-il normal que tu aies un $_FILES['cv'] qui se ballade dans le code ?
    j'ai corrigé dans la dernier réponse

  14. #14
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    aide moi mes amis j'arrive pas a trouver la solution exacte merci

  15. #15
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par syrine01 Voir le message
    aide moi mes amis j'arrive pas a trouver la solution exacte merci
    probléme résolu , j'ai trompé au niveau du nom de champ html

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

Discussions similaires

  1. problème d'insertion de données
    Par Falgan dans le forum ASP
    Réponses: 2
    Dernier message: 06/04/2004, 10h29
  2. Probléme d'insertion par défault
    Par xavier62 dans le forum SQL
    Réponses: 7
    Dernier message: 28/11/2003, 14h03
  3. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 23h58
  4. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 02h02
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 14h52

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