IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Cookie en PHP 5.5 + PDO


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Cookie en PHP 5.5 + PDO
    Bonsoir,
    Je continue laborieusement ma migration de PHP 4 + Mysql vers PHP 5.5 + PDO et, depuis 2 jours, je n'arrive pas à résoudre un problème de cookie sur ma page d'administration du site.

    Un premier bloc vérifie à l'arrivée du visiteur (de l'administrateur) si il y a un cookie avec le login et le password enregistré dans la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // Identification administrateur
    $is_admin = 0;
    $admin_idx = 0;
    $superadmin = 0;
    $profil = array();
    $access = array();
    $alogin = base64_decode($_COOKIE[$site_cookie."AdminLogin"]);
    $apassword = base64_decode($_COOKIE[$site_cookie."AdminPassword"]);
    if (!empty($alogin) && !empty($apassword)) {
      $requete_q = $bdd_base->prepare("SELECT idx, pseudo, email, access, super FROM table_admins WHERE login = :alogin AND password = :apassword");
      $requete_q->bindParam(':alogin',$alogin,PDO::PARAM_STR);
      $requete_q->bindParam(':apassword',$apassword,PDO::PARAM_STR);
      $requete_q->execute();
      $ligne_n 	= $requete_q->rowCount();
      $profil		= $requete_q->fetch();
      $requete_q->closeCursor();
      if ($ligne_n==1){
        $admin_idx = $profil["idx"];
        $access = explode(",", $profil["access"]);
        $superadmin = $profil["super"];
        $is_admin = 1;
      }
    }
    Ensuite, si non trouvé, affichage du formulaire de connexion
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <table border="1" align="center" bgcolor="ffffff">
    <tr><td>
    <form action="index.php" method="POST" name="f1">
    <input type="hidden" name="poster" value="1">
    <table cellspacing="0" cellpadding="5" border="0" align="center" class="tbg">
    <tr><td><b>Login :</b></td><td><input type="text" name="login" size="20"></td></tr>
    <tr><td><b>Mot de passe :</b></td><td><input type="password" name="password" size="20"></td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="S'identifier" align="center"></td></tr>
    </table>
    </form>
    </td>
    </tr>
    </table>

    Puis enfin et si login et mot de passe sont bons, création des cookies et poursuite du traitement normal après nouveau passage par le 1er bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if ($poster == 1) {
      $requete_qq = $bdd_base->prepare("SELECT login, password FROM table_admins WHERE login = :login AND password = :password");
      $requete_qq->bindParam(':login',$_POST['login'],PDO::PARAM_STR);
      $requete_qq->bindParam(':password',$_POST['password'],PDO::PARAM_STR);
      $requete_qq->execute();
      $ligne_nn 	= $requete_qq->rowCount();
      $ligne_rr		= $requete_qq->fetch();
      $requete_qq->closeCursor();
      if ($ligne_nn==1){
    		setCookie($site_cookie."AdminLogin", base64_encode($ligne_rr["login"]), time() + (3600 * 24 * 30));
    		setCookie($site_cookie."AdminPassword", base64_encode($ligne_rr["password"]), time() + (3600 * 24 * 30));
      }
    	header("Location: index.php?");
    	echo "Recharge la page !";
    	exit();
    }
    Il n'y a pas d'anomalie de signalée mais çà boucle sur le formulaire qui s'affiche en permanence comme si la variable $poster n'était pas prise en compte.
    En début de page, j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $poster = $_POST['poster'];
    Si quelqu'un peut me guider ou me signaler une erreur, un grand merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as contrôlé ce que valait $ligne_n ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour sabotage

    Je ne peux vas vérifier dans la mesure où la seule chose qui fonctionne est l'affichage du formulaire de connexion.

    Au moment de cet affichage, le 1er bloc n'a pas encore trouvé les cookies sur mon pc et je suppose que cette $ligne_n vaut zéro

    Avant de lancer la page, je vérifie les cookies de mon pc et ils n'y sont pas

    Par contre, j'ai fait le test suivant :
    Connexion à la page d'administration avec mon script ancienne version.
    Je vérifie sur mon pc, les cookies sont bien présents.
    Je lance le nouveau script PHP 5.5 + PDO et je rentre bien dans l'administration.
    Donc l'étape du 1er bloc est passée et $is_admin = 1

    Bonne journée

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le premier code n'est pas dans index.php ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Effectivement, le 1er bloc est dans une page séparée

    Voila la structure de la page index.php et ce bloc est dans lib.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
     
    // Empeche la page d'etre stockee dans le cache.
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
     
    include("../inc/config.php");
    include("../inc/fonctions.php");
    include("../inc/bdd_base.php");
    include("lib.php");
     
    $poster = $_POST['poster'];
     
    // Deconnection
    if ($is_admin == 1 && $_POST['logout'] == 1) {
    .......
    }
     
    // Entrer
    if ($poster == 1) {
    ....... code du 3ème bloc

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Et donc quand l'authenfication echoue on retourne bien sur la page index et le formulaire non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Absolument et on boucle, soit du fait que les cookies ne s'écrivent pas, soit que $poster == 1 ne fonctionne pas.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Donc tu peux bien contrôler comment se déroule le script, quels sont les résultats des requêtes, ce que valent les variables etc. non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour sabotage,

    J'avais essayé mais les variables suite aux requêtes étaient vides.

    Que celles liées à la lecture/présence des cookies soient vides, normal quand on arrive la première fois.

    mais comme l'écriture des cookies, après remplissage du formulaire, ne se fait pas, on boucle.

    La seulle chose que j'ai pu voir, c'est que $poster est vide.

    Hier, je me suis intéressé à la notion des sessions et comme j'ai moins de problèmes, je crois que je vais abandonner les cookies.

    Merci d'avoir essayé de m'aider
    Bonne journée

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais comme l'écriture des cookies, après remplissage du formulaire, ne se fait pas, on boucle.
    C'est pour cela qu'il faut contrôler le résultat de la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [Cookies] session php cookie
    Par afroweb dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2007, 10h55
  2. [Cookies] Site PHP multilangue
    Par RobinNono dans le forum Langage
    Réponses: 4
    Dernier message: 15/05/2006, 13h47
  3. Réponses: 4
    Dernier message: 03/05/2006, 18h23
  4. [Cookies] Cookie avec PHP
    Par fleo0 dans le forum Langage
    Réponses: 3
    Dernier message: 03/03/2006, 11h32
  5. [Cookies] Quand PHP rhyme avec étrange... .
    Par JSuper_Kitten dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2005, 23h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo