Fonction dans fonction: conservé les variables

Résolu
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. 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
    1. Contributeur
      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
      1. 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
        1. Contributeur
          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
          1. 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. Contributeur
              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. 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. 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. Contributeur
              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
          2. Merci beaucoup tout marche.

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