Sortir l'affichage du traitement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sortir l'affichage du traitement

par titerm » 15 mai 2007, 23:51

T'as bien fais d'aller te coucher cyrano... :)) Amha, t'as encore une erreur :)


dans ton for, tu oublies d'utiliser ton index...
Ca t'apprendra a faire des for là où un foreach evite beaucoup de chose (le count(), le if(), et le fameux for() :) )
Ceci dit, j'ai pas de mérite, j'ai pas bossé today, je suis en congé pater.

par aelurus » 15 mai 2007, 23:04

:)
Vous avez tout les deux raison c'est en partie de ma faute car je n'avais pas tout donné.
<?php
     class admin_user {
public $id_user;
public $login;
public $mail;
public $droit;
public $nombre;
public $sql1;
public $inscript;

function recup_user (){
	$this->sql1 = mysql_query('SELECT * FROM `session_user` ');
	$this->nombre= mysql_num_rows($this->sql1);
}
function affiche (){
    /* On définit une valeur par défaut à notre retour */
    $infos = false;
    while (false != ($user=mysql_fetch_assoc($this->sql1)))
    {
        $this->id_user  = $user['id_user'];
        $this->login    = $user['login'];
        $this->mail     = $user['mail'];
        $this->droit    = $user['droit'];
        $this->inscript = $user['inscript'];
        $infos[] = array(
            'login' => $this->login,
            'droit' => $this->droit,
            'inscrit' => $this->inscript,
            'mail' => $this->mail
        );
    }
    return $infos;
}}

$infosmembre=new admin_user;
$infosmembre->recup_user();
echo "<br />Il y a ". $infosmembre->nombre." utilisateur(s) enregistré :";


/* Affichage : on récupère d'abord les données */
$infosmembre = $infosmembre->affiche();
if(false != $infosmembre)
{
    echo "<br /> login : ". $infosmembre['login'];
    echo " droit : ".$infosmembre['droit']." Son email : ".$infosmembre['mail'];
    echo "<br />Inscipt le : ".$infosmembre['inscrit']; 
}
print_r($infosmembre);
?>
Et effectivement cette objet a pour but de récupérer tout les utilisateurs de ma table session_user. Donc effectivement je construis un tableau multi pour pouvoir en faire le traitement par la suite :) ( je n'avais pas percuté de la subtilité dans la première lecture de ton code cyrano). Mais une sauf erreur de ma part ou par manque de connaissance , je ne suis pas d'accord avec sa :

Code : Tout sélectionner

$infosmembre = affiche();
ou une subtilité m'échappe,au premier coup je me suis simplement dit que c'était bon pour ce que j'avais ^^ mais j'ai un petit doute.
Mais encore grand merci a vous deux je vais pouvoir me pencher sur la construction de ce tableau multi puis ensuite essayer de compléter cette classe pour de plus ample fonctionnalités.

par Cyrano » 15 mai 2007, 21:47

Tu as une fois de plus raison, je vais aller me coucher tiens :P
Allez, on corrige et je suis plus là, je fais déjà assez de code dans la journée sans en rajouter outre mesure le soir ;)
<?php
function affiche ()
{
    /* On définit une valeur par défaut à notre retour */
    $infos = array();
    while (false != ($user=mysql_fetch_assoc($this->sql1)))
    {
        $this->id_user  = $user['id_user'];
        $this->login    = $user['login'];
        $this->mail     = $user['mail'];
        $this->droit    = $user['droit'];
        $this->inscript = $user['inscript'];
        $infos[] = array(
            'login' => $this->login,
            'droit' => $this->droit,
            'inscrit' => $this->inscript,
            'mail' => $this->mail
        );
    }
    return $infos;
}

/* Affichage : on récupère d'abord les données */
$infosmembre = affiche();
$nb = count($infosmembre);
if($nb > 0)
{
    for($i = 0; $i < $nb; $i++)
    {
        echo "<p> login : ". $infosmembre['login'];
        echo " droit : ".$infosmembre['droit']." Son email : ".$infosmembre['mail'];
        echo "<br />Inscipt le : ".$infosmembre['inscrit'] ."</p>\n"; 
    }
}
?>

par titerm » 15 mai 2007, 21:36

J'avais donnés sous ma réponse une version corrigeant le pb. Je me suis juste appuyer le le contenu du premier poste de l'auteur pour signaler ce pb.


Ceci étant dit, dans ta seconde correction, il y a une erreur tu initialises systématiquement $infos. Tu n'aura donc une fois de plus que la derniere ligne :)
...
$infos = array(); 
$infos[] = array(
            'login' => $this->login,
            'droit' => $this->droit,
            'inscrit' => $this->inscript,
            'mail' => $this->mail
        ); 
...

par Cyrano » 15 mai 2007, 21:31

Vrai si la requête retourne plusieurs lignes. Mais j'avais toutefois noté qu'il s'agissait de données sur un membre : donc j'avais des raisons de penser que la requête était faite sur un identifiant visant un seul membre et donc ne renverrait qu'une seule ligne ou rien.

Mais tu as raison et dans le cas où il y aurait plusieurs lignes attendues, il suffirait de construire un tableau à deux dimensions, ce qui donnera :
<?php
function affiche ()
{
    /* On définit une valeur par défaut à notre retour */
    $infos = false;
    while (false != ($user=mysql_fetch_assoc($this->sql1)))
    {
        $this->id_user  = $user['id_user'];
        $this->login    = $user['login'];
        $this->mail     = $user['mail'];
        $this->droit    = $user['droit'];
        $this->inscript = $user['inscript'];
        $infos = array();
        $infos[] = array(
            'login' => $this->login,
            'droit' => $this->droit,
            'inscrit' => $this->inscript,
            'mail' => $this->mail
        );
    }
    return $infos;
}

/* Affichage : on récupère d'abord les données */
$infosmembre = affiche();
if(false != $infosmembre)
{
    $nb = count($infosmembre);
    for($i = 0; $i < $nb; $i++)
    {
        echo "<p> login : ". $infosmembre['login'];
        echo " droit : ".$infosmembre['droit']." Son email : ".$infosmembre['mail'];
        echo "<br />Inscipt le : ".$infosmembre['inscrit'] ."</p>\n"; 
    }
}
?>
Mais il reste toujours un problème : les propriété de ta classe ne seront pas bonne non plus puisqu'elles ne contiendront que les valeurs de la dernière ligne. Pour les conserver toutes, il faudrait qu'elles soient elles-même des tableaux indexés....

par titerm » 15 mai 2007, 21:12

Sauf erreur de ma part, il y a une étourderie dans le code de cyrano.

La fonction affiche retournera systématiquement le dernier enregistrement.
Une petit correction.
<?php
function getInfoMembre()
{
    /* On définit une valeur par défaut à notre retour */
    $infos = array();
    while (false != ($user=mysql_fetch_assoc($this->sql1)))
    {
        $this->id_user  = $user['id_user'];
        $this->login    = $user['login'];
        $this->mail     = $user['mail'];
        $this->droit    = $user['droit'];
        $this->inscript = $user['inscript'];
        $infos[] = array(
            'login' => $this->login,
            'droit' => $this->droit,
            'inscrit' => $this->inscript,
            'mail' => $this->mail
        );
    }
    return $infos;
}

/* Affichage : on récupère d'abord les données */
$infosmembres = getInfoMembre();
foreach($infomembres as $infomenbre) 
{
    echo "<br /> login : ". $infosmembre['login'];
    echo " droit : ".$infosmembre['droit']." Son email : ".$infosmembre['mail'];
    echo "<br />Inscipt le : ".$infosmembre['inscrit']; 
}

par aelurus » 15 mai 2007, 19:59

Je n'ai pas voulut raller ^^.
A oui effectivement vu sous la forme d'un tableau c'est génial.
Je te remercie de l'ajout pour les test, j'ai pas encore prit cette habitude qui parait évident pourtant à la lecture du code que tu as reprit.
C'est une mine d'or même je dirais, grand merci en plus cela règle un autre soucis que j'ai eu sur les return justement merci
en plus la POO c'est génial ou fort pratique ....

par Cyrano » 15 mai 2007, 19:40

Pas que ta question soit inintéressante, mais personne n'est passé pouvant te répondre jusqu'à maintenant.

Pour ma part, j'évite toujours de lancer un quelconque affichage directement depuis une fonction. Deux raison à ça : tu as mentionné la première (séparer l'affichage du traitement), et la seconde, c'est que ça bloque l'utilisation de ma fonction. Si je veux l'utiliser ailleurs, je ne pourrai pas modifier l'affichage.

Donc il vaut mieux privilégier le retour de la fonction sous forme de variable scalaire ou tabulaire (une simple valeur ou un tableau indexé/associatif)

Dans l'exemple que tu montres, ça donnerait un tableau puisque tu as plusieurs valeurs à renvoyer. Ça va donner à peu près ceci :
<?php
function affiche ()
{
    /* On définit une valeur par défaut à notre retour */
    $infos = false;
    while (false != ($user=mysql_fetch_assoc($this->sql1)))
    {
        $this->id_user  = $user['id_user'];
        $this->login    = $user['login'];
        $this->mail     = $user['mail'];
        $this->droit    = $user['droit'];
        $this->inscript = $user['inscript'];
        $infos = array(
            'login' => $this->login,
            'droit' => $this->droit,
            'inscrit' => $this->inscript,
            'mail' => $this->mail
        );
    }
    return $infos;
}

/* Affichage : on récupère d'abord les données */
$infosmembre = affiche();
if(false != $infosmembre)
{
    echo "<br /> login : ". $infosmembre['login'];
    echo " droit : ".$infosmembre['droit']." Son email : ".$infosmembre['mail'];
    echo "<br />Inscipt le : ".$infosmembre['inscrit']; 
}
?>

par aelurus » 15 mai 2007, 19:12

Aurais-je été maladroit ou ma question n'a pas réellement d'intérêt ?

Sortir l'affichage du traitement

par aelurus » 14 mai 2007, 21:42

Bonjour à tous

Je viens faire un petit tour par ici pour une question, voici ma méthode affiche qui m'affiche toutes les entrées d'une table user, cela fonctionne jusque la. Mais voulant adopter plus de flexibilité je me demandais de quel manière je pourrais dissocier mon traitement de mon affichage.
Je pensais faire dans un premier temps une methode par donnée à afficher ....
Qu'en penssez vous ????

function affiche (){
	while ($user=mysql_fetch_assoc($this->sql1))
		{
			$this->id_user=$user['id_user'];
			$this->login=$user['login'];
			$this->mail=$user['mail'];
			$this->droit=$user['droit'];
			$this->inscript=$user['inscript'];
			echo "<br /> login : ".$this->login;
			echo " droit : ".$this->droit." Son email : ".$this->mail;
			echo "<br />Inscipt le : ".$this->inscript;
		}
}
Voici le code d'appel :
$user=new admin_user;
$user->recup_user();
echo "<br />Il y a ". $user->nombre." utilisateur(s) enregistré :";
$user->affiche();