Messages visibles soit par tout le monde, aux amis ou au membre uniquement

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 : Messages visibles soit par tout le monde, aux amis ou au membre uniquement

Re: Messages visibles soit par tout le monde, aux amis ou au membre uniquement

par nico44530 » 06 sept. 2015, 21:01

Merci beaucoup, je testerai ça, et je posterai les résultats si c'est positif ou pas ;)

Re: Messages visibles soit par tout le monde, aux amis ou au membre uniquement

par moogli » 06 sept. 2015, 13:51

salut, ,

je suppose que l'enum sur la table users sert à autre chose que l'affichage (valeur par défaut des publications ?) du coup je n'en tiens pas compte.
Pour ta requête elle doit rammener :
- les publications de la personne qui affiche (si connectée) => where feed_userid = $_SESSION['userid'] (en supposant que ce soit dans cette variable que c'est stockée en session).
- les publications publique => where feed_private = 1
- les publications de mes amis (quand je suis connecté) : where feed_private = 0 and ( feed_userid in ( select friend_to from users_friends where friend from = $_SESSIION['userid']) or feed_userid in ( select friend from from users_friends where friend_to = $_SESSIION['userid']) )

reste à tout mettre ensemble
SELECT
  feed_id,
  feed_text,
  feed_private,
  id AS userid,
  pseudo
FROM users_feed
  JOIN users ON feed_userid = id
WHERE
  feed_private = 1 OR -- tout ce qui est publique
  (feed_userid = :userid) OR -- tout ce qui est à "moi"
                        -- tout ce qui appartient à mes amis que j'ai demandé
  (feed_private = 0 AND ((feed_userid IN (SELECT friend_to
                                          FROM users_friends
                                          WHERE friend_from = :userid AND friend_confirm = 1)) OR
                         -- tout ce qui appartient à mes amis qui m'ont demandé
                         (feed_userid IN (SELECT friend
                                          FROM from users_friends
                                          WHERE friend_to = :userid AND friend_confirm = 1))
  )
  )
ORDER BY feed_date DESC
c'est a tester, j'ai fait un peu vite en live.
attention au left, ta requête indique que tu prends tout ce qu'il y a dans users_feed, même si l'utilisateur n'existe pas !!!! Ces ne doit pas exister (sinon y a un gros trou dans la raquette ;) ).

@+

Messages visibles soit par tout le monde, aux amis ou au membre uniquement

par nico44530 » 03 sept. 2015, 03:23

Bonjour,

J'ai un système de publications ou chaque membre peut envoyer ses publications.
Les publications s'affichent sur la page d'accueil des membres.

Je n'arrive pas à faire des règles de confidentialités en PHP :

Il y a 3 restrictions :

- Publication visible que par les amis du membre connecté
- Publication visible par tout le monde (même ceux non connecté)
- Publication invisible aux autres membres

J'ai du faire 3 tables dans ma base de données :

- "users" qui contient les champs des informations du membre :
id
email
mdp
pseudo
nom
prenom
confidentiel (ENUM 0 : Amis | 1 : Public | 2 : Moi)

- "users_friends" qui contient les champs pour la relation amitié :
friend_from (qui envois l'invitation d'amis)
friend_to (qui reçois l'invitation)
friend_confirm (ENUM 0 : Invitation en attente | 1 : Invitation acceptée)

- "users_feed" qui contient les champs pour les publications :
feed_id
feed_userid (l'id du membre qui a posté la publication
feed_text
feed_private (ENUM 0 : Amis | 1 : Public | 2 : Moi)

J'aimerai poster une publication et j'aimerais qu'elle soit visible que par mes amis.

Pour l'instant, j'utilise cette requête qui se contente d'afficher toutes les publications :( Je n'arrive pas à relier les amis à la requête.
$resultat = Bdd::connect() -> prepare('SELECT * FROM users_feed LEFT JOIN users ON feed_userid = id ORDER BY feed_date DESC');
Merci d'avance pour votre aide :)