Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/08/2011, 09h36   #1
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
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
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h00   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 :
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);
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/08/2011, 10h04   #3
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Merci à toi Jérôme.

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

Citation:
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...
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h12   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h19   #5
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
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
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h19   #6
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h24   #7
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
@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
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h27   #8
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Merci Bebel.

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

Citation:
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
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h31   #9
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h37   #10
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Citation:
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.
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h42   #11
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Voilà en fait j'ai fait un bout de code qui ressemble à ca :

Code :
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.
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h44   #12
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Code :
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 ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/08/2011, 10h49   #13
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Hehe NON !

Un GRAND merci.
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 10h53   #14
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
Pour la dernière partie, j'aurais plus vu quelque chose comme ça

Code :
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 !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/08/2011, 11h06   #15
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/08/2011, 11h24   #16
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Merci à vous deux.

Super, vraiment !

Bonne journée
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h27   #17
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h30   #18
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par Bebel Voir le message
C'est quoi l'erreur ?
je teste et je reviens ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h37   #19
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
pitet ca :

Code :
Warning: array_search() [offfunction.array-searchoff]: Wrong datatype for second argument
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h39   #20
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h26.


 
 
 
 
Partenaires

Hébergement Web