Fonction dans fonction: conservé les variables

Résolu
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

6 réponses

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
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
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
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
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
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
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
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
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
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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
ntaie41 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup tout marche.

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