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 :

Gestion d'une suite de variables


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut Gestion d'une suite de variables
    Bonjour,

    Je mets en place une fonction permettant à mes utilisateurs de visualiser les x derniers articles visités.
    Il me faut ces données en base.

    Je pense que le plus simple est de de faire une structure basique :
    ID CLIENT | IDs ARTICLES
    Dans ma colonne IDs ARTICLES avoir une chaine de type :
    #ID1#ID2#ID3#...

    1/ Qu'en pensez vous ?

    2/ Je pense limiter cette série aux 10 derniers ID articles visités :

    substr_count me permettra donc de savoir combien de # je dispose, sachant qu'il me servent de délimiteur, il faudrait donc que je supprime ce qui "dépasse" du 11eme #
    Je ne dois pas être réveillé ce matin mais je ne vois pas comment faire...

    Peut être que mon système est aussi bancale à la base ?

    Merci à vous.
    Bonne journée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    une solution parmi d'autres ...

    table T_CLIENT_ARTICLES :
    ID_client | ListIDs_articles
    Avec dans la colonne ListIDs_articles une chaine de type : ID1,ID2,ID3

    Intérêt (des virgules) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // on récupère la chaine
    	// [......]
    	$ListIDs_articles = $row['ListIDs_articles'];
     
    // on peut directement faire la requête :
    	$query = "SELECT * FROM T_ARTICLES WHERE ID_article IN (".$ListIDs_articles.");";
     
    // on récupère aussi facilement l'array des IDs
    	$ListIDs_art_array = explode(',', $ListIDs_articles);

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Merci à toi Jérôme.

    Limites tu le nombre d'ID aussi ? je scotch sur :

    2/ Je pense limiter cette série aux 10 derniers ID articles visités :
    substr_count me permettra donc de savoir combien de # je dispose, sachant qu'il me servent de délimiteur, il faudrait donc que je supprime ce qui "dépasse" du 11eme #
    Je ne dois pas être réveillé ce matin mais je ne vois pas comment faire...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gaetan_ Voir le message
    2/ Je pense limiter cette série aux 10 derniers ID articles visités
    Dans le principe :
    0/ l'utilisateur visite un article -> on veux stocker l'ID_article dans la liste ListIDs_articles
    1/ on vérifie que cet id n'y est pas déjà
    2/ sinon, on l'ajoute AU DEBUT de la liste -> $ListIDs_articles = $ID_article.','.$ListIDs_articles;
    3/ si la liste a plus de 10 éléments ("IDxx,"), on coupe "ce qui dépasse" à la fin

    On peut même envisager d'enregistrer la date de la visite pour chaque article :
    table T_CLIENT_ARTICLES :
    ID_client | ListIDs_articles | ListDate_visite
    -> colonne ListIDs_articles : ID3,ID2,ID1
    -> colonne ListDate_visite : time3,time2,time1

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    hehe oui mais c'est justement ca :

    Citation Envoyé par jreaux62 Voir le message
    Dans le principe :
    3/ si la liste a plus de 10 éléments ("IDxx,"), on coupe "ce qui dépasse" à la fin
    Qui me pose problème

  6. #6
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Bonjour,

    une autre solution qui me vient,

    tu rajoutes un champs last_visit dans ta table article ( que tu mets à jour à chaque visite)

    Et pour récupérer les X dernier, tu fais ton select order par ce champ avec une limit a X.
    Tout énigme a une solution ! Tout est question de discipline !

  7. #7
    Invité
    Invité(e)
    Par défaut
    @Bebel : sans vouloir te vexer, le pense que tu es hors-sujet.
    Ce que tu proposes c'est "la last visit" de l'article (sans relation avec le client)
    Ici, c'est "les last visit" du client

  8. #8
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Merci Bebel.

    En fait j'ai une "grosse" base clients / articles.

    tu rajoutes un champs last_visit dans ta table article ( que tu mets à jour à chaque visite)
    Je peux avoir +500 visites / jour / articles

    Il me semblait donc raisonnable de créer une table clientID | IDs

  9. #9
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    @Bebel : sans vouloir te vexer, le pense que tu es hors-sujet.
    Ce que tu proposes c'est "la last visit" de l'article (sans relation avec le client)
    Ici, c'est "les last visit" du client
    en effet,
    désolé je vais avoir besoin de vacances

    Bon pour revenir dans le sujet pour avoir les 10 derniers, tu peux faire un explode sur ta liste, ajouté le nouveau en début et garder uniquement le 10 premier.

    Même pourquoi pas supprimer l'id s'il existe déjà avant de le remettre au début, comme ça l'article se retrouve en 1ere position.
    Tout énigme a une solution ! Tout est question de discipline !

  10. #10
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Même pourquoi pas supprimer l'id s'il existe déjà avant de le remettre au début, comme ça l'article se retrouve en 1ere position.
    Bonne idée oui merci.

  11. #11
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Voilà en fait j'ai fait un bout de code qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $rq_vis=mysql_query("SELECT ids FROM articlesvisit WHERE clientID='$clientID'");
    $ids=	mysql_result($rq_vis,0);
    $ids=	str_replace("#".$articleID."#","#",$ids);
    $Newids='#'.$articleID.'#'.$ids;
    $Newids=str_replace("##","#",$Newids);
    mysql_query("UPDATE articlesvisit SET ids='$Newids' WHERE clientID='$clientID'");
    ?>
    Merci à vous.

  12. #12
    Invité
    Invité(e)
    Par défaut
    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
    <?php
    // on veut ajouter un nouvel Id_article
    	$Id_article_new = ....; // selon le mode de recup POST, GET, .... ou autre
    // pour notre CLIENT
    	$Id_client = ....; // en session ?
     
    // on recupere la ListIDs_articles de ce client
    	$list_query = "SELECT ListIDs_articles FROM T_CLIENT_ARTICLES WHERE ID_client = '".$Id_client.";";
    	// [.....]
    	$ListIDs_articles = $row['ListIDs_articles'];
    	// on decompose
    	$ListIDs_art_array = explode(',', $ListIDs_articles);
     
    // on verifie si le nouvel Id_article est ou non dans la liste
    	if(!in_array($Id_article_new, $ListIDs_art_array)) {
    		// pas dedans : on l'ajoute au debut
    		// EN LIMITANT à 10 maxi :
    		$MaxiIDs_articles = 10;
    		$ListIDs_articles = $ID_article.','; // on l'ajoute au debut
    		// on remet ensuite les 9 (maxi) suivants
    		$maxiIDs = min( count($ListIDs_art_array), ($MaxiIDs_articles-1) );
    		for($i=0;$i<$maxiIDs;$i++) {
    			$ListIDs_articles .= $ListIDs_art_array[$i];
    		}
    		// on supprime la derniere "," au cas où (si 1er article visité)
    		if(substr($ListIDs_articles, -1, 1)==','){
    			$ListIDs_articles = substr($ListIDs_articles, 0, strlen($ListIDs_articles)-1);
    		}
    		// enfin, on enregistre dans la BdD (dans T_CLIENT_ARTICLES)
    		// [.............]
    	}
    ?>
    J'arrive trop tard avec mon bout de code ?
    Dernière modification par Invité ; 04/08/2011 à 11h01.

  13. #13
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Hehe NON !

    Un GRAND merci.

  14. #14
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Pour la dernière partie, j'aurais plus vu quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       // suppression de l'existant
       $key = array_search($ListIDs_art_array, $ID_article);
       if ( $key !== null)
       {
        unset($ListIDs_art_array[$key]);
       }
       array_unshift($ListIDs_art_array, $ID_article);
       array_slice ($ListIDs_art_array, 0, 10); // garder les 10 premiers
       $ListIDs_articles = implode ($ListIDs_art_array, ',');
    Tout énigme a une solution ! Tout est question de discipline !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bebel Voir le message
    Pour la dernière partie, j'aurais plus vu quelque chose comme ça ...
    C'est vrai qu'il existe des fonctions toute faite !
    Ton code est plus optimisé, élégant, et surtout ... moins "usine à gaz" !

    J'ai tendance à ré-inventer le fil à couper l'eau tiède !
    (j'ai encore beaucoup à apprendre sur la manipulation des array ... je manque de "vocabulaire" ...)

    [Edit] Oups ! je suis en train de tester ton code : il semble qu'il y ait une erreur ...
    Dernière modification par Invité ; 04/08/2011 à 11h20.

  16. #16
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Merci à vous deux.

    Super, vraiment !

    Bonne journée

  17. #17
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    C'est vrai qu'il existe des fonctions toute faite !
    Ton code est plus optimisé, élégant, et surtout ... moins "usine à gaz" !

    J'ai tendance à ré-inventer le fil à couper l'eau tiède !
    (j'ai encore beaucoup à apprendre sur la manipulation des array ... je manque de "vocabulaire" ...)

    [Edit] Oups ! je suis en train de tester ton code : il semble qu'il y ait une erreur ...
    Je l'ai écrit de tête, j'ai malheureusement plus de serveur php à porter de main.
    C'est quoi l'erreur ?
    Tout énigme a une solution ! Tout est question de discipline !

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bebel Voir le message
    C'est quoi l'erreur ?
    je teste et je reviens ...
    Dernière modification par Invité ; 04/08/2011 à 11h43.

  19. #19
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    pitet ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: array_search() [offfunction.array-searchoff]: Wrong datatype for second argument

  20. #20
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    En effet j'ai inversé l'élément à rechercher et le tableau cf la documentation
    Tout énigme a une solution ! Tout est question de discipline !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AppleScript] Initialiser rapidement une suite de variables
    Par ekami dans le forum AppleScript
    Réponses: 2
    Dernier message: 01/05/2013, 15h20
  2. Projet de gestion d'une agence de voyage ( suite )
    Par charliemoun dans le forum Débuter
    Réponses: 2
    Dernier message: 30/03/2011, 22h42
  3. [Associé] Dev d'une solution de gestion de flotte (suite)
    Par opartpro dans le forum Autres
    Réponses: 0
    Dernier message: 05/03/2011, 12h58
  4. Variable pour une suite de contrôle
    Par sakia dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/05/2008, 11h56
  5. Gestion d'une variable TDateTime
    Par sergedarkmaul dans le forum Langage
    Réponses: 10
    Dernier message: 29/04/2008, 15h54

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