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 :

Récupération valeurs dans la bdd [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut Récupération valeurs dans la bdd
    Bonjour tout le monde !

    Voilà, je vais essayer de vous soumettre mon problème de façon concise ...mais c'est pas gagné

    Je mets en place un petit système de news avec commentaires comme ce qui peut se faire sur les blogs ou autres sites d'actualité. Pour l'instant rien de bien compliqué sauf que je souhaiterais que ces commentaires soient consultés pour chaque news publiées. (exemple : News 1 = x commentaires, News 2 = x commentaires, ... ) où id.news=sid.commentaire (mais j'y vient plus loin)

    Les commentaires sont conservés dans une base de données tel que :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #
    # Structure de la table `commentaire`
    #
     
    DROP TABLE IF EXISTS commentaire;
    CREATE TABLE commentaire (
      id int(11) NOT NULL auto_increment,
      hid int(11) NOT NULL default '0',
      sid int(11) NOT NULL default '0',
      nom varchar(80) NOT NULL default '',
      spec text NOT NULL,
      email varchar(80) NOT NULL default '',
      PRIMARY KEY  (id),
      FULLTEXT KEY nom (nom,spec)
    ) TYPE=MyISAM;

    les news dans cette table :

    Code sql : 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
    #
    # Structure de la table `news`
    #
     
    DROP TABLE IF EXISTS news;
    CREATE TABLE news (
      id int(11) NOT NULL auto_increment,
      hid int(11) NOT NULL default '0',
      sid int(11) NOT NULL default '0',
      nom varchar(80) NOT NULL default '',
      spec text NOT NULL,
      photoarticle text NOT NULL,
      visu varchar(4) NOT NULL default '',
      PRIMARY KEY  (id),
      FULLTEXT KEY nom (nom,spec)
    ) TYPE=MyISAM


    Pour se faire, à chaque news un lien "commentaire" est attribué avec la redirection suivante : <a href='commentaire.php?sid=$row[0]'>commentaires</a>

    où news.id = commentaire.sid (mon problème est là mais j'y vient plus loin)

    Une fois sur la page commentaire.php, voilà mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?
    $query = mysql_query("SELECT id,nom,spec,email,date FROM $commentaire WHERE sid='$sid' ORDER BY date");
    $row = mysql_fetch_row($query);
     
    while ($row = mysql_fetch_row($query)) {
     
    echo "";
    }
    ?>
    Nous voilà à l'épilogue car pour envoyer un commentaire voici ma page (ajouter_commentaire_2.php) avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
            $query = mysql_query("SELECT * FROM $commentaire WHERE nom='$name'");
    	$num = mysql_num_rows($query);
     
    $query = mysql_query("INSERT INTO $commentaire (hid,sid,nom,email,spec,date) VALUES ('$group','$subgroup','$name','$email','$spec',now())");
    ?>
    Ainsi, je récupère bien les valeurs du commentaire mais avec sid=0 à chaque commentaire.

    Comment faire pour que news.id=commentaire.sid ? et ainsi accéder à tous les commentaires pour chaque news ?

    Merci d'avance en espérant avoir été la plus claire possible..

  2. #2
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE news.id=commentaire.sid
    Mais il faut apprendre le sql pour faire de meilleures jointures.

  3. #3
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    De cette façon ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
            $query = mysql_query("SELECT * FROM $news,$commentaire WHERE nom='$name' AND news.id=commentaire.sid");
    	$num = mysql_num_rows($query);
     
    $query = mysql_query("INSERT INTO $commentaire (hid,sid,nom,email,spec,date) VALUES ('$group','news.id','$name','$email','$spec',now())");
    ?>

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Par défaut
    Il risque d'y avoir un conflit, dans ce type de "jointure" il doit y avoir des noms de table différent.

    P.s : J'ai eu un problème similaire il y a quelques temps, et le problème venait de cette façon de faire les "jointures".

  5. #5
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = mysql_query("INSERT INTO $commentaire (hid,sid,nom,email,spec,date) VALUES ('$group','news.id','$name','$email','$spec',now())")
    Si tu fais un update comme ca toute les lignes de ta table vont avoir la meme valeur n'oublie pas le WHERE et l'identifiant de la ligne a modifier.

  6. #6
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Je vais peut être poster une énorme bétise, et d'avance je m'en excuse ...

    Ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = mysql_query("INSERT INTO $commentaire (hid,sid,nom,email,spec,date) WHERE news.id=commentaire.sid VALUES ('$group','news.id','$name','$email','$spec',now())")
    ?

    D'avance merci de votre patience...

  7. #7
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = mysql_query("INSERT INTO $commentaire (hid,sid,nom,email,spec,date) VALUES ('$group','news.id','$name','$email','$spec',now()) WHERE commentaire.id='value'")
    Il faut que tu indique la ligne sur laquel tu va faire une modification, la clé primaire de ta table c'est id donc il faut que tu remplace le 'value' par le numèro de la ligne à modifier.

  8. #8
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Merci ! Donc si j'ai tout suivi, l'ensemble de mon code donne quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
            $query = mysql_query("SELECT * FROM $news,$commentaire WHERE nom='$name' AND news.id=commentaire.sid");
    	$num = mysql_num_rows($query);
     
    $query = mysql_query("INSERT INTO $commentaire (hid,sid,nom,email,spec,date) VALUES ('$group','news.id','$name','$email','$spec',now()) WHERE commentaire.id='value'")
     ?>
    Je test tout ça

  9. #9
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut
    Remplace le 'value' par la valeur de commentaire.id pour la ligne voulue.
    Au faite pourquoi mets-tu un $ devant le nom de tes tables?

  10. #10
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    C'est moi qui voit mal ou je lis un INSERT et un WHERE dans la même requête

    C'est pas un UPDATE plutôt qui est souhaité ?

    La solution au problème c'est pas plutôt de faire un INSERT dans une table, récupérer l'id de l'enregistrement inséré, puis de faire un INSERT dans la deuxième table en mettant cet id récupéré dans un des champs ?

  11. #11
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut
    Oula grosse betise grosse betise.
    J'ai confondu Insert et Update .
    Enleves le Where.

  12. #12
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Si j'enlève le WHERE je le remplace par quoi ? Concernant le value je le remplace par 'news.id' ?

    Sinon j'ai pas bien compris la proposition de JWhite concernant :

    La solution au problème c'est pas plutôt de faire un INSERT dans une table, récupérer l'id de l'enregistrement inséré, puis de faire un INSERT dans la deuxième table en mettant cet id récupéré dans un des champs ?
    merki

    [edit]Je remue le code dans tous les sens et j'avoue être complètement larguée...
    En fait la difficulté est d'associer mon nouveau commentaire avec la news correspondante. J'éprouve le plus grand mal à concevoir le code, ne sachant par quel bout commencer. Comment récupérer l'id de la news et l'associer à mon commentaire ?

    Désolé je tourne en rond comme vous pouvez le lire [/edit]

  13. #13
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Citation Envoyé par Angelik
    Si j'enlève le WHERE je le remplace par quoi ? Concernant le value je le remplace par 'news.id' ?
    Cette remarque me fait peur...


    Il faudrait en dire plus, la cinématique des pages, comment se fait l'ajout d'un commentaire pour une news, ...

  14. #14
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Re ...


    Citation:
    Angelik a écrit :
    Si j'enlève le WHERE je le remplace par quoi ? Concernant le value je le remplace par 'news.id' ?
    Cette remarque me fait peur...
    Mon compte aurait-il été piraté afin de me faire passer pour une incompétente ? lol

    Autant pour moi, je vais essayer de t'expliquer où je bute ...

    En reprenant le premier post de cette discussion, voici quelques précisions :

    Tout se passe sur 3 pages.

    La première : [resultats.php] sur laquelle un lien (<a href='commentaire.php?sid=$row[0]'>commentaires</a>) permet d'accéder au commentaire de la news (un peu comme ce qui se fait sur les blogs).

    Ainsi,la deuxième page [commentaire.php] permet de lire les commentaires associés à la news et d'en envoyer un (commentaire) via un formulaire.

    Le formulaire rempli, celui ci est traité par une troisième [ajouter_commentaire_2.php] et récupère les données dans la table 'commentaire'. Un champs 'sid' dans la table commentaire doit permettre d'associer l'id de la news d'où [news.id=commentaire.sid]

    voilou

  15. #15
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Ok, alors dans le formulaire de ta page commentaire.php tu dois mettre un champ caché "id_commentaire" auquel tu donnes comme valeur l'id du commentaire (que tu récupères de ton line via $_GET['sid']).
    Un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="sid" value="' . $_GET['sid'] . '" />";
    Dans ta page ajouter_commentaire_2.php il te reste à récupérer les données du formulaire (tu le fais déjà), tu récupères parmi celles-ci ton sid.
    Et après pour finir dans ta requête tu as juste à mettre pour le champ sid la valeur récupérée via le formulaire (là c'est du SQL de base, ta requête est déjà bonne tu n'as qu'à mettre sid où il faut et c'est joué).

    Voilà c'est la voie à suivre il ne te reste plus qu'à coder ça, ce qui ne sera pas bien compliqué quitte à s'aider de ton ami Google.

    Bon courage.

  16. #16
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Merci JWhite! ça marche

    Par contre les commentaires ne s'affichent qu'à partir du deuxième posté. J'ai tenté un [desc LIMIT 0, 99] mais toujours le même inconvénient...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query = mysql_query("SELECT id,nom,spec,email,date FROM $commentaire WHERE sid='$sid' ORDER BY date desc LIMIT 1 , 99");
    $row = mysql_fetch_row($query);
     
    while ($row = mysql_fetch_row($query)) {
     
    echo "$row[2]";
    }
    En tout cas merci de ton aide ainsi qu'à tout ceux qui ont participé à la discussion

  17. #17
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Enlève le LIMIT il sert à rien, enlève aussi le $ devant commentaire dans ta requête (bizarre que ça marche d'ailleurs...).

    Ton souci vient du fait que tu fais un mysql_fetch_row avant la boucle. Donc il prend le premier enregistrement à ce moment là. Et quand tu commences ta boucle tu en fais un autre donc il prend le deuxième enregistrement. Donc tu enlèves le mysql_fetch_row qui sert à rien avant ton while et ça sera bon (et ajuste ta requête pour qu'elle soit plus propre avec ce que j'ai mis juste avant).

  18. #18
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Merki

  19. #19
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Citation Envoyé par Angelik
    Merki
    Et ? C'est bon c'est résolu ?

    PS : tu es du Mans aussi

  20. #20
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Oui c'est résolu merki

    Sinon, je suis aussi du Mans

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 12/06/2007, 11h05
  2. Réponses: 2
    Dernier message: 22/09/2006, 09h29
  3. [JSP][spring] récuperation d une valeur dans une BDD
    Par iftolotfi dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 24/06/2006, 15h39
  4. pb pour rentrer une valeur dans une bdd mysql
    Par gaetan.tranvouez dans le forum Requêtes
    Réponses: 25
    Dernier message: 02/06/2006, 21h29
  5. Probleme pour insérer une valeur dans une bdd
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 30/05/2006, 10h58

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