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

Langage PHP Discussion :

[Sécurité] Mysqli couldn't fetch() ..


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de ..:: Atchoum ::..
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 156
    Points
    156
    Par défaut [Sécurité] Mysqli couldn't fetch() ..
    Bonsoir tout le monde,

    J'ai beau chercher mon erreur mais je ne la voit pas...(d'ailleurs il n'y en a peut etre pas ... )

    J'ai une classe mymysqli que j'instancie a chaque page...
    Dans le header :
    <?php
    try
    {
    $mysqllink=new mynmysqli($_SERVER['DOCUMENT_ROOT']."/global/site.ini.php");
    }
    catch (Exception $e) {print $e;exit(1);}
    ?>
    Pour logguer un admin sur l'interface j'ai un login.php qui vérifie la connexion :
    <?php
    include_once($_SERVER['DOCUMENT_ROOT']."/global/lib.inc.php");
    session_start();
    try
    {
    $_SESSION['admin'] = new administrateur($mysqllink, $_POST['log'], $_POST['pass']);
    if (
    $_SESSION['admin']->connectUser())
    header("Location: index_admin.php");
    else
    header("Location: index.php");
    }
    catch( Exception $e) {print $e;exit(1);}
    ?>
    Jusque la tout vas bien je suis redirigé vers index_admin.php

    Dans ce fichier index_admin.php je vérifie la session:

    <?php
    try
    {
    if (
    $_SESSION['admin'])
    {
    if (!
    $_SESSION['admin']->verifAuth($_SERVER['SCRIPT_NAME']))

    {
    unset(
    $_SESSION);
    session_destroy();
    header("Location: index.php");
    exit(-
    1);
    }
    }else
    {
    header("Location: index.php");
    exit(-
    1);
    }
    }
    catch (Exception $warEx)
    {
    echo
    $warEx;
    exit(
    1);
    }
    ?>
    Les session_start() sont tous bien fait etc...
    voila le code de la fonction verifAuth()
    <?php
    private
    function checkLogin()
    {
    $query = "Select ADM_Login";
    $query .= " FROM TBL_ADMIN";
    $query .= " WHERE ADM_Login = '".$this->login."'";
    $query .= " AND ADM_Pass = '".$this->password."'";
    $result = $this->db->query($query);
    if (
    $result->num_rows == 1)
    return (
    true);
    return (
    false);
    }

    public function verifAuth($page)
    {
    if (
    $this->checkLogin())
    {
    if (
    ereg("^/admin/(.*).php", $page, $regs))
    {
    $temp = array();
    foreach (
    $this->listDroit as $key => $value)
    if (
    ereg("^$key", $regs[1], $tab))
    $temp[] = $key;
    if (
    sizeof($temp)>0)
    {
    arsort($temp);
    if (
    $this->listDroit[$temp[0]])
    return (
    true);
    }else
    return
    true;
    }
    }
    return (
    false);
    }
    ?>
    A la limite tout ces bout de code ne serventpas vraiment c'est juste pour que vous ayez tous.

    Mon erreur arrive lors du checkLogin appelé dans la fonction verfiAuth
    elle arrive a l'appelle de $this->db>query

    Warning: Couldn't fetch mymysqli in /var/www/html/LEAVITAL/leanature.novactive.com/wwwroot/classes/mynovasql.class.php on line 35

    Warning: Couldn't fetch mymysqli in /var/www/html/LEAVITAL/leanature.novactive.com/wwwroot/classes/mynovasql.class.php on line 36
    Déjà moi je n'avais jamais vu ces erreurs... et je comprends vraiment pas... si c'est déja arrivé a quelqu'un

    a ces lignes :
    <?php
    function query($query)
    {
    35
    $result = parent::query($query);
    36 if(
    mysqli_error($this))
    throw new SQLException(mysqli_error($this), mysqli_errno($this), $query);
    return
    $result;
    }
    ?>
    Merci d'avance


    Note: Si je déclare mon abjet mymysqli en global dans ma classe administrateur ( c'est a dire si je ne la passe pas en argument dans le constructeur) et bien ca marche.. seulementce n'est pas top d'avoir a faire des global $mysqllink; dans chaque fonction c'est pourquoi je veux que chaque objet qui a besoin d'accéder a la base est un attribut $db que je rempli dans le constructeur... mais avec cette dernière methode ca coince...
    ++

    Php 5.0.4 sur une BSD 5.4 avec mysql 4.1
    On ne peut empêcher les vagues, mais on peut apprendre à les surfer...
    http://blog.plopix.net
    http://www.ez-france.org

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut,
    il te faut peut etre mettre des methodes __sleep et __wakeup dans ta classe pour lui refaire la connection a la base a la récupération de la session.

    Dans la classe mynmysqli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function __sleep()
    	{
    		return array_keys(get_class_vars(get_class($this)));
    	}
     
    	function __wakeup()
    	{
    		//tu refais ta connexion et ton select db	
            }
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    Membre habitué Avatar de ..:: Atchoum ::..
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 156
    Points
    156
    Par défaut
    Ok j'ai fait comme tu as dis et ca marche....
    <?php
    &#160;&#160;&#160;&#160;
    function&#160;__sleep()
    &#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;
    array_keys(get_class_vars(get_class($this)));
    &#160;&#160;&#160;&#160;}

    &#160;&#160;&#160;function&#160;
    __wakeup()
    &#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;
    try&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    parent::__construct(
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $this->dbase_hostname,
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $this->dbase_username,
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $this->dbase_password,
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $this->dbase_name
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    );&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    catch&#160;(WarningException&#160;$we)&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(
    mysqli_connect_error()){
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    throw&#160;new&#160;DBConnectException(mysqli_connect_error(),&#160;mysqli_connect_errno());
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    /*&#160;Throw&#160;an&#160;error&#160;if&#160;the&#160;connection&#160;fails&#160;*/
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    }
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    &#160;&#160;&#160;}
    ?>
    Mais j'ai relu la doc sur c'est deux fonctions magiques et je ne comprends pas du tout pourquoi je suis olbligé de faire cela ?
    L
    e but avoué de __sleep est de clore toutes les connexions aux bases de données que l'objet peut avoir, valider les données en attente ou effectuer des tâches de nettoyage. De plus, cette fonction est utile si vous avez de très gros objets qui n'ont pas besoin d'être sauvegardés en totalité.
    Personne ne dit que c'est obligatoire ?
    Et c'est pas un peu "bourrin de recréer la connexion comme ca ? et surtout pourquoi n'est t elle pas garder ?
    On ne peut empêcher les vagues, mais on peut apprendre à les surfer...
    http://blog.plopix.net
    http://www.ez-france.org

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    elle n'est pas gardée car ce n'est pas un objet php mais une ressource externe qu il semble avoir du mal a serializer.

    C'est une sorte de pointeur memoire vers ta connection et ca il arrive pas a le stocker en session sur fichier et a le récupérer.

    Pour plus de sécurité, tu peux fermer la connection dans le __sleep meme si normalement mysql le fait tout seul
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  5. #5
    Membre habitué Avatar de ..:: Atchoum ::..
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 156
    Points
    156
    Par défaut
    Ok Ok bah encore merci c'est cool je vais pouvoir aller coucher l'esprit tranquille

    Bonne nuit
    On ne peut empêcher les vagues, mais on peut apprendre à les surfer...
    http://blog.plopix.net
    http://www.ez-france.org

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    oui je crois que je vais y aller aussi, il se fait tard
    bonne nuit aussi
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Flex4] AMFPHP et RemoteObject : couldn't fetch mysqli
    Par Pwill dans le forum Flex
    Réponses: 8
    Dernier message: 17/09/2010, 09h25
  2. [MySQL] [MySQLi] - problème récupération de valeur fetch()
    Par fabtav59 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/04/2010, 13h25
  3. [MySQL] mysqli fetch array
    Par Kiwimenthe dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/08/2007, 09h17
  4. La Sécurité dans Access
    Par Maxence HUBICHE dans le forum Sondages et Débats
    Réponses: 81
    Dernier message: 24/06/2007, 01h07
  5. Pb de sécurité
    Par xtrips dans le forum Débuter
    Réponses: 6
    Dernier message: 16/04/2003, 07h50

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