Fonction dans fonction: conservé les variables

Résolu/Fermé
ntaie41 Messages postés 18 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013 - 2 mai 2013 à 16:33
ntaie41 Messages postés 18 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013 - 2 mai 2013 à 16:58
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

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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
2 mai 2013 à 16:38
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 jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013
2 mai 2013 à 16:39
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
2 mai 2013 à 16:45
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 jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013
2 mai 2013 à 16:49
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
2 mai 2013 à 16:51
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 jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013
2 mai 2013 à 16:53
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 jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013
2 mai 2013 à 16:55
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
2 mai 2013 à 16:55
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 jeudi 2 mai 2013 Statut Membre Dernière intervention 4 mai 2013
2 mai 2013 à 16:58
Merci beaucoup tout marche.

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