Aller au contenu
Zebulon
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

p'tite erreur de code


olly

Messages recommandés

J'avais codé une premiére fonction (son but est d'autoriser le membre à voir la page) :

<?php
session_start();
if(!isset($_SESSION['idbees']))
{
echo 'Vous n\'êtes pas connecté au site.  Vous ne pouvez donc pas venir sur cette page.';
exit;
}
?>

 

que j'ai voulu ameliorer fonctionauxiliaire:

 

<?PHP
// fichier fonctionAuxiliaires.php
function verif(){
if(!isset($_SESSION['idbees']))
{
exit ('Vous n\'êtes pas connecté au site.  Vous ne pouvez donc pas venir sur cette page.');
}
}
?>

 

En incluant cette fonction dans la page réservée seul le membre y a accés.

 

Ce que je veux faire c'est récupérer l'idbees sur chaque page reservée pour le réécrire dans une autre table.

 

Mais je ne comprends pas pourqoi j'ecrase les données puisque je récupére l'idbees du formulaire de connexion. :-?

Lien vers le commentaire
Partager sur d’autres sites

J'avais codé une premiére fonction (son but est d'autoriser le membre à voir la page) :

<?php
session_start();
if(!isset($_SESSION['idbees']))
{
echo 'Vous n\'êtes pas connecté au site.  Vous ne pouvez donc pas venir sur cette page.';
exit;
}
?>

Euh... Oui, sauf que ce n'est pas une "fonction". Où est exécuté ce code ?

 

que j'ai voulu ameliorer fonctionauxiliaire:

 

<?PHP
// fichier fonctionAuxiliaires.php
function verif(){
if(!isset($_SESSION['idbees']))
{
exit ('Vous n\'êtes pas connecté au site.  Vous ne pouvez donc pas venir sur cette page.');
}
}
?>

En quoi c'est une "amélioration" ? A part le fait que c'est maintenant une fonction mais qu'elle fait la même chose que le code au-dessus en une seule ligne, et que le session_start() a disparu... ? Où est-elle appelée ?

 

En incluant cette fonction dans la page réservée seul le membre y a accés.
En te contentant d'inclure la déclaration de la fonction tu ne fais rien. A quel moment cette fonction est-elle appelée ? Est-ce que le session_start() est bien fait avant d'appeler cette fonction ? Il faut que PHP récupère la session avant que tu ne puisse réellement récupérer les données que tu as stockées dedans...

 

Ce que je veux faire c'est récupérer l'idbees sur chaque page reservée
Le "récupérer" d'accord mais d'où ? De la session où tu l'as stocké après authentification, ou depuis un $_POST qui n'est pas forcément là, comme tu le fais dans le code que tu as fourni au-dessus ?
(...) pour le réécrire dans une autre table.
Réécrire ? Autre table ? Nulle part il n'est question d'aller vérifier l'authentification de l'utilisateur en base de données, donc il faudrait déjà nous expliquer où tu pioches les données avant de vouloir les réécrire ailleurs. A ce sujet, où veux-tu les "réécrire" ? Pour quelle raison ?

 

Mais je ne comprends pas pourqoi j'ecrase les données puisque je récupére l'idbees du formulaire de connexion. :-?
Franchement nous non plus on ne comprend pas pourquoi tu écrases les données de session systématiquement :-P

Tu "récupères" l'idbees du formulaire de connexion un peu trop systématiquement (i.e. à chaque chargement de la page), c'est ça le problème. Tu ne vérifies pas que des données ont été réellement envoyées par POST avant de les mettre en session (et tu ne vérifies pas, d'abord, s'il n'y avait pas des données en session avant de les écraser)...

Lien vers le commentaire
Partager sur d’autres sites

En fait ce que je cherche à faire c'est récupere l'idbees de connexion du traitement de connaxion :

<?php

include('global/haut.php');

include('global/entete.php');

include('global/menus.php');
?>

<?php

try
{
$bdd = new PDO('mysql:host=localhost;dbname=sport', 'root', '');
$bdd -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
echo 'Erreur : ' . $e->getMessage();
}

$idbees = (isset($_POST['idbees'])) ? $_POST['idbees'] : '';
$mdpbees = (isset($_POST['mdpbees'])) ? htmlspecialchars($_POST['mdpbees']) : '';

$mdpbees = sha1($mdpbees); // Cryptage du mot de passe

$nbre = $bdd->prepare("SELECT COUNT(*) AS exist FROM bees WHERE idbees=:idbees");
$nbre->bindValue(':idbees', $idbees, PDO::PARAM_INT);
$nbre->execute();

$donnees = $nbre->fetch();

if($donnees['exist'] != 0) {
$quete = $bdd->prepare("SELECT * FROM bees WHERE idbees=:idbees");
       $quete->bindValue(':idbees', $idbees, PDO::PARAM_INT);
       $quete->execute();
$infos = $quete->fetch();

if($mdpbees == $infos['mdpbees']) {
       $_SESSION['idbees'] = $_POST['idbees'];
       echo 'Bonjour ' . $_POST['idbees'] . ' <a href="demandebe.php">merci de cliquer ici</a>pour nous donner vos disponibilités</p>';
} else {
	echo 'Vous n\'avez pas rentré les bons identifiants';
}
}
?>
<?php include("global/pdp.php"); ?> 

 

pour l'afficher par exemple : bonjour 'idbees' sur une page de membre comme celle indiquée plus haut (debut du code) :

<?php

include('global/haut.php');

include('global/entete.php');

include('global/menus.php');

include('secu/fonctionsauxiliaires.php');
$_SESSION['idbees']=$_POST['idbees'];
verif();

?>

       <!-- Le corps -->

      <div id="corps">

               <form action="trait-demandebe.php" method="post" enctype="multipart/form-data">
<?php  
     echo 'Bonjour ' . $_SESSION['idbees'] . ' vous êtes disponible :';        
?>

<fieldset><label><legend>

 

pour ensuite le traiter et le rediriger vers uns autre table de ma bdd...

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends pas pourquoi tu t'évertues à vouloir écraser ta variable de session par les données postées :-?

 

en gros, l'algorithme est le suivant

 

page xxx

session_start();
si $_SESSION['idbees'] existe,
utilisateur déjà authentifié
   inclusion de la page xxx (récupération des autres variables de session, etc etc)
sinon
  inclusion du formulaire d'authentification avec méthode POST
  vérification des contraintes d'intégrité en javascript avant envoi du formulaire

 

traitement du formulaire d'authentification

session_start();
vérification des données POSTées
vérification des variables de session
interrogation de la BDD
affectation des variables de session: par exemple $_SESSION['idbees'] = $_POST['idbees'];
création de cookies
redirection vers page xxx

 

page de déconnexion

session_start();
session_destroy();

Lien vers le commentaire
Partager sur d’autres sites

Je ne doute pas un seul instant que ça constitue ce que tu aurais voulu faire, cependant je vais devoir t'annoncer de bien mauvaises nouvelles...

if(!isset($_SESSION['idbees'])) {
   exit ('Vous n\'êtes pas connecté au site.  Vous ne pouvez donc pas venir sur cette page.');
}

Ces instructions, qui constituent la totalité de la fonction "verif()" ne font que vérifier s'il existe un élément nommé "idbees" dans la session et si la valeur de celui-ci n'est pas "null" (i.e. il a une "vraie" valeur). Si ce test n'est pas vrai (donc, s'il n'y a pas d'élément "idbees" non nul dans la session) alors le script se termine immédiatement en affichant "Vous n'êtes pas connecté ..." dans la page web retournée au navigateur.

C'est tout.

Rien de plus, rien de moins.

 

$_SESSION['idbees']=$_POST['idbees'];

Cette ligne de code fait en sorte de valoriser l'élément nommé "idbees" dans la session (ou de le créer s'il n'existait pas déjà) avec la valeur reçue dans la requête si toutefois cette valeur était associée à la clé "idbees" et si elle avait été reçue par POST (donc reçue depuis un champ de formulaire nommé "idbees" dans un formulaire dont la méthode est "POST").

Lorsque la requête ne contient aucun élément "idbees" en POST alors $_POST['idbees'] est null.

Ceci signifie que 100% du temps, lorsque l'utilisateur ne vient pas de cliquer sur le bouton "Envoyer" du formulaire de login, la session est écrasée avec ... avec rien du tout en fait, donc l'élément 'idbees' de la session est remis à null !

Cette seule ligne ne permet pas "d'identifier" quoi que ce soit ni ne "permet" une quelconque opération à qui que ce soit. Au contraire.

 

La conséquence directe de ces deux actions provoque le comportement que tu peux constater à l'utilisation de ton site : "ça" ne fonctionne pas.

 

Les lignes de code ne sont pas des formules magiques. Rien de plus que ce qui est codé ne s'exécute (la plupart du temps, parce que certains langages [se] permettent d'exécuter plus que ce que l'on voit mais dans le cas présent on n'en est pas encore là). Si tu ne vas pas rechercher la valeur du mot de passe en base pour comparer avec ce que tu reçois du formulaire de login alors aucune vérification ne sera faite !

J'ai du mal à croire les deux dernières réponses que tu as postées, mais il doit sûrement y avoir une explication... si tu pouvais nous en dire un peu plus sur ton expérience de programmation et d'où te vient l'inspiration pour ce site, peut-être que cela nous aiderait à comprendre ?

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...