Problèmes de connexion sur mon site (member.func.php)
RésoluZakarya93 Messages postés 1026 Statut Membre -
Je me suis attaqué à l'interface de mon site, pour cela j'ai commencé à créer membre.php et membre.func.php or j'ai rencontré 2 erreurs :
Notice: Undefined variable: bdd in C:\wamp\www\rs\functions\membre.func.php on line 8
et
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\rs\functions\membre.func.php on line 8
Membre.func.php :
<?php
//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
$infos=array();
$pseudo = $_SESSION['pseudo'];
$res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount())
{
$infos [] = $data;
}
return $infos;
}
membre.php :
<div class='header'>
<?php
$infos = infos_membre_connecte();
foreach($infos as $info)
{
echo "Bienvenue ".$info['pseudo'];
}
?>
</div>
Merci d'avance svp !!!!
- Problèmes de connexion sur mon site (member.func.php)
- Wannonce nouveau site - Guide
- Gmail connexion - Guide
- Site de telechargement - Accueil - Outils
- Wannonce site fermé - Guide
- Site x - Guide
11 réponses
Problème identifié : des notices et des erreurs fatales surviennent lorsque la fonction infos_membre_connecte() tente d'exécuter $db->query sans que $db soit défini, empêchant la récupération des informations de l'utilisateur connecté. Des solutions essentielles consistent à inclure correctement le fichier de connexion (functions/connect.php) et à s'assurer que la variable $db est initialisée et accessible dans infos_membre_connecte, afin que la requête puisse être exécutée. En outre, des corrections de syntaxe et d'inclusion apparaissent, notamment le bon placement des balises PHP et la correction de chemins et de points-virgules, pour éviter des erreurs de chargement et d'interprétation.
<?php
include(functions/connect.php)
//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
$infos=array();
$pseudo = $_SESSION['pseudo'];
$res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount())
{
$infos [] = $data;
}
return $infos;
}
<div class='header'>
<?php
include(functions/membre.func.php)
$infos = infos_membre_connecte();
foreach($infos as $info)
{
echo "Bienvenue ".$info['pseudo'];
}
?>
</div>
maintenant j'ai ; Parse error: syntax error, unexpected '$infos' (T_VARIABLE) in C:\wamp\www\rs\pages\membre.php on line 4
Call Stack
include('functions/membre.func.php');
ce qui donne : Fatal error: Cannot redeclare infos_membre_connecte() (previously declared in C:\wamp\www\rs\functions\membre.func.php:3) in C:\wamp\www\rs\functions\membre.func.php on line 16
register.func.php :
<?php
//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
$infos=array();
$pseudo = $_SESSION['pseudo'];
$res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount())
{
$infos [] = $data;
}
return $infos;
}
que faire ?
ce qui donne : Fatal error: Cannot redeclare infos_membre_connecte() (previously declared in C:\wamp\www\rs\functions\membre.func.php:3) in C:\wamp\www\rs\functions\membre.func.php on line 16
Dans ta page principape (index.php je crois me souvenir) .. tu as déjà une fonction qui fait AUTOMATIQUEMENT l'include des fichiers qui se trouvent dans le répertoire functions...
(du moins.. le fichier FUNC correspondant à la page que tu affiches )
Donc .. IL NE FAUT PAS EN REFAIRE UN INCLUDE !!!
Ensuite... je ne t'ai jamais demandé de le faire ... moi je je t'ai seulement dis : Il manque ton fichier de connexion à ta BDD !
ce qui était presque bon dans le code donné dans ta première réponse
Le mieux étant de remplacer, pour les fichiers OBLIGATOIRES (comme celui pour se connecter à la BDD), d'utiliser REQUIRE à la place de INCLUDE ... et encore mieux .. REQUIRE_ONCE .. qui n'en fera l'include QUE si il n'est pas déjà fait ailleurs dans ton code...
(sans oublier les QUOTES autour du fichier à inclure bien entendu)
Ce qui donne :
<?php
// FICHIER membre.func.php
// Connexion à la BDD
require_once('functions/connect.php');
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo){
$res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount()){
$infos [] = $data;
}
}else{
$infos[] = "Erreur : Variable de Session Utilisateur introuvable";
}
return $infos;
}
Cordialement,
Jordane
Voir le manuel : https://www.php.net/manual/fr/pdostatement.rowcount.php
L'idéal serait juste de faire un FETCHALL
https://www.php.net/manual/en/pdostatement.fetchall.php
=> ce qui stocke directement le résultat de la requête dans un ARRAY
Cela donnerai quoi ? comment régler l'erreur à propos de function ? (com du dessus)
Je t'ai donné la réponse !
La seule chose à faire est : NE PAS REMETTRE (dans ton fichier membre.php) L'INCLUDE DE TON FICHIER functions/membre.func.php
<div class='header'>
<?php
$infos = infos_membre_connecte();
foreach($infos as $info)
{
echo "Bienvenue ".$info['pseudo'];
}
?>
</div>
membre.func.php :
<?php
// FICHIER membre.func.php
// Connexion à la BDD
require_once('functions/connect.php')
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo){
$res = $db->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount()){
$infos [] = $data;
}
}else{
$infos[] = "Erreur : Variable de Session Utilisateur introuvable";
}
return $infos;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionet dans ta page membre.func.php ..... tu mets $db ????
L'erreur est là !
le code que j'ai modifié : (member.func.php)
<?php
/// Connexion à la BDD
$connectPhp = __DIR__ . '/functions/connect.php';
if(file_exists($connectPhp)){
require_once($connectPhp);
}else{
echo "<br> Erreur : Le fichier $connectPhp n'existe pas";
}
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo){
$res = $bdd-->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount()){
$infos [] = $data;
}
}else{
$infos[] = "Erreur : Variable de Session Utilisateur introuvable";
}
return $infos;
}
<?php
//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
$infos=array();
$pseudo = $_SESSION['pseudo'];
$res = $bdd->query("SELECT * FROM profil WHERE pseudo = '$pseudo'");
while ($data = $res->rowCount())
{
$infos [] = $data;
}
return $infos;
}
le code que j'ai modifié : (register.func.php)
REGISTER ???????
On travaille sur le fichier MEMBRE depuis tout à l'heure .... !
Pourquoi es-tu allé dans ce fichier ???????
Bon... reprenons
Dans le fichier membre.func.php
On va régler les soucis d'include...
Comme le proposait hharchi9 on va utiliser $_SERVER['DOCUMENT_ROOT']
Donc :
Page membre.func.php :
<?php
//*********************************************//
//Fichier : membre.func.php
//*********************************************//
//-------------------------------------------
// Include du fichier de connexion à la BDD
//-------------------------------------------
$DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
$CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
if(file_exists($CnxBDD)){
require_once($CnxBDD) ;
}else{
echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
}
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
$sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
$params = array(":pseudo"=>$pseudo);
//exécution de la requête
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
// on stocke le résultat de la requête dans un ARRAY
$infos = $prepare->fetchall();
}catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
return $infos;
}
Page membre.php
<div class='header'>
<?php
$infos = infos_membre_connecte();
foreach($infos as $info){
echo "Bienvenue ".$info['pseudo'];
}
?>
</div>
Fichier connect.php
<?php
/**
* Fichier connect.php
**/
//--------------------------------//
//démarrage de session
//--------------------------------//
if(session_id() == '') {
session_start();
}
//--------------------------------//
// Infos de connexion à la BDD
$serveur = "localhost";
$user = "root";
$pwd = "";
$dbname = "rs";
//--------------------------------//
// Connexion
//--------------------------------//
try {
$bdd = new PDO ("mysql:host=".$serveur.";dbname=".$dbname.";charset=utf8", $user,$pwd);
}catch(Exception $e) {
die('Erreur de connexion à la BDD '.$e->getMessage());
}
?>
... et pour ce qui est de ta page register ... REMETS CE QU'IL Y AVAIT AVANT !
-Notice: Undefined variable: bdd in C:\wamp\www\rs\functions\membre.func.php on line 29
-Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\rs\functions\membre.func.php on line 29
<?php
//*********************************************//
//Fichier : membre.func.php
//*********************************************//
ini_set("display_errors", "1");
error_reporting(E_ALL);
//-------------------------------------------
// Include du fichier de connexion à la BDD
//-------------------------------------------
$DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
$CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
if(file_exists($CnxBDD)){
require_once($CnxBDD) ;
}else{
echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
}
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
global $bdd; // déclaration globale de BDD
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
$sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
$params = array(":pseudo"=>$pseudo);
//exécution de la requête
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
// on stocke le résultat de la requête dans un ARRAY
$infos = $prepare->fetchall();
}catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
return $infos;
}
Donc maintenant.. il faut regarder le code qui te sert à afficher .
par contre... c'est visiblement un NOUVELLE QUESTION .. donc ... tu clos cette discussion et tu en ouvres une autre !
Et au passage ... tu fourniras le code source GÉNÉRÉ de ta page
(c'est à dire .. tu affiches ta page dans ton navigateur, tu fais un clic droit dessus, tu sélectionnes "afficher le code source" ... et tu le copie/colle dans le forum )
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='css/style.css'>
</head>
<meta charset="UTF-8" >
<body>
<div id='content'>
<div class='header'>
</div> </div>
</body>
Le code qui sert à afficher est celui ci n'est ce pas ?
<div class='header'>
<?php
$infos = infos_membre_connecte();
foreach($infos as $info){
echo "Bienvenue ".$info['pseudo'];
}
?>
</div>
Le code qui sert à afficher est celui ci n'est ce pas
Oui.
A la limite pour tester on pourrait essayer ça :
<div class='header'>
<?php
$infos = infos_membre_connecte();
print_r( $infos );
foreach($infos as $info){
echo "Bienvenue ".isset($info['pseudo'])?$info['pseudo']:'';
}
?>
</div>
et dans le fichier
<?php
//*********************************************//
//Fichier : membre.func.php
//*********************************************//
ini_set("display_errors", "1");
error_reporting(E_ALL);
//-------------------------------------------
// Include du fichier de connexion à la BDD
//-------------------------------------------
$DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
$CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
if(file_exists($CnxBDD)){
require_once($CnxBDD) ;
}else{
echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
}
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
global $bdd; // déclaration globale de BDD
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
$sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
$params = array(":pseudo"=>$pseudo);
//le temps des tests:
$infos['sql'] = $sql;
$infos['params'] = $params;
//exécution de la requête
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
// on stocke le résultat de la requête dans un ARRAY
$infos = $prepare->fetchall();
}catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
return $infos;
}
?php
//*********************************************//
//Fichier : membre.func.php
//*********************************************//
ini_set("display_errors", "1");
error_reporting(E_ALL);
//-------------------------------------------
// Include du fichier de connexion à la BDD
//-------------------------------------------
$DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "/rs"; // chemin racine de ton site
$CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
if(file_exists($CnxBDD)){
require_once($CnxBDD) ;
}else{
echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
}
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
global $bdd; // déclaration globale de BDD
$infos=array();
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
$sql = "SELECT * FROM profil WHERE pseudo = :pseudo";
$params = array(":pseudo"=>$pseudo);
//le temps des tests:
$infos['sql'] = $sql;
$infos['params'] = $params;
//exécution de la requête
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
// on stocke le résultat de la requête dans un ARRAY
$infos['result'] = $prepare->fetchall();
}catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
return $infos;
}
Et donc.. la requête à tester est :
SELECT * FROM profil WHERE pseudo ='xzak47'
et pour ce qui est du message d'erreur, essayes ça :
<div class='header'>
<?php
$result= infos_membre_connecte();
//----------------------------------------//
//le temps des tests :
//----------------------------------------//
echo "<pre> Result de la fonction : <br>";
print_r( $infos );
echo "</pre>";
//----------------------------------------//
$infos = $result['result'];
foreach($infos as $info){
$pseudo = isset($info['pseudo'])?$info['pseudo']:'';
echo "Bienvenue ". $pseudo;
}
?>
</div>
<div class='header'>
<?php
$result= infos_membre_connecte();
//----------------------------------------//
//le temps des tests :
//----------------------------------------//
echo "<pre> Result de la fonction : <br>";
print_r( $infos );
echo "</pre>";
//----------------------------------------//
$infos = $result['result'];
foreach($infos as $info){
$pseudo = isset($info['pseudo'])?$info['pseudo']:''
echo "Bienvenue ". $pseudo;
}
?>
</div
sinon pour le pb de requete, il faut donc que je crée cette table rs.profil ?