message d'erreur lors d'un appel de fonction
Posté : 20 avr. 2012, 22:50
Bonsoir,
Débutant en PHP, après quelques heures de recherches dans mon code et sur le net, je viens demander un peu d'aide...
Lors de l'appel de la fonction selectionner() de la classe gestion_sql, j'ai cette erreur :
Ci-dessous les contenus qui peuvent aider à résoudre l'incident (j'essaie de séparer mes fichiers contenant la présentation, les fonctions php, mysql, et les fichiers de classes).
Extrait du fichier gene_fonctionsphp_traitement_inscription.php
Extrait du fichier de classe class_user_registration.php
Débutant en PHP, après quelques heures de recherches dans mon code et sur le net, je viens demander un peu d'aide...
Lors de l'appel de la fonction selectionner() de la classe gestion_sql, j'ai cette erreur :
A force de chercher, et vu les commentaires trouvés par ailleurs dans d'autres sujets, je me demande si ce n'est pas un problème de portée de l'objet $req_sql, mais sans parvenir à vérifier si c'est ça, et à résoudre le problème.PHP Fatal error: Call to a member function selectionner() on a non-object in /home/smashcfr/Documents/info/sitegene/fonctions/gestion_users/gene_sql_traitement_inscription.php on line 21, referer: http://127.0.0.1/fonctions/gestion_user ... iption.php
Ci-dessous les contenus qui peuvent aider à résoudre l'incident (j'essaie de séparer mes fichiers contenant la présentation, les fonctions php, mysql, et les fichiers de classes).
Extrait du fichier gene_fonctionsphp_traitement_inscription.php
// On inclut les classes
require($_SERVER['DOCUMENT_ROOT']."/classes/class_user_registration.php");
require($_SERVER['DOCUMENT_ROOT']."/classes/class_gestion_sql.php");
require($_SERVER['DOCUMENT_ROOT']."/classes/class_gestion_mail.php");
//....
// On inclut les pages nécessaires aux opérations mysql à suivre.
include($_SERVER['DOCUMENT_ROOT']."/fonctions/gestion_mysql/gestion_connection.php");
include($_SERVER['DOCUMENT_ROOT']."/fonctions/gestion_users/gene_sql_traitement_inscription.php");
// Ouverture de la connection à la base de données.
$req_sql = null;
$res_cnx = ouvrir_connection($req_sql);
// Si la connection a échoué, on affiche l'erreur.
if ($res_cnx == false)
{
echo "La connection à la base de données a échoué. Veuillez retenter ultérieurement.";
}
else
{
// La connection à la base de données a réussi.
// Vérification que le login et l'adresse mail ne sont pas déjà présents dans la base de données.
$regverif -> verif_double_inscription($req_sql, $_POST['login'], $_POST['adresse_mail']);
}
Extrait du fichier de classe class_user_registration.php
function verif_double_inscription($req_sql, $login, $email)
{
$liste_verif = array(
":login" => $login,
":adresse_mail" => $email,
);
// On récupère un tableau avec les résultats de la requête.
// Deux champs : login et adresse mail
$retour = verif_sql_inscription($req_sql, $liste_verif);
// On vérifie dans le tableau quel élément est déjà présent : login, adresse mail, ou les deux.
}
Fichier class_gestion_sql.php
<?php
class gestion_sql extends PDO
{
private $_serveur;
private $_user;
private $_mdp;
private $_bdd;
public $connexion;
function __construct()
{
$this -> _serveur = "127.0.0.1";
$this -> _user = "xxxxx";
$this -> _mdp = "xxxxx";
$this -> _bdd = "yyyyy";
}
function connection()
{
try
{
parent::__construct('mysql:host='.$this -> _serveur.';dbname='.$this -> _bdd, $this -> _user, $this -> _mdp);
$cnx_ok = true;
}
catch (PDOException $error)
{
die();
$cnx_ok = false;
}
return $cnx_ok;
}
function selectionner($requete, $param = NULL)
{
$requete = $this -> prepare($requete);
if ($param[0] != NULL)
{
$nbelem = count($param);
for ($i = 0; $i < $nbelem; $i++)
{
$requete -> bindParam(key($param[i]), $param[i]);
}
}
$requete -> execute();
$requete -> setFetchMode(PDO::FETCH_OBJ);
return $requete;
}
function creer_uniqueid()
{
return md5(uniqid());
}
}
?>
Fichier gestion_connection.php
<?php
function ouvrir_connection($req_sql)
{
// Ouverture de la connexion vers la base de données
$req_sql = new gestion_sql();
$res_connection = $req_sql -> connection();
return $res_connection;
}
?>
Fichier gene_sql_traitement_inscription.php
<?php
function proceder_inscription()
{
// Préparation de la requête, et insertion du nouvel utilisateur dans la base.
$idunique = $req_sql -> creer_uniqueid();
$inscription = $req_sql -> prepare("INSERT INTO gen_users (login, mdp, adresse_mail, unique_id) VALUES(:login, :mdp, :email, :uniqueid)");
$inscription -> bindvalue(':login', $_POST['login'], gestion_sql::PARAM_STR);
$inscription -> bindvalue(':mdp', md5($_POST['mot_de_passe']), gestion_sql::PARAM_STR);
$inscription -> bindvalue(':email', $_POST['adresse_mail'], gestion_sql::PARAM_STR);
$inscription -> bindvalue(':uniqueid', $idunique, gestion_sql::PARAM_STR);
$inscription -> execute();
return $idunique;
}
function verif_sql_inscription($req_sql, $liste_verif)
{
$requete = "SELECT login, adresse_mail FROM gen_users WHERE login = :login OR adresse_mail = :adresse_mail";
// Retour est défini localement et est ici un tableau de résultat de requête mysql
$retour = $req_sql -> selectionner($requete, $liste_verif);
// On met le résultat de la requete dans un tableau, que l'on va renvoyer à la fonction php appelante.
$retourtab = array();
while ($ligne = $retour->fetch())
{
array_push($retourtab, $ligne);
}
return $retourtab;
}
?>
Merci bcp !