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 :

Aide pour zone de commentaire presque terminé.


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 48
    Points : 34
    Points
    34
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 : 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
    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 régulier
    Inscrit en
    Janvier 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 219
    Points : 76
    Points
    76
    Par défaut
    Bonjour
    ce que je vois, à priori,
    regarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_clip` int(11) NOT NULL AUTO_INCREMENT,
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_billet` int(3) NOT NULL,
    et en suite tu dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    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]

Discussions similaires

  1. Besoin d'aide pour zone admin
    Par totokeupon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 06/05/2015, 16h45
  2. [MySQL] Aide pour terminer le code de traitement !
    Par plorton dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/08/2011, 13h07
  3. Aide pour terminer un projet
    Par am_003 dans le forum Général Java
    Réponses: 4
    Dernier message: 28/04/2010, 09h04
  4. Je besoin d'aide pour terminer mon code
    Par Paulinho dans le forum C++
    Réponses: 7
    Dernier message: 06/11/2005, 23h30

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