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

Fermé
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016 - Modifié par imoooo le 19/05/2016 à 17:52
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016 - 23 mai 2016 à 15:38
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

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
19 mai 2016 à 20:11
Bonjour,

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

0
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016
19 mai 2016 à 20:53
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
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016
19 mai 2016 à 23:04
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
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016
20 mai 2016 à 19:54
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
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016
20 mai 2016 à 20:08
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
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024
20 mai 2016 à 20:13
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
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
Modifié par jordane45 le 21/05/2016 à 20:50
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
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
21 mai 2016 à 20:50
NB: Si tu ne visualises aucune erreur .... pense bien à DESACTIER TOUS les header(location ...) que tu as mis dans ton code !
0
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016
23 mai 2016 à 14:55
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
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016
Modifié par imoooo le 23/05/2016 à 15:39
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