Fonction dans fonction: conservé les variables

Résolu
ntaie41 Messages postés 18 Statut Membre -  
ntaie41 Messages postés 18 Statut Membre -
Bonjour,

J'ai créer deux fonction:
-une pour me connecter à ma base (bddconnect)
-une autre pour entrer une information dans la base.
Le problème étant que la variable de la base ne se conserve pas.
La page m'affiche:
 PHP Notice: Undefined variable: bdd in - on line 15 PHP Notice: Undefined variable: bdd in - on line 18 PHP Fatal error: Call to a member function prepare() on a non-object in - on line 18
.

Je vous donne le code:
<?php
//Fonction de connexion à la base de donnée
function bddconnect ()
{
	 $dns = 'mysql:host=localhost;dbname=mabase';
	 $utilisateur = 'root';
	 $motDePasse = 'root';
	 $bdd = new PDO( $dns, $utilisateur, $motDePasse );
}


function insert()
{
	bddconnect ($bdd);
	
	$requete = "INSERT INTO Membre (id_user, user) VALUES (:unNom, :unPrenom)";
	$stmt = $bdd->prepare($requete);
	$nom = 'Dupont';
	$prenom = 'Jean';
 
	$stmt->bindParam('unNom', $nom);
	$stmt->bindParam('unPrenom', $prenom);
 
	//On ajoute Jean Dupont
	$stmt->execute();
 
	//On modifie la valeur des variables
	$nom='Duval';
	$prenom='Robert';
 
	//On ajoute Robert Duval
	$stmt->execute();	
}
 addfriends('1','2');
 
	
?>


Merci d'avance.

6 réponses

  1. Utilisateur anonyme
     
    Salut salut,

    Dans ta fonction bddconnect() , ajoute
    return $bdd;

    du coup tu feras $cnx=bddconnect(); hors de la fonction insert

    et dans ta fonction insert passe lui en paramètre la variable $cnx lorsque tu l'utilises

    Résolu? ===> [RESOLU]
    0
  2. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    Salut,

    c'est normal, une variable créée dans une fonction a une porte privée, elle n'est pas visible hors de cette fonction.
    0
  3. ntaie41 Messages postés 18 Statut Membre
     
    Bonjour,
    Merci d'avoir répondu aussi vite mais ça ne marche pas. J'ai du mal comprendre et mal placés tes explications. Peux-tu me corriger ?
    <?php
    //Fonction de connexion à la base de donnée
    function bddconnect ()
    {
    	 $dns = 'mysql:host=localhost;dbname=mabase';
    	 $utilisateur = 'root';
    	 $motDePasse = 'root';
    	 $bdd = new PDO( $dns, $utilisateur, $motDePasse );
    	 return $bdd;
    }
    $cnx=bddconnect(); 
    //Ajout d'un amis
    function insert()
    {
    	bddconnect ($bdd);
    	
    	$requete = "INSERT INTO Membre (id_user, user) VALUES (:unNom, :unPrenom)";
    	$stmt = $bdd->prepare($requete);
    	$nom = 'Dupont';
    	$prenom = 'Jean';
     
    	$stmt->bindParam('unNom', $nom);
    	$stmt->bindParam('unPrenom', $prenom);
     
    	//On ajoute Jean Dupont
    	$stmt->execute();
     
    	//On modifie la valeur des variables
    	$nom='Duval';
    	$prenom='Robert';
     
    	//On ajoute Robert Duval
    	$stmt->execute();	
    }
     addfriends('1','2');
     
    	
    ?>
    0
  4. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    c'est un peu mieux, mais dans la même logique, dans ta 2ème fonction, tu essayes d'appeler une variable qui n'existe pas au niveau de la fonction : $bdd

    déjà, il serait plus logique d'utiliser le $cnx que tu viens de faire, tu ne crois pas ?

    Et dans tous les cas, pour que cette variable soit accessible, soit tu la passes en argument de ta fonction, soit tu fais un global $cnx en début de fonction.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ntaie41 Messages postés 18 Statut Membre
     
    J'ai corrigé mais même erreur:
    PHP Fatal error: Call to undefined function addfriends() in - on line 35


    et mon code:
    <?php
    //Fonction de connexion à la base de donnée
    function bddconnect ()
    {
    	 $dns = 'mysql:host=localhost;dbname=tomorrow';
    	 $utilisateur = 'root';
    	 $motDePasse = 'root';
    	 $bdd = new PDO( $dns, $utilisateur, $motDePasse );
    	 return $bdd;
    }
    $cnx=bddconnect(); 
    //Ajout d'un amis
    function insert ($id_user, $id_user_invite)
    {
    	bddconnect ();
    	
    	$requete = "INSERT INTO Membre (id_user, user) VALUES (:unNom, :unPrenom)";
    	$stmt = $cnx->prepare($requete);
    	$nom = 'Dupont';
    	$prenom = 'Jean';
     
    	$stmt->bindParam('unNom', $nom);
    	$stmt->bindParam('unPrenom', $prenom);
     
    	//On ajoute Jean Dupont
    	$stmt->execute();
     
    	//On modifie la valeur des variables
    	$nom='Duval';
    	$prenom='Robert';
     
    	//On ajoute Robert Duval
    	$stmt->execute();	
    }
     addfriends('1','2');
     
    	
    ?>
    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      c'est quoi cette fonction addfriends ? Elle sort d'où ?

      En tout cas, je t'ai suggéré 2 choses, et je ne vois aucune des 2 dans ton code.

      De toute manière, ta fonction insert n'est appelée nulle part
      0
    2. ntaie41 Messages postés 18 Statut Membre
       
      si justement j'ai omis de le faire dans le sujet mais la fonction addfriend correspond à insert.<code<?php
      //Fonction de connexion à la base de donnée
      function bddconnect ()
      {
      $dns = 'mysql:host=localhost;dbname=tomorrow';
      $utilisateur = 'root';
      $motDePasse = 'root';
      $bdd = new PDO( $dns, $utilisateur, $motDePasse );
      return $bdd;
      }
      $cnx=bddconnect();
      //Ajout d'un amis
      function insert ($id_user, $id_user_invite)
      {
      bddconnect ();

      $requete = "INSERT INTO Membre (id_user, user) VALUES (:unNom, :unPrenom)";
      $stmt = $cnx->prepare($requete);
      $nom = 'Dupont';
      $prenom = 'Jean';

      $stmt->bindParam('unNom', $nom);
      $stmt->bindParam('unPrenom', $prenom);

      //On ajoute Jean Dupont
      $stmt->execute();

      //On modifie la valeur des variables
      $nom='Duval';
      $prenom='Robert';

      //On ajoute Robert Duval
      $stmt->execute();
      }
      insert('1','2');


      ?></code>
      0
    3. ntaie41 Messages postés 18 Statut Membre
       
      L'erreur est donc
      PHP Notice: Undefined variable: cnx in - on line 18 PHP Fatal error: Call to a member function prepare() on a non-object in - on line 18
      0
    4. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      et là ça met un message d'erreur ?

      la ligne $cnx=bddconnect(); serait mieux placée à la place de ton bddconnect() dans la fonction j'imagine, d'autant plus que tu essayes d'utiliser un hypothétique $cnx dedans.
      0
  7. ntaie41 Messages postés 18 Statut Membre
     
    Merci beaucoup tout marche.

    Comment ça marche, c'est génial :)
    0