Problème d'insertion dans la base de données

imoooo Messages postés 17 Statut Membre -  
imoooo Messages postés 17 Statut Membre -
salut tout le monde!
svlp j'ai un problème qui m'empêche d'inserer qlq chose dans la base de données et je travaille avec SGBD postgres .. je sais pas c'est quoi le probleme .. voila les fontions que j'ai utilisé car je travaille avec de la poo en php

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Sans voir ton code ni rien savoir du souci que tu rencontres (message d'erreur ??) .... IMPOSSIBLE de te répondre !

    0
    1. imoooo Messages postés 17 Statut Membre
       
      voila le code .. et j'ai pas d'erreur car lors de l'inscription on appelle cette fonction pour inserer les donnees saisie mais rien ne se change dans la base de données ..


      public function insertcandidat($nom,$prenom,$email,$mp)
      {
      $req=$this->bdd->query('INSERT INTO candidat(nom_c,prenom_c,email_c,mp_c) VALUES(?,?,?,?)');
      $req->execute(array($nom,$prenom,$email,$mp));

      }
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > imoooo Messages postés 17 Statut Membre
       
      Peux tu mettre ce code dans un bloc TRY/CATCH pour intercepter les erreurs ?
      De plus.. comment as tu codé la connexion à la BDD ?


      PS: A l'avenir, merci d'utiliser les balises de code lorsque tu postes du code sur le forum.
      Explications ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
      0
    3. imoooo Messages postés 17 Statut Membre
       
      mercii pr repondre .. ok voila le code de la connexion à la BDD :
      <?php
      
      class Connexion{
      
        public function getPDO() 
         {
         	  $bdd = new PDO('pgsql:dbname=QCM;host=localhost;port=5432', 'postgres',       '123');       
      	  return $bdd;
         }
       
                     }
      ?>
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > imoooo Messages postés 17 Statut Membre
       
      Va me falloir plus que des bouts de code ...
      D'un côté tu as un $bdd ... et de l'autre tu utilises un $this->bdd
      ...j'aimerai que tu me montres l'intégralité de tes class !
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Et ton site ... il est hébergé sur un serveur ou sur ton pc ? Si c'est sur ton PC qu'as tu installé en guise de serveur apache/php ?
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Y'aurait pas mal de choses à corriger ...
    par exemple ..; quel est le lien entre ta class Candidat et la class CandidatDB ?
    N'aurais tu pas oublié de faire un EXTEND ? et puis.. pourquoi avoir fait deux class différentes ?

    mais bon..
    déjà testes ça :
      public function insertcandidat($nom,$prenom,$email,$mp) {
      
      $sql = "INSERT INTO candidat(nom_c,prenom_c,email_c,mp_c) VALUES(:nom,:prenom,:email,:mp)";
      $datas = array(":nom"=>$nom,":prenom"=>$prenom,":email"=>$email,":mp"=>$mp);
      
      //exécution de la requete
      try{
         $req=$this->bdd->query($sql);
         $req->execute($datas; 
        }catch(Exception $e){
       //en cas d'erreur dans la requête
       echo "Erreur ! ".$e->getMessage();
      }
      }
    

    Le TRY/CATCH permet d'intercepter les erreurs

    Par contre... dans ta connexion... il faut que tu actives l'affichage des erreurs PDO.
    en ajoutant le setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    par exemple:
    <?php
    //Fichier de connexion à la bdd : cnxBdd.php
     try{
       $bdd = new PDO("mysql:host=localhost;dbname=base_phoenixkids;charset=UTF8", 'root', '');
       $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //pour activer l'affichage des erreurs pdo
    } catch(PDOException $e){
         echo 'ERROR: ' . $e->getMessage();
    } 
    

    Cordialement, 
    Jordane                                                                 
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      NB: Si tu ne visualises aucune erreur .... pense bien à DESACTIER TOUS les header(location ...) que tu as mis dans ton code !
      0
    2. imoooo Messages postés 17 Statut Membre
       
      voila ce code était marché juste pour le insert mais j'ai pas tester le update et les autres je vais vous montrer le code d'inscription et les codes de la DB enseignant si vous trouvez que tout est bien me le dites sinon que vous me proposez pour le try catch est ce qu'il est utilisé aussi qu'on veut programmer en poo .. et pour les classes dérivées en héritage est ce qu'il doit posséder un id comme attribut ou non ? et mercii bcp
       
      <?php
      
      
      
      require_once'../modele/BD/connexion.php';
      require_once'../modele/BD/enseignantDB.php';
      require_once'../modele/classe/Enseignant.php';
      
      if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['password']))
      {
      	$n=$_POST['nom'];
      	$p=$_POST['prenom'];
      	$e=$_POST['email'];
      	$mp=$_POST['password'];
      
          $E = new Enseignant($n,$p,$e,$mp);
      	$enseignant = new enseignantDB();
      	
      	$enseignant->insertenseignant($E);
      	$enseignant->sessionenseignant($n,$p,$e,$mp);
      	//header('Location:../view/template/index_Bienvenue.html');
       	
      }
      else { 
      		header('location:../view/inscription.php');
         	}
      
      ?>

      <?php
      require_once'connexion.php';
      require_once'../classe/Enseignant.php';
      
      class EnseignantDB{
      
      private $bdd;
      
        public function setDB(PDO $DB)
        {
          $this->bdd = $DB;
        }
      
        public function __construct()
        {   $DB=new Connexion();
            $this->setDB($DB->getPDO());
        } 
        
      
        public function authenseignant($email,$mp)
        {   
            $sql="SELECT id_e FROM enseignant where email_e='$email' AND mp_e='$mp' ";
            $req=$this->bdd->query($sql);
            $donnee = $req->fetch();
            if($donnee){
            $_enseignant= new Enseignant();
            $_Edb= new EnseignantDB();
            $_enseignant=$_Edb->selectenseignant($donnee);
            $_SESSION['user']=$_enseignant;
            return true;
            }
            else{
            return false;
            }
        
      }
      
      	
      	public function selectenseignant($id)
      	{
      		  $req=$this->bdd->query('SELECT * FROM  enseignant WHERE id_e='?'');
        		$req->execute(array($id));
            $donnee=$req->fetch();
            $E = new Enseignant();
            $E=$donnee;
        		return $E;										 	
        }
      
      	public function insertenseignant($E)
      	{		
      	    $req=$this->bdd->query('INSERT INTO enseignant(nom_e,prenom_e,email_e,mp_e) VALUES(?,?,?,?)');
        		$req->execute(array($E->get_nomE(),$E->get_prenomE(),$E->get_emailE(),get_mdpE()));
        		
        }
      
      	public function deleteenseignant($idE)
      	{	
      		  $req=$this->bdd->query('DELETE FROM enseignant WHERE id_e='?' ');
        		$req->execute(array($idE));
        	  
      	}						
      
      
      		public function updateenseignant($En)
      	{
      	    $req=$this->bdd->query('UPDATE enseignant SET "nom_E"=?, "prenom_E"=?, "email_E"=? "mdp_E"=? WHERE "id_C"='$En->_idE' ';
       $req->execute(array($En->set_nomE(),$En->set_prenomE(),$En->set_emailE(),$En->set_mdpE());
        	  
        }
      
      
      			}
      0
    3. imoooo Messages postés 17 Statut Membre
       
      si vous trouvez qu'il a une faute .. veuillez me signaler slvp .. car j'ai affecter un objet de la classe EnseignantDB dans un objet de la classe Enseignant dans la fonction authentifenseignant mais j'ai utilisé une fonction appellé par l'objet qui retourne un autre objet de l'autre classe .. les syntaxes du poo est un peu compliqué
      public function selectenseignant($id)
       {
          $req=$this->bdd->query('SELECT * FROM  enseignant WHERE id_e='?'');
          $req->execute(array($id));
            $donnee=$req->fetch();
            $E = new Enseignant();
            $E=$donnee;
          return $E;            
        }


      comme ici je sais est-il correct de affecter $donnee à $E qui est l'objet
      0