Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Homme Profil pro Ludo
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludo
    Âge : 26
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2012
    Messages : 48
    Points : 7
    Points
    7

    Par défaut Aide pour zone de commentaire presque terminé.

    Bonjour à tous, je suis depuis 2 jours sur une zone de commentaires sur un de mes articles. J'ai créer les articles qui s'affiche un par un grâce à une pagination, et là j'essais d'afficher les commentaires de ma base de données. ils s'affichent bien mais ils sont à part de ma page où sont les articles, j'essais de réunir tout ça mais je n'y arrive pas. Je suis prêt du but pourtant, enfin j'espère !

    Pour commencer voici mes 2 tables:

    table md_clip:
    Code sql :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TABLE IF NOT EXISTS `md_clip` (
      `id_clip` int(11) NOT NULL AUTO_INCREMENT,
      `groupe_clip` varchar(50) NOT NULL,
      `titre_clip` varchar(100) NOT NULL,
      `lien_clip` varchar(100) NOT NULL,
      `web_clip` varchar(50) NOT NULL,
      `com_clip` text NOT NULL,
      `date_clip` date NOT NULL,
      `util_clip` varchar(50) NOT NULL,
      `total_votes` int(11) NOT NULL DEFAULT '0',
      `used_ips` longtext NOT NULL,
      `id` varchar(11) NOT NULL,
      `total_value` int(11) NOT NULL,
      PRIMARY KEY (`id_clip`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=87 ;


    table md_comment:
    Code sql :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS `md_comment` (
      `id_com` int(4) NOT NULL AUTO_INCREMENT,
      `pseudo` varchar(60) NOT NULL,
      `mail` int(100) NOT NULL,
      `mess_com` varchar(255) NOT NULL,
      `id_billet` int(3) NOT NULL,
      `date_com` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id_com`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;


    Voici une partie ma page index avec pagination (celle avec mes articles):
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php $req = "SELECT id_clip,groupe_clip,titre_clip,lien_clip,com_clip,util_clip,id,date_clip,
    				DATE_FORMAT(date_clip, '%W %d %M %Y à %H:%i') AS date_creation_fr,
    				DATE_FORMAT(date_clip, '%M') AS date_mois_clip,
    				EXTRACT(DAY FROM date_clip) AS jour_clip,
    				EXTRACT(MONTH FROM date_clip) AS mois_clip,
    				EXTRACT(YEAR FROM date_clip) AS annee_clip
    				FROM md_clip WHERE date_clip >= '2012-09-10' AND date_clip <= CURDATE() ORDER BY date_clip DESC LIMIT $perPage OFFSET $offset";
    		$result = mysql_query($req) or die(mysql_error());
     
    		$bar = 'BONJOUR TOUT LE MONDE!';
    		$bar = ucfirst($bar);             // BONJOUR TOUT LE MONDE!
    		$bar = ucfirst(strtolower($bar));
     
    		while($data = mysql_fetch_object($result))
    		{
    			echo($bar);
    			echo rating_bar("$data->id_clip",'5');
    		    echo "
    					<div class='boxgrid peek'>
    						<div class='date'>
    							<table border='1'>
    								<tr>
    									<td>{$data->date_mois_clip}&nbsp;{$data->annee_clip}</td>
    								</tr>
    								<tr>
    									<td>{$data->jour_clip}</td>
    								</tr>
    							</table>
    						</div> 
     
    						<div class='groupe'>
    							<p>{$data->groupe_clip}</p>
    						</div>
     
    						<div class='titre'>
    							<p>{$data->titre_clip}</p>
    						</div>
     
    					</div>
    						<p>{$data->lien}</p>
    						<iframe width='900' height='480' src=\"http://www.youtube.com/embed/" . $data->lien_clip ."\"/}' frameborder='0' allowfullscreen></iframe>
    						<br/>
     
    						{$etoiles}
     
    					<div id='commentaire_utilisateur'>
    						<div id='utilisateur'>
    							<table CELLPADDING='5'>
    								<tr>
    									<td><img src=\"images/avatars/" . $data->util_clip . "\"/></td>
    									<td align='left' valign='top'>{$data->util_clip}:<br/>{$data->com_clip}</td>
    								</tr>
    							</table>
    						</div>
    					</div>";
    		}
     
    ?>


    Et ma page "brut" avec mes commentaires qui s'affichent tous avec le titre des articles:
    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
    <?php
            $cx =  mysql_connect("localhost","src10d01","64b61s");
            if($cx == 0){
                ?>
                <font>ERREUR</font>
                </body></html>
                <?
                exit;
            }
            $test = mysql_select_db("basesrc10d01"); 
    		mysql_query("SET lc_time_names = 'fr_FR'");
     
    		$req = "SELECT * FROM md_clip cl JOIN md_comment co ON co.id_billet=cl.id_clip WHERE id_clip = '2'";
     
    		$result = mysql_query($req) or die(mysql_error());
     
    		while($data = mysql_fetch_object($result))
    		{
    		    echo "
    		    		{$data->groupe_clip}:<br/>
    		    		{$data->pseudo}:<br/>
    					{$data->mess_com}<br/>
    					------------------------<br/>";
     
    		}
     
    	?>

    Pour plus de compréhension, voici ce que j'aimerais faire :

    -----Page1-----
    article 1
    commentaire1.1
    commentaire 1.2
    -----------------

    -----Page2-----
    article 2
    commentaire2.1
    commentaire 2.2
    -----------------

    -----Page3-----
    article 3
    commentaire3.1
    commentaire 3.2
    -----------------

    Voilà j'espere que c'est assez claire et que vous pourrez m'aider

  2. #2
    Membre du Club
    Inscrit en
    janvier 2007
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : janvier 2007
    Messages : 163
    Points : 40
    Points
    40

    Par défaut

    Bonjour
    ce que je vois, à priori,
    regarde:
    Code :
    id_clip` int(11) NOT NULL AUTO_INCREMENT,
    et
    Code :
    id_billet` int(3) NOT NULL,
    et en suite tu dis
    Code :
    $req = "SELECT * FROM md_clip cl JOIN md_comment co ON co.id_billet=cl.id_clip WHERE id_clip = '2'";
    il ya pas de concordance entre ceux-ci, au niveau des clés,


    pour que cela puisse s'affiche comme tu veux,
    dans le code de ton affichage,
    tu dois pointer d'abord sur le premier enregistrement de la table selon ta selection, en registrant le code ou la cle primaire de l'article puis tu affiche le titre de se dernier, ensuite tu fais une recherche dans ta table commentaire pour rechercher les commentaires dont la clé ou le code est egale à la valeur enregistrée dans la variable
    si cela est trouvé alors il affiche un à un les commentaires trouvés.
    courage et bonne chance

  3. #3
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 963
    Points : 3 910
    Points
    3 910

    Par défaut

    Salut

    Comme l'a souligné @Kitcarson23, il y a des choses qui ne vont pas dans la structure des table, du moins, il y a des compléments d'info à fournir, car j'ai du mal à comprendre.

    Normalement (donc en général), lorsque 2 tables sont liées entre elles comme c'est le cas ici, on a d'un coté d'une table avoir une clé primaire et dans l'autre table une clé secondaire.
    Les 2 champs auront non seulement le même nom, mais aussi la même structure.
    Exemple :
    table "md_clip" :
    id_clip int(11) NOT NULL AUTO_INCREMENT (ici c'est la clé primaire)
    ... etc ... les autres champs

    table "md_comment" :
    id_com int(11) NOT NULL AUTO_INCREMENT (ici c'est la clé primaire)
    id_clip (int(11) NOT NULL (ici la clé secondaire, même nom et même structure que id_clip de la table "md_clip")


    Or de ton coté on n'a pas la certitude qu'il y ait vraiment une clé secondaire dans la table "md_comment", on ne voit pas de champ "id_clip" dans cette table.
    Par rapport à la requête que tu as mis, de la jointure (co.id_billet=cl.id_clip), on ne peu que supposer que id_billet serait cette clé secondaire.
    Cependant, et si c'est réellement le cas, il y a une erreur dans la structure de ce champ, ça devrait être :
    id_billet int(11) -> identique à la clé primaire id_clip car les valeurs seront les mêmes.

    Si cette table "md_comment" n'a pas cette clé secondaire (id_clip), alors il faudrait la rajouter avec les valeurs concordantes, car c'est cela qui permettra de faire la jointure entre ces 2 tables, et donc de pouvoir récupérer les commentaires liés à chaque clip.


    Par ailleurs, il faudrait aussi améliorer certaines choses, entre autre certains champs de cette table "md_comment".
    Comme éviter de mettre des pseudos, mais plutôt mettre les identifiants des membres et là encore faire une jointure entre la table "membre" et "md_comment" pour récupérer le pseudo du membre si on en a besoin.
    Idem pour le champ "mail" de cette même table.
    C'est une erreur de procéder ainsi, car si un jour le membre qui a créé un commentaire change de mail, et bien cela va créer un bug si on venait à l'exploiter.
    Vu le problème, on aura alors tendance à se dire qu'il suffit de faire une requête de mise à jour sur cette table pour justement modifier le mail si le mail du profil du membre change.
    Ce sera alors une requête SQL de trop.
    Le plus simple c'est justement de ne pas mettre de champ "mail" dans cette table, mais y mettre (là encore) un champ "id_membre" et récupérer son mail en faisant une jointure sur la table du profil du membre (table membre).


    Bref ... il y a quelques petits truc comme ça a améliorer, sinon tu risque de galérer pour la gestion de toutes ces données.


    Bon courage ... surtout bonne année
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •