Salut à tous,

Je rencontre un problème dans le développement d'un projet perso. Ce que je voudrais faire c'est que lorsque l'utilisateur se connecte (j'ai déjà fait le systeme d'espace membre) il accede à des données qu'il aura au préalablement entrée.
Pour être plus clair je vous met dans la stituation de mon projet perso : un site qui permettrait de sauvegarder les liens que vous voulez lors de vos recherches (par exemple quand vous recherchez un ordinateur sur différents sites). Je veux que lorsque l'utilisateur se connecte il puisse ajouter et consulter ses liens précédement ajoutés.

Merci par avance pour votre aide !
Bonne journée/soirée à tous !

27 réponses


Arrows78
Réponse acceptée

Le titre de ton topic ne correspond pas à ton sujet alors. D'autant plus que si chaque utilisateur avait sa BDD, tu en aurais beaucoup trop, et pour chaque base, quasiment 1 seule ligne par table.

Il faut donc faire une seule BDD pour tous les utilisateurs. Tu auras par exemple une table "Utilisateur", une table "Liens", et à chaque fois qu'un utilisateur entre un lien, tu enregistres le numéro de l'utilisateur et le lien. Ainsi, ta table "Utilisateur" contient par exemple l'idUser, le pseudo, nom, prenom, email, etc. Et ta table "Liens" contient l'IDUser, IdLink, Link...

Après, suffit de gérer correctement ta connexion à la base et l'affichage du site avec PHP pour afficher les bonnes données de chaque utilisateur.

mokyy
Auteur
Réponse acceptée
if (isset($_SESSION'pseudo']))
{
    $reponse = mysql_query("SELECT liens.url, membres.pseudo FROM liens, membres WHERE liens.membre_id = membres.id");
while ($donnees = mysql_fetch_array($reponse) )
  echo $donnees'url'];
}

J'ai enfin résolu le probleme, merci de ton aide :)

Bonjour,

Si je comprends bien ton projet a la même utilité d'un online bookmark ?

L'utilisateur se connecte il peut ajouter des liens et les sauvegarder/éditer/supprimer ... ?

Sinon pour ton titre " Base de donnée privée pour chaque utilisateur "

que veut-tu dire par là ?

Car cela est impossible ( reste à confirmer par un autre utilisateur )

Sinon chaque membre inscrit auras un ID ainsi que toutes ces informations ... a toi de voir comment organiser ta BDD

Base de données --> Tables --> Colonnes

Chaque utilisateur auras une colonne.
BDD TABLE
BDD_USER --> MEMBRES -->
ID USERNAME PASSWORD EMAIL ( données basique .. )
1 Administrateur MDP7514 admin@domain.ext
2 USER_1 MDP4514 user1@domain.ext
3 USER_2 MDP8514 user2@domain.ext
4 USER_3 MDP1514 user3@domain.ext
5 USER_4 MDP9514 user4@domain.ext
6 USER_5 MDP4514 user5@domain.ext
7 USER_6 MDP9514 user6@domain.ext
8 USER_7 MDP2514 user7@domain.ext
9 USER_8 MDP6514 user8@domain.ext

Voilà un exemple d'une table.

Et n'oublie pas de crypter les mots de passes dans la BDD.
espérant t'avoir aider, bonne chance pour ton projet ;)

Reikon

Il te faut tout bêtement deux tables :

  • users, dans laquelle tu stockes les données des utilisateurs nécessaire à ton espace membre (donc à minima, id, username, password)
  • links, dans laquelle tu stockes les liens sauvegardés, que tu associes à l'utilisateur qui l'a ajouté, donc pour chaque lien, à minima id, url, user_id

Pour récupérer les liens d'un utilisateur, tu fais un SELECT sur la table links WHERE user_id = l'id de l'utilisateur courant.

Et éventuellement, tu peux revoir les bases du développement et des structures de données ;)

mokyy
Auteur

Ce que je voudrais aussi savoir c'est surtout comment afficher à l'utilisateur uniquement ses liens et non pas ceux d'un autre

Comme l'a dit Pakito je cite : "Pour récupérer les liens d'un utilisateur, tu fais un SELECT sur la table links WHERE user_id = l'id de l'utilisateur courant."

En gros, tu fais une requête SQL en faisant une jointure entre les deux tables. Le fait de mettre "WHERE id_user = id_user_lien" te permet de prendre uniquement les liens d'une même personne, et donc grâce à cette jointure, tu n'auras pas accès à tout. Par exemple si tu fais une jointure si l'utilisateur numéro 2, grâce à cette jointure, tu auras seulement les liens de l'utilisateur 2 (non pas 3, le 4, ou tout autre numéro de client).

J'espère avoir répondu à tes attentes, sinon n'hésite pas, je réexpliquerai d'une autre manière.

mokyy
Auteur

J'ai fait ce code mais les liens en bases ne s'affichent toujours pas :
<?php
include("includes/config.php");
if (isset($_SESSION'pseudo']))
{
$req_liens = mysql_query('SELECT * FROM liens WHERE membre_id = user_id');
echo $req_liens;
}
else
{
header('location: index.php');
}
?>

Merci de votre aide :=)

Il faudrait plutôt faire quelque chose dans ce genre :

<?php
    include("includes/config.php");
if (isset($_SESSION'pseudo']))
{
    $query = "SELECT * FROM liens WHERE membre_id = user_id"
    $req_liens = mysql_query($query);
    if (!$req_liens)
    {
        $msg = 'Requête invalide : ' . mysql_error();
        $msg .= 'Requête demandée : ' . $query;
        die($msg);
    }
    while ($row = mysql_fetch_assoc($req_liens))
    {
        // Mettre le champ de la colonne de la base que tu veux afficher entre les ' '. Répéter le echo autant de fois que tu veux afficher de colonne (ici 3 echo si tu veux 3 résultats, exemple champ idLien, TexteLien, dateLien) 
        echo $row''];
        echo $row''];
        echo $row''];
    }
}
else
{
header('location: index.php');
}
?>
mokyy
Auteur

J'ai bien suivi tout ce que tu as ecris mais ca me retourne toujours rien, ce serait possible que tu m'aide via skype ?

Je ne suis quasiment jamais sur skype.

Mais déjà, lorsque tu fais l'un des echo $row'...']; que t'affiche ton navigateur ?
A défaut de ne pas afficher le bon résultat, tu devrais avoir une erreur.

mokyy
Auteur

Justement il m'affiche rien, même pas d'erreur. Je ne comprends pas

Et si tu fais des echo quelconque à différents endroits de ton code.
Par exemple echo test1 echo test2 echo test3, etc. Fais cela à plusieurs endroit, et vois quel echo est affiché. C'est un autre moyen de voir les erreurs. Après il faut aussi voir si tu as bien des lignes dans ta base de données.

mokyy
Auteur

J'ai essayé, ça ne marche nulle part.
Voilà le screen de la table "membres" : http://prntscr.com/4ilwmi
Le screen de la tables "liens" : http://prntscr.com/4ilwmi

Merci beaucoup de ton aide en tout cas :)

Tu as mis deux fois la même image :/

mokyy
Auteur

Oups, petite erreur de saisie :/
Voici la table "liens" : http://prntscr.com/4imcfv

Et peux-tu afficher ton code (celui que je t'avais transmis mais avec tes informations afin de voir si tu n'as pas une erreur).

mokyy
Auteur
<?php
   include("includes/config.php");
if (isset($_SESSION'pseudo']))
{
    $query = "SELECT * FROM liens , membres WHERE 'membre_id' = 'membres.id'";
    $req_liens = mysql_query($query);
    if (!$req_liens)
    {
        $msg = 'Requête invalide : ' . mysql_error();
        $msg .= 'Requête demandée : ' . $query;
        die($msg);
    }
    while ($row = mysql_fetch_assoc($req_liens))
    {
        echo $row'membres.pseudo'];
    }
  }
  else
  {
    header('location: index.php');
  }

Le voici :-)

Le dernier echo, mets seulement pseudo à l'intérieur des quotes.

En tout cas, bizarre que ça t'affiche rien. Soit ça doit t'afficher un résultat, soit une erreur.
Et si tu fais un echo après le croche qui suit le echo $row, tu devrais avoir le texte affiché.

mokyy
Auteur

Même si j'enlève le membre ça ne marche pas :/
Non rien ne s'affiche je comprends vraiment rien

Affiche ce morceau de code stp :

<?php
echo ini_get('display_errors');
if (!ini_get('display_errors')) {
    ini_set('display_errors', '1');
}
echo ini_get('display_errors');
?>

Ensuite, dit moi ce qui est affiché.

mokyy
Auteur

Ca m'affiche le chiffre 11

Ok, donc tes erreurs doivent bien s'afficher.

Tu utilises ton site en local ? ou sur un hébergeur du type 1and1, OVH, et j'en passe ?

mokyy
Auteur

En local avec XAMPP (sur Windows 7)
Tu penses que c'est quoi l'origine du probleme ?

Bah le truc c'est que soit tu devrais avoir un message d'erreur à l'écran, soit le résultat de ta base de données, soit rien si les messages d'erreur sont désactivés, mais visiblement, les messages d'erreur doivent être affiché.

mokyy
Auteur

J'ai entrer cette requête sur PHPMyAdmin : SELECT * FROM liens , membres WHERE 'membre_id' = 'membres.id'
Et ça me retourne un résultat vide, je pense que c'est ce qui se produit sur ma page

Hello,

Normal que sa ne sélectionne rien, ta requête SQL est fausse. Tu as 2 tables dans le FROM, et tu renseigne pas l'ID du membre :

SELECT * FROM membres WHERE id = 1

Et si tu veut sélectionner des données dans une autre table, (comme une table liens par exemple), fait un LEFT JOIN:

SELECT *
FROM liens
LEFT JOIN membres ON liens.member_id = membres.id

Et pour un utilisateur en particulier (par rapport à son ID) :

SELECT *
FROM liens
LEFT JOIN membres ON liens.member_id = membres.id
WHERE membres.id = 1

Haha effectivement Xeta, j'ai même pas fait gaffe à ça, quelle honte ^^.

Mokyy, ta requête est donc toujours fausses, et surtout non complète. Déjà, pas besoin de mettre 2 champs dans ton SELECT si c'est pour en afficher seulement un des deux.

Ensuite comme le dit Xeta, le WHERE est incomplet car il y a seulement la jointure entre les deux tables, mais pas la précision sur quoi on regarde uniquement (ici le pseudo), tu as comme requête :

SELECT liens.url, membres.pseudo FROM liens, membres WHERE liens.membre_id = membres.id

Il faut pas mettre le "membres.pseudo" si tu n'affiches pas le pseudo, d'ailleurs pas besoin de précéder de "membres" si le pseudo n'est pas dans la seconde table (mais ce n'est pas grave si tu le laisse).

Et dans le where, tu dois donc avoir :

WHERE liens.membre_id = membres.id AND pseudo = $_SESSION'pseudo']

parce que tu veux gérer uniquement les liens par rapport au pseudo (d'où ton isset de départ).

Ou tu passes avec LEFT JOIN, c'est plus courant maintenant.

Ensuite ta requête sera bonne.