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 :

Itérateur [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Itérateur
    Bonjour,
    Je souhaite exploiter la classe Iterator et j'ai des soucis.
    Je trouve bien le 1er puis le suivant (càd le 2ième et puis c'est tout)
    Je trouve aussi le dernier (quoique ce ne soit prévu dans la classe originale) et le précédent le N-1 mais pas le N-2.....
    Cela fait depuis ce matin tôt que je suis sur le pb, maintenant je le soumets à votre perspicasité !
    Je ne mets pas le code de la forme ou l'HTML, c'est sans importance, sachez juste que les évents First/Next/Prev/Last sont des boutons interceptés par $_POST !

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <?php 
    class MYsqlCursor implements Iterator 
    { 	private $result, $position, $row_data, $numrows ; 
     
        public function __construct () 
        { 	$sql    		= "SELECT * FROM  SCREEN";
    	$db     		= new MySQL(true /*utf8*/ , false /* debug */);
            $this->result   = $db->query($sql); 
            $this->position = 0; 
    	$this->numrows  = mysql_affected_rows() - 1;
        } 
     
        public function rewind ($offset=0) 															// First or anu other specified position
        { 	$this->position = $offset ; 
            mysql_data_seek($this->result, $this->position); 
     
            /* The initial call to valid requires that data 
                pre-exists in $this->row_data 
            */ 
            return($this->current()); 
        } 
     
        public function first()						
        { 	$this->position = 0 ; 
            mysql_data_seek($this->result, $this->position); 
            return($this->current()); 
        } 
     
        public function next() 
        { 	if ($this->position + 1 < $this->numrows)
               mysql_data_seek($this->result, ++$this->position);
            return($this->current()); 
        } 
        public function prev() 
        { 	if ($this->position - 1 > 0)
    	    mysql_data_seek($this->result, --$this->position); 
            return($this->current()); 
        } 
     
    	public function last()
    	{	$this->position = $this->numrows;
                    mysql_data_seek($this->result, $this->position);
    		return($this->current()); 
    	}
    //  -----------------------------------------------------------------------------
        public function current() 
        { 	return( $this->row_data = mysql_fetch_assoc($this->result) ) ;     } 
     
        public function key() 
        { 	return $this->position;     } 
     
        public function valid () 
        { 	return (boolean) $this->row_data;     } 
     
    	public function status()
    	{	return(" [".$this->position. "/".$this->numrows. "]") ; 	}
    } 
     
    ?>
     
    <!-- ============================================================================================================================ -->
    <!-- ===                        Body.                                                                                         === -->
    <!-- ============================================================================================================================ -->
    <?php
    $MYCursor = new MYsqlCursor() ;
     
    if (isset($_POST["First"]))
    	{		$Cursor   = $MYCursor->first() ;
    			print_r($Cursor) ;
    	}
     
    if (isset($_POST["Next"]))
    	{		$Cursor = $MYCursor->next() ;
    			print_r($Cursor) ;
    	}
     
    if (isset($_POST["Prev"]))
    	{		$Cursor = $MYCursor->prev() ;
    			print_r($Cursor) ;
    	}
     
    if (isset($_POST["Last"]))
    	{		$Cursor = $MYCursor->last() ;
    			print_r($Cursor) ;
    	}
     
     
    ?>
    J'ai vérifié les résultas des "mysql_data_seek', ils sont === TRUE !

    Je n'ai rien dans le log PHP et je peux réitèrer ces mêmes tests "advitam eternam"....

    Merci pour tout

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    il y a un problème avec la méthode "next", elle doit être définie pour "Iterator" regarde là :
    http://fr2.php.net/class.iterator

    donc tu dois obligatoirement avoir ça pour "next"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        function next() {
            ++$this->position;
        }

  3. #3
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Mais je l'ai..... Class ITERATOR
    Mais je l'ai pour NEXT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public function next() 
        { 	if ($this->position < $this->numrows)
            	mysql_data_seek($this->result, ++$this->position);
            return($this->current()); 
        }
    Je me demande si une partie du problème ne vient pas du faut que je n'adresse pas un simple array mais un cursor MYsql !

    @ ton avis ?

  4. #4
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Class ITERATOR soucis
    Au plus je fais du debugging, des user_error au + je me demande si position et numrows ne doivent pas être des variables de session ou déclarées comme "global" dans la classe ....
    Je constate que $this->position revient toujours à zéro !

    Je fais donc un FIRST et 2 NEXT successifs....

    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
    25
    26
    27
    28
    Début event FIRST
    [21-May-2010 15:19:50] PHP Notice:  First - Before => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 40
    [21-May-2010 15:19:50] PHP Notice:  Current[0] => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 67
    [21-May-2010 15:19:50] PHP Notice:  Current[1] => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 69
    [21-May-2010 15:19:50] PHP Notice:  Current[2] => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 71
    [21-May-2010 15:19:50] PHP Notice:  Current[3] => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 79
    
    Début event NEXT
    [21-May-2010 15:19:54] PHP Notice:  Next - Before => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 46
    [21-May-2010 15:19:54] PHP Notice:  Next - After  => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 49
    [21-May-2010 15:19:54] PHP Notice:  Current[0] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 67
    [21-May-2010 15:19:54] PHP Notice:  Current[1] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 69
    [21-May-2010 15:19:54] PHP Notice:  Current[2] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 71
    [21-May-2010 15:19:54] PHP Notice:  Current[3] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 79
    
    Passe bien de 0 à 1
    
    
    Début event NEXT
    
    Au début de cet event, current est à 0 !!!!!
    [21-May-2010 15:20:16] PHP Notice:  Next - Before => Position [0] - Numrows[34] in F:\WebSites\test\iterator.php on line 46
    [21-May-2010 15:20:16] PHP Notice:  Next - After  => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 49
    [21-May-2010 15:20:16] PHP Notice:  Current[0] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 67
    [21-May-2010 15:20:16] PHP Notice:  Current[1] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 69
    [21-May-2010 15:20:16] PHP Notice:  Current[2] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 71
    [21-May-2010 15:20:16] PHP Notice:  Current[3] => Position [1] - Numrows[34] in F:\WebSites\test\iterator.php on line 79

    Tout ce que je peux conclure des user_error est que la méthode current n'a aucune influence sur ces 2 chiffres, ce qui est logique !

    Ton avis ? Merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Salut,

    Désolé je n'ai pas trop regardé et me suis arrêté à ça :

    Tu n'affectes nulle part la valeur de $position à ton objet. Au lieu de ça tu fais même un :

    ... dans le constructeur.

    Autrement dis il y a déjà un problème à ce niveau car $this->position sera toujours égale à 0.

    ... sauf à avoir loupé quelquechose.


    Cordialement,


    Kohntark-

  6. #6
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Class ITerator souci
    Non, ce n'est pas cela..... je me posais la question de variablr de session et e disais que le ctr total de 34 restait bien mais je viens de voir que dans le constructeur je le recalculais à chaque X...
    Alors je vais essayer une $_SESSION juste pour voir !

    Merci tout de même

  7. #7
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Class ITerator GROS souci
    Non ce n'est pas le pb de variable de session....

    100X remets le travail sur ton établi, 1X tu y arriveras.....

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Citation Envoyé par ETVigan Voir le message
    Non, ce n'est pas cela..... je me posais la question de variablr de session et e disais que le ctr total de 34 restait bien mais je viens de voir que dans le constructeur je le recalculais à chaque X...
    Alors je vais essayer une $_SESSION juste pour voir !

    Merci tout de même
    Désolé d'insister mais pourrais tu m'expliquer comment $this->position peut prendre une autre valeur que 0 ?

    sachez juste que les évents First/Next/Prev/Last sont des boutons interceptés par $_POST !
    Donc, sauf si tu sauvegarde ailleurs, ton objet est détruit dès qu'un bouton a été cliqué et le code exécuté.

    La valeur de $this->position restant tout le temps à 0 (sauf avec last() évidement) comment les méthodes next(), prev(), etc ... peuvent elles fonctionner ?? Elles incrémentent ou décrémentent à partir de 0, ce qui te donne ces résultats.

    Mettre certains paramètres à passer au constructeur en SESSION serait une bonne idée, mais en tout état de cause il faut modifier le $this->position = 0 par $this->position = $position;


    Cordialement,


    Kohntark-

  9. #9
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Class ITerator GROS souci
    C'est pour cela que j'ai essayé avec ne variable de session
    $this->position est + dans next et - dans prev....

  10. #10
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Class ITerator GROS souci
    Problème solutionné......
    J'utilisais mal l'environnement de $_SESSION
    J'avais oublié le session_start
    Puis je me suis rendu compte que j'initialais mal la variable de session en tout cas, pas au mauvais endroit.

    Merci à tous.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Citation Envoyé par ETVigan Voir le message
    C'est pour cela que j'ai essayé avec ne variable de session
    $this->position est + dans next et - dans prev....
    Peut on voir comment tu as implémenté ça ?


    Cordialement,


    Kohntark-

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

Discussions similaires

  1. Itérateur
    Par reggae dans le forum C++
    Réponses: 2
    Dernier message: 21/12/2005, 21h19
  2. Problême avec les algos, itérateurs ...
    Par R'SKaP dans le forum C++
    Réponses: 14
    Dernier message: 18/12/2005, 23h14
  3. [STL]Problème itérateur avec list
    Par Fiquet dans le forum SL & STL
    Réponses: 7
    Dernier message: 03/10/2005, 17h54
  4. Réponses: 4
    Dernier message: 28/03/2005, 12h37
  5. Copies de flots en passant par les itérateurs
    Par Christophe Brun dans le forum C++
    Réponses: 7
    Dernier message: 02/07/2003, 11h41

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