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

PHP & Base de données Discussion :

Condition qui ne fonctionne pas comme souhaité


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut Condition qui ne fonctionne pas comme souhaité
    Bonjour,

    J'ai un problème avec mon code au niveau de la condtions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($rps['following_id'] == $donnees['pseudo'])
    car elle ne s'applique uniquement pour un membre et pas illimités
    donc le but est d'afficher la publication uniquement si les ou l'utilisateur à été follow sauf que ça ne marche qu'a moitié car en executant le code il affiche les messages d'un seul utilisateur follow alors que la personne à follow plusieurs personnes qui ont toutes publiés quelque chose mais qui ne s'affiche pas pouvez vous m'éclairer la dessus SVP.

    Merci d'avance pour votre aide et bon courage.

    Cordialement Rombutucraft

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les requêtes imbriquées ce n'est pas une bonne méthode.
    Surtout si tu lis l'intégralité de la deuxième table à chaque boucle, alors là c'est carrément un accident industriel.

    Il te faut jointure entre les deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT pseudo, message
    FROM minichat m
    JOIN follow f ON m.pseudo = f.following_id
    par contre c'est étrange d'avoir "pseudo" d'un côté et "id" de l'autre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Désolé sabotage mais je ne comprend pas trop ou mettre ton code.

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Hello Rombutucraft,

    En remplacement du query $reponse
    et virer la boucle $rp ... je suppose
    et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($rps['following_id'] == $donnees['pseudo'])
    Tester le changement d'id ou pseudo si following_id correspond au pseudo ?

    Si tout ça ne te parle pas
    Il faudrait donner quelques lignes des 2 tables follow et minichat et le résultat attendu ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Pareil je ne comprends pas trop ton message vttman
    Et que signifie le petit m dans le code de sabotage ?

    Table messages:

    Nom : message.PNG
Affichages : 109
Taille : 35,6 Ko

    Table follow:

    Nom : follow.PNG
Affichages : 104
Taille : 34,4 Ko

  6. #6
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Le m de sabotage c'est un alias pour simplifier la lecture ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT pseudo, message
    FROM minichat m
    JOIN follow f ON m.pseudo = f.following_id
    <=>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT pseudo, message
    FROM minichat 
    JOIN follow  ON minichat.pseudo = follow.following_id
    Pour te donner une exemple de ce que je raconte
    soit une table commande
    CDE(Num_cde)
    soit une table détail commande
    DETCDE(Num_cde, lig_cde)

    Je peux pour lister toutes les lignes détails commande
    faire un query sur CDE puis faire un query sur DETCDE soit 2 query, comme dans ton cas
    ou faire directement un SEUL query sur CDE + DETCDE grâce aux jointures
    c'était l'idée que j'exposais (+ normalement sabotage)
    mais dans tes id je me perds pour lier tes 2 tables ? c'est quoi la relation entre ces 2 tables ?
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Et bien la table follow contient les membres amis entre eux et la table messages contients les messages de tous les membres.

  8. #8
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Tester ceci ... sauf erreur de ma part dans la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $bdd = new PDO('mysql:host=localhost;dbname=name', 'user', 'mdp');
    $reponse = $bdd->query('SELECT m.pseudo,m.message, f.following_id FROM minichat m JOIN follow f on m.pseudo  =  f.following_id order BY m.id DESC LIMIT 0, 20');
    while ($donnees = $reponse->fetch()) {
    echo '<br /><div class="bandepub2" style="background-color: #fff; text-align: center; box-shadow: 1px 1px 12px #555;">'; echo $donnees['pseudo'] . ' </strong>:<br />' . $donnees['message']; echo  ' <br /></div>' ; echo '</div>';
    }
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Ok super merci ça marche par contre quand moi je publie quelque chose je ne le vois pas est-ce normal ?

  10. #10
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Je suppose que si l'on change la requête précédente un poil, 'LEFT JOIN' à la place du 'JOIN'
    le message va apparaitre car tu n'apparais sans doute pas dans la table follow (je ne suis pas devin ) !?

    Essayer ceci pour en être convaincu ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $bdd = new PDO('mysql:host=localhost;dbname=name', 'user', 'mdp');
    $reponse = $bdd->query('SELECT m.pseudo,m.message, f.following_id FROM minichat m LEFT JOIN follow f on m.pseudo  =  f.following_id order BY m.id DESC LIMIT 0, 20');
    while ($donnees = $reponse->fetch()) {
    echo '<br /><div class="bandepub2" style="background-color: #fff; text-align: center; box-shadow: 1px 1px 12px #555;">'; echo $donnees['pseudo'] . ' </strong>:<br />' . $donnees['message']; echo  ' <br /></div>' ; echo '</div>';
    }
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Super génial merci beaucoup je clos le sujet !!!

  12. #12
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Attention quand même
    ici ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $bdd = new PDO('mysql:host=localhost;dbname=name', 'user', 'mdp');
    $reponse = $bdd->query('SELECT m.pseudo,m.message, f.following_id FROM minichat m LEFT JOIN follow f on m.pseudo  =  f.following_id order BY m.id DESC LIMIT 0, 20');
    while ($donnees = $reponse->fetch()) {
    echo '<br /><div class="bandepub2" style="background-color: #fff; text-align: center; box-shadow: 1px 1px 12px #555;">'; echo $donnees['pseudo'] . ' </strong>:<br />' . $donnees['message']; echo  ' <br /></div>' ; echo '</div>';
    }
    est équivalent
    à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $bdd = new PDO('mysql:host=localhost;dbname=name', 'user', 'mdp');
    $reponse = $bdd->query('SELECT pseudo,message FROM minichat  order BY id DESC LIMIT 0, 20');
    while ($donnees = $reponse->fetch()) {
    echo '<br /><div class="bandepub2" style="background-color: #fff; text-align: center; box-shadow: 1px 1px 12px #555;">'; echo $donnees['pseudo'] . ' </strong>:<br />' . $donnees['message']; echo  ' <br /></div>' ; echo '</div>';
    }
    car tu sélectionnes donc les messages sans te soucier d'une relation avec la table follow, comme tu n'utilises aucun champs de follow dans cette portion de code ... en tout cas
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Oui d'accord merci

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Oui tu as raison vttman effectivement j'avais mal interpréter t'as dernière publication et du coup ça ne fait pas ce que je veut à savoir que ton code lit juste les messages simplement comme ma première version du code mais dans la 2ème version j'aurais souhaité rendre privé donc invisible les messages qu'un utilisateur émet uniquement à ses amis. Tu comprends ? (Je pense que oui) enfin je l'espère

  15. #15
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Hello Rombutucraft,
    Tu as trop de messages donc ?

    Tu voudrais tous les messages de la table minichat avec le champ pseudo qui ne doit pas apparaitre
    dans la table follow (champ following_id) ... c'est ça ?
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Ce que je veut c'est que si la personne follow une personne qui à émit un message alors on affiche ce dernier et si elle ne le follow pas ont affiche rien ok ?

  17. #17
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Ce que je en comprends pas c'est la représentation en base
    des cas que tu me cites ...

    Ainsi, Le plus simple pour moi ... donner un jeu d'essai des 2 tables
    avec ces 2 cas
    1 )personne follow une personne qui à émit un message alors on affiche ce dernier
    2 )si elle ne le follow pas ont affiche rien ok

    ex : messages m

    m.id,m.image,m.pseudo,m.message
    ---------------------------------
    1,'imagex.jpg','toto,'salut la compagnie'
    2,'imagez.jpg','georges,'recherche une lampe'
    etc.

    follow f

    f.id,f.follower_id,f.following_id,f.message
    ---------------------------------
    5,'julien',toto', 'Truc à te demander'
    10,'julien',toto', 'Truc à te demander II'
    11,'julien',lucas', 'no way'
    etc.


    et bien sûr le résultat attendu

    m.image,m.pseudo,m.message,f.follower_id,f.following_id,f.message !???
    -------------------------------------------------------------
    ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    Je comprend pas trop désolé.

  19. #19
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Si je reprends cet exemple,

    soit une table commande
    CDE(Num_cde)
    soit une table détail commande
    DETCDE(Num_cde, lig_cde)


    Imaginons que tu me fournisses ceci

    Jeu d'essai
    CDE(Num_cde)
    ---------------------------------------
    1
    2
    3
    4
    5


    Jeu d'essai
    DETCDE(Num_cde, lig_cde)[/QUOTE]
    ---------------------------------------
    1, 10
    1, 15
    1, 20
    3, 10
    5, 15

    Tu voudrais sortir les commandes sans ligne dans DETCDE

    Ton résultat attendu
    -----------------------------------------------------------------------
    2
    4

    Ma proposition pour trouver le résultat attendu
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select Num_cde from CDE where  Num_cde not in (select Num_cde from DETCDE)
    Avec ces jeux d'essai, on peut plus facilement discuter / se comprendre.
    Maintenant sans cela ... il y aura peut-être d'autres forumeurs qui pourront t'aider, moi pas ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  20. #20
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 173
    Points : 50
    Points
    50
    Par défaut
    J'ai que 11ans donc je ne comprends rien à votre schéma

Discussions similaires

  1. [MySQL] Un formulaire qui ne fonctionne pas comme il faut (problèmes avec stripslashes & com)
    Par vincent.b dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/04/2007, 20h02
  2. requete qui ne fonctionne pas comme je shouterais
    Par domino_dj dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/04/2007, 12h27
  3. un if qui ne fonctionne pas comme je veux
    Par Kelly182 dans le forum Access
    Réponses: 4
    Dernier message: 27/07/2006, 15h12
  4. [vb.net] Condition qui ne fonctionne pas
    Par dyree dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/06/2006, 09h55
  5. time.sleep() ne fonctionne pas comme souhaité
    Par Olivier_ dans le forum Général Python
    Réponses: 3
    Dernier message: 19/11/2005, 01h46

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