Page 1 sur 1

erreur dans une requête

Posté : 12 févr. 2012, 16:26
par noiise
Bonjour à tous
j'ai un problème dans une requête qui doit enregistrer des activités sportives et qui me retourne le message d'erreur suivant:
Fatal error: Call to a member function prepare() on a non-object dans ma fonction enregistrer_activite().
Je pense que c'est plus un problème de connexion car ma requête fonctionnait quand tous les fichiers étaient dans un fichier unique je n'ai fait que de la mettre dans une fonction. je voulais savoir si le fait de mettre tous les fichiers dans des dossiers séparés pouvait jouer sur le fait que ma connexion n'était pas reconnu en fonction des include que l'on faisait .Je précise que j'utilise PDO mais que je débute en programmation objet et que donc tout n'est sûrement pas bon car j'appelle ma connexion avec global $bdd et j'ai un doute là dessus .
voici les codes:

Monsite/index.php :
<?php
include(__DIR__.'/Modele/connexion_sql.php');

if (isset($_GET['page']) AND $_GET['page']=='enregistrer')
	{
		include_once(__DIR__.'/Controleur/enregistrer/enregistrer_activites_cont.inc.php');
	}
?>

Monsite/Modele/connexion_sql.php:
<?php
// Connexion à MySQL avec PDO
try
{
$bdd = new PDO('mysql:host=localhost;dbname=madatabase', 'root', '');
}

catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
Monsite/Controleur/enregistrer/enregistrer_activites_cont.inc.php :
<?php
if (isset($_POST['date']) AND isset($_POST['activite']) AND (! empty($_POST['date']) ) AND (! empty($_POST['activite'])))
{
include_once(__DIR__.'/../../Modele/enregistrer/enregistrer_activites_mod.inc.php');
$enreg = enregistrer_activite();
}

Monsite/Modele/enregistrer/enregistrer_activites_mod.inc.php :
<?php
function enregistrer_activite()
{
global $bdd;
//ci dessous la ligne qui pose problème
$req = $bdd->prepare('INSERT INTO activites(date, activite, commentaire) VALUES(:date, :activite, :commentaire)') or die(print_r($bdd->errorInfo()));
		$req->execute(array(
		'date' => $_POST['date'],
		'activite' => $_POST['activite'],
		'commentaire' => $_POST['commentaire']
		));
		$enreg = 'ok';
		echo'<p>Enregistrement effectué avec succès !</p>';
		return $enreg;
}
Merci pour votre aide et vos conseils

Re: erreur dans une requête

Posté : 12 févr. 2012, 20:44
par dunbar
Peut-être a cause du champ date qui est un nom réserver

Re: erreur dans une requête

Posté : 13 févr. 2012, 11:33
par noiise
bonjour !
je pense pas que ce soit un problème de champ car si je colle directement ma connexion dans ma fonction enregistrer_activte l'enregistrement s'effectue; je pense plutôt à problème dans le reconnaissance de l'objet $bdd. j'ai essayé une variable global mais il parait que c'est pas très recommandé. et comme je ne suis pas super caler en POO je sèche un peu ! :)

Re: erreur dans une requête

Posté : 14 févr. 2012, 00:18
par Ryle
Effectivement le message indique une erreur d'appel d'une méthode sur un non objet... le problème vient donc de $bdd qui ne contient pas ce qu'il devrait...

Le global $bdd fait bien référence à la variable $bdd définie en dehors de ta fonction, il faut donc voir pourquoi celui-ci n'est pas trouvé... as-tu des messages d'erreur ? est-ce que php entre bien dans le try ? est-ce que le chemin de l'include est correct ?

En gros tu peux coller un isSet($bdd) après le include connexion_sql.php pour vérifier si ta variable est bien définie. Si oui, faut regarder pourquoi celle-ci ne contient pas un objet connexion pdo ...