Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/12/2012, 21h55   #1
Aiglichon
Invité régulier
 
Homme Ludo
Étudiant
Inscription : décembre 2012
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ludo
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : décembre 2012
Messages : 47
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
Aiglichon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 18h28   #2
kitcarson23
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 165
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 165
Points : 36
Points : 36
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
kitcarson23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 19h50   #3
RunCodePhp
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 965
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 965
Points : 3 675
Points : 3 675
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]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h14.


 
 
 
 
Partenaires

Hébergement Web