Page 1 sur 1

class et base de donnee

Posté : 31 janv. 2008, 01:21
par bruno.rotrou
slt
voici mon probleme
j'ai une class invites qui me permet de charger une base de donnée que voici

<?php 
class invites {
var $nom;
var $prenom;
var $email;

//METHODE CHARGEMENT
function chargement($nom,$prenom,$email){

echo "<br>nom_invite : ".$nom."<br>prenom_invite : ".$prenom."<br>email_invite : ".$email; 

require_once('Connections/conexion_bd_fetetout.php');

//requete base de donnee
$requete="INSERT INTO  liste_invites SET  ID_organisateur='bruno@free', nom='romeo', prenom='juliette', email='juju@free' ";

// information sur la reussite de la requete
$resultat=mysql_query($requete,$BD_membre);

if($resultat){echo "BD  charger";}else{echo"BD non charger";}

}// fin methode chargement

}//fin class
?>
(j'ai simplifie la requête et j'ai remplacer les variables par des noms ds les valeurs mais ça ne change rien a mon problème)
j'ai ensuite un formulaire sur lequel se trouve plusieurs invités, je traite ce formulaire de la façon suivante:
// Inclusion du fichier class 
include_once 'class_invites.php';

// controle de l'envois des donnees et du bt cliquer
if (isset ($_POST['BT_envoyer']) ) {

// variable nombre de ligne ds le formulaire
$ligne=(count($_POST)-1)/3;


// Destruction de l'élément bouton du tableau $_POST
unset($_POST['BT_envoyer']);

// boucle creation du nombre d'invites
for($i=1;$i<=$ligne;$i++){

$invite="invite".$i;

echo "<br>".$invite;

/ /creation des instances invites
$invite=new invites();
$invite->nom=$_POST['nom_invite'.$i];
$invite->prenom=$_POST['prenom_invite'.$i];
$invite->email=$_POST['email_invite'.$i];

// appel function chargement de la class invites
$invite->chargement($invite->nom,$invite->prenom,$invite->email);

}//fin for
    
}
?>
la première boucle de for ($i=1)charge bien la base de donnée, mais ensuite a la deuxième boucle($i=2) j'obtiens le message suivant et ainsi de suite pour les autres boucles:
Notice: Undefined variable: BD_membre in c:\program files\easyphp1-8\www\fiesta\class_invites.php on line 17

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\program files\easyphp1-8\www\fiesta\class_invites.php on line 17
je n'y comprend rien ! pourquoi ma var $BD_membre qui est la connexion a ma base aurait disparue entre temps.
je me suis demander si ce n'était pas le fait d'avoir le code
require_once('Connections/conexion_bd_fetetout.php');
appelé a chaque instance qui me créait ce problème j'ai fait bien des essais mais là je sèche.
merci de votre aide
A+

Posté : 31 janv. 2008, 09:39
par d0m
Effectivement ta variable $BD_membre n'est pas défini dans la classe.
D'après ton code je pense que tu la définis dans le fichier Connections/conexion_bd_fetetout.php.
que tu inclus une seule fois (require_once).

Voilà ce que je crois qu'il se passe :

tu effectue la fonction chargement d'une première instance de la classe.
la ligne
require_once('Connections/conexion_bd_fetetout.php');
s'execute et le fichier est inclus.

Dès le 2ème chargement la ligne
require_once('Connections/conexion_bd_fetetout.php');
est effectuée mais comme le fichier Connections/conexion_bd_fetetout.php a déjà été inclus auparavant, il ne l'est plus et la variable $BD_membre n'est donc pas défini pour cette instance de classe.

Je pense que ta méthode n'est pas très bonne. Pourquoi ne pas faire une connection en base au début hors de la classe, passer la connexion en argument à la fonction charger et fermer la connexion après toutes les instances?

merci

Posté : 31 janv. 2008, 11:52
par bruno.rotrou
slt
en effet c'est bien le require_once du fichier de connexion qui mettait la zone.
je l'ai donc sortie de ma class, puis je l'ai mis ds mon fichier de traitement et j'ai passé la variable connexion en argument de ma methode. et ca marche !!! :lol:

:( nouveau problème quand j'essais de vider la memoire avec mysql_free_result($resultat);
j'ai le message erreur suivant :

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\fiesta\class_invites.php on line 23

faut il aussi que je sorte cette commande de ma class ? pourtant c'est bien a ma requête qu'est lié mysql_free_result ....
ou j'ai rien compris :wink:
<?php 
// cette class gère la liste invités
// les variables sont le nom le prenom le mail
//les méthodes chargement BD ajout suppression modification
class invites {
var $nom;
var $prenom;
var $email;
var $connexion;//pour la variable de connexion

//METHODE CHARGEMENT
function chargement($nom,$prenom,$email,$connexion){
//echo "<br>nom_invite : ".$nom."<br>prenom_invite : ".$prenom."<br>email_invite : ".$email; 

//requete base de donnee
$requete="INSERT INTO  liste_invites SET  ID_organisateur='$_SESSION[email]', nom='".$nom."', prenom='".$prenom."', email='".$email."' ";//'$_SESSION[email]'

// information sur la reussite de la requete
$resultat=mysql_query($requete,$connexion);

if($resultat){echo "BD  charger";}else{echo"BD non charger";}
//mysql_close($connexion);
mysql_free_result($resultat);
}// fin methode chargement

//METHODE AJOUT INVITES
function ajout (){
echo"<label>NOM</label><label>prénom</label><input name='nom' type='text' ><br><label>email</label><input name='nom' type='text' >";

}//fin methode ajout

//METHODE SUPRESSION INVITES
function sup() {

}//fin methode suppression



}
?>

merci
A+ [/php]