Partage
  • Partager sur Facebook
  • Partager sur Twitter

Big tuto sur les forums

comment créer un forum

Sujet résolu
11 septembre 2012 à 19:56:15

Je crois que le forum de démonstration est une ancienne version du tutoriel, qui utilise les fonctions mysql_*.
  • Partager sur Facebook
  • Partager sur Twitter

Mon message t'a aidé ? N'hésite pas à cliquer sur le bouton 👍.

11 septembre 2012 à 21:25:44

Evidemment, pas de PDO MAIS je pensais qu'il l'avait hébergé ensuite avec la nouvlle version.
  • Partager sur Facebook
  • Partager sur Twitter
11 septembre 2012 à 22:10:46

Attention aux idées fausses !

Certains privilégiés ont d'ores et déjà accès à PHP5 chez Free, mais ce n'est pas le cas dans la grande majorité des utilisateurs qui s'en servent comme hébergeur.
Donc si t'es chez Free et que PHP5 ne fonctionne pas, c'est que t'as pas de chance, mais il me semble qu'il existe une combien pour arranger ça (n'étant pas chez Free pour l'hébergement, je ne saurais pas dire quoi)
  • Partager sur Facebook
  • Partager sur Twitter
11 septembre 2012 à 22:21:57

Il semblerait qu'il est possible de "forcer" le passage à php5 en ajoutant la ligne "php 1" dans le fichier .htaccess

Mais l'erreur semble vraiment correspondre à une non activation de PDO pour le SGBD utilisé.
  • Partager sur Facebook
  • Partager sur Twitter
14 septembre 2012 à 8:20:05

j'ai effectivement forçé avec un fichier .htaccess et php5. mais rien n'y fait. Et j'ai fait un tour ici mais meme avec leur astuce ça ne marche pas.

va falloir que je me mette à wampserver mais je n'y connais rien alors vais commencer à apprendre...
  • Partager sur Facebook
  • Partager sur Twitter
14 septembre 2012 à 12:51:26

Je ne comprends pas trop le rapport avec wampserver, lorsque tu vas envoyer tes dossiers chez Free, le problème va se représenter non ?
  • Partager sur Facebook
  • Partager sur Twitter
14 septembre 2012 à 18:20:16

Oui le problème ne sera pas réglé comme cela.

Le forum chez free n'est pas en PDO pour la raison évoquée plus haut : free ne tolér(ait/e ?) pas la PDO.
  • Partager sur Facebook
  • Partager sur Twitter
14 septembre 2012 à 22:58:08

Bonsoir,

J'ai réussi à faire le forum du SDZ, la section lu et non lu dans voirforum.php, le souci se place au niveau de l'index.php.
Sans le lu/non lu, mon tableau apparaît, dès que j'insère ce foutu système, plus rien, quelqu'un pourrait-il m'aider ? merci
if ($id==0)
{
$add1=' ';
$add2=' ';
}
if ($id!=0) //on est connecté 
          {
echo 'boulette1';
//Premièrement, sélection des champs
$add1 = 'tv_id, tv_post_id, tv_poste'; 
//Deuxièmement, jointure
$add2 = 'LEFT JOIN forum_topic_view 
ON forum_topic.topic_id = forum_topic_view.tv_topic_id AND forum_topic_view.tv_id = :id';
          }//fin de vérification de la connexion
echo 'boulette2';

//Cette requête permet d'obtenir tout sur le forum
$query=$db->prepare('SELECT cat_id, cat_nom, 
forum_forum.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, forum_topic.topic_id,  forum_topic.topic_post, post_id, post_time, post_createur, membre_pseudo, 
membre_id, '.$add1.'
FROM forum_categorie
LEFT JOIN forum_forum ON forum_categorie.cat_id = forum_forum.forum_cat_id
LEFT JOIN forum_post ON forum_post.post_id = forum_forum.forum_last_post_id
LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur '.$add2.'
LEFT JOIN forum_topic_view ON forum_topic_view.tv_post_id = forum_forum.forum_last_post_id
AND forum_topic_view.tv_id = :id
WHERE auth_view<=:lvl ORDER BY cat_ordre DESC, forum_ordre DESC');
$query->bindValue (':lvl',$lvl, PDO::PARAM_INT);
$query->bindValue(':id',$id,PDO::PARAM_INT);
echo 'boulette3';
if ($id!=0) 
$query->execute();
echo 'boulette4';
if ($query->rowCount()>0)
{
echo 'pas de forum, allez à l\'administration';
}
else
          {
?>
<table>
<?php	
 //Début de la boucle
  while ($data = $query->fetch())
            {
		
        //On affiche chaque catégorie
        if ($categories != $data['cat_id'])
        {
	echo 'boulette5';
        //Si c'est une nouvelle catégorie on l'affiche
        $categories = $data['cat_id'];
		
              ?>
                <tr>
                <th></th>
                <th class="titre"><strong><?php echo stripslashes(htmlspecialchars($data['cat_nom'])); ?>
                </strong></th>             
                <th class="nombremessages"><strong>Sujets</strong></th>       
                <th class="nombresujets"><strong>Messages</strong></th>       
                <th class="derniermessage"><strong>Dernier message</strong></th>   
                </tr>
                <?php
        }
	$query->CloseCursor();
            }//fin de la boucle	
if (verif_auth($data['auth_view']))              
      {
	  echo 'boulette5';
if ($id!=0) //on est connecté 
			{
				//Premièrement, sélection des champs
				$add1 = ',tv_id, tv_post_id, tv_poste'; 
				//Deuxièmement, jointure
				$add2 = 'LEFT JOIN forum_topic_view 
				ON forum_topic.topic_id = forum_topic_view.tv_topic_id AND forum_topic_view.tv_id = :id';
					
			}
$query=$db->prepare('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post, topic_locked,
Mb.membre_pseudo AS membre_pseudo_createur, post_id, post_createur, post_time, Ma.membre_pseudo AS membre_pseudo_last_posteur 
'.$add1.' 
FROM forum_topic 
LEFT JOIN forum_membres Mb ON Mb.membre_id = forum_topic.topic_createur
LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
LEFT JOIN forum_membres Ma ON Ma.membre_id = forum_post.post_createur
'.$add2.'
WHERE topic_genre = "Annonce" AND forum_topic.forum_id = AND forum_topic_view.tv_id = :id
GROUP BY forum_id ORDER BY topic_last_post DESC');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
if ($id!=0) $query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
	if (!empty($id)) // Si le membre est connecté
 {
	if ($data['tv_id'] == $id) // S'il a lu le topic
      {
			if ($data['tv_poste'] == '0') 
			{
			
			if($data['tv_post_id']==$data['forum_last_post'])//pas de nouveau message
			         {
				$ico_mess = 'message.gif';
				$alt_mess = 'Pas de nouveau message';
			          }
			else
			   {
				$ico_mess = 'message_non_lu.gif'; // S'il y a un nouveau message
				$alt_mess = 'Nouveau message';
				
			   }
		    }
		else // S'il n'a pas lu le topic
		{
			$ico_mess = 'messagep_non_lu.gif';
		}
	  }
         else // s'il a posté 
		 {
		 if ($data['tv_post_id'] == $data['forum_last_post']) //S'il n'y a pas de nouveau message
			{		
		     
			                $ico_mess='messagep_lu.gif';
							$alt_mess = 'Pas de nouveau message, déjà participé';
			}				
           else//s'il y a un nouveau message
{
 $ico_mess = $ico_mess='messagep_non_lu.gif'; 
							$alt_mess = 'Nouveau message, déjà participé';
							
}
          }
 }
else // s'il n'a pas lu le topic
                      {
                                $ico_mess='message_non_lu.gif';//S'il n'a pas lu le topic
                                 $alt_mess = 'nouveau sujet';
                      }
     }//fin du if de vérification
else    //pas connecté
			{
				$ico_mess='message.gif';
				$alt_mess = 'Message';
				$title_mess = 'Enregistrez vous pour profiter des fonctionalités du forum.';
			}
			
echo'<tr><td><img src="./images/'.$ico_mess.'" alt="'.$alt_mess.'" " /></td>
    <td class="titre"><strong>
    <a href="./voirforum.php?f='.$data['forum_id'].'">
    '.stripslashes(htmlspecialchars($data['forum_name'])).'</a></strong>
    <br />'.nl2br(stripslashes(htmlspecialchars($data['forum_desc']))).'</td>
    <td class="nombresujets">'.$data['forum_topic'].'</td>
    <td class="nombremessages">'.$data['forum_post'].'</td>';
if (!empty($data['forum_post']))
    {
         //Selection dernier message
	 $nombreDeMessagesParPage = $config['post_par_page'];
         $nbr_post = $data['topic_post'] +1;
	 $page = ceil($nbr_post / $nombreDeMessagesParPage);
		 
         echo'<td class="derniermessage">
         '.date('H\hi \l\e d/M/Y',$data['post_time']).'<br />
         <a href="./voirprofil.php?m='.stripslashes(htmlspecialchars($data['membre_id'])).'&amp;action=consulter">'.$data['membre_pseudo'].'  </a>
         <a href="./voirtopic.php?t='.$data['topic_id'].'&amp;page='.$page.'#p_'.$data['post_id'].'">
         <img src="./images/go.gif" alt="go" /></a></td></tr>';
    }

else
     {
         echo'<td class="nombremessages">Pas de message</td></tr>';
     }
	$totaldesmessages += $data['forum_post'];
          }//fin du else


$query->CloseCursor();
 //Cette variable stock le nombre de messages, on la met à jour
     

     //On ferme notre boucle et nos balises
 //fin de la boucle
  //Fin de la vérification d'autorisation
 echo '</table></div>';
//Le pied de page ici :
  • Partager sur Facebook
  • Partager sur Twitter
16 septembre 2012 à 15:14:34

Citation : zizanie

Je ne comprends pas trop le rapport avec wampserver, lorsque tu vas envoyer tes dossiers chez Free, le problème va se représenter non ?



je terminerai le tuto du forum sur wampserver puis ensuite je "tenterai" de faire le site qui va avec. Et seulement apres je trouverai un hebergeur mais j'ai bien compris que chez free, il n'y aura pas de forum
  • Partager sur Facebook
  • Partager sur Twitter
16 septembre 2012 à 16:49:51

Vu sous cette optique, ok

  • Partager sur Facebook
  • Partager sur Twitter
27 septembre 2012 à 12:40:00

Pour ton systeme lu non lu c'est à toi d'adapter le script je ne vais pas te donner la solution mais sache déjà que le script du cours contient déjà une erreur ;)

  • Partager sur Facebook
  • Partager sur Twitter
27 septembre 2012 à 13:57:08

Avec le code que j'ai fourni plus haut, les lu et non lu commencent à apparaître, mais le souci c'est que je n'ai plus catégories !!!!
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 octobre 2012 à 2:56:11

J'ai un petit soucis avec le système de lu/non lu

Il fonctionne très bien.

Cependant je voudrais ajouter "Marquer les forums comme lus"

<?php
	if(isset($_GET['l'])){
		if($_GET['l'] == 'lu'){
			if($id!=0){
				$query=$db->prepare('UPDATE topic_view SET tv_post_id = (SELECT topic_last_post FROM topic WHERE topic_id = topic_view.tv_topic_id) WHERE tv_id = :id');
				$query->bindValue(':id',$id, PDO::PARAM_STR);
				$query->execute();
				$query->CloseCursor();
			}
		}
	}
?>


Mais sa ne fonctionne pas.

Quand je regarde mon code et ma base de donné. Je comprend que mon compte n'est pas bon.

Car il faut que j'ajoute et non que j'actualise mes donné.

Mais se qui me gêne.

Si j'ai 700 membres, et 10000 sujets sa me fera 7000000 entré dans ma base de donné si les messages sont lu

Il y aurais pas une façons plus "propre" de faire cela
  • Partager sur Facebook
  • Partager sur Twitter
3 octobre 2012 à 18:38:18

Déjà si tu as 700 membres et 10 000 sujets, tu as 10 000 entrée car tu ne marque pas lu pour tous les membres mais uniquement celui qui le souhaite.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
3 octobre 2012 à 18:54:23

C'est pas faut. Mais si j'ajoute un timestamp également.

Qui surprime les entré dans la table depuis la dernière visite du membres.

Et que dans ma requêtes pour afficher les messages non lu je fait depuis la dernière visite.

Quels sont les avantages et inconvénient ?
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2012 à 15:11:03

bonjour ,
la .......... moi
J'ai une bonne question :
Comment un membre devient un Admin ?!
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
6 octobre 2012 à 18:19:23

Citation : PHP CODER

bonjour ,
la .......... moi
J'ai une bonne question :
Comment un membre devient un Admin ?!



En changeants son rang depuis l'espace admin
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2012 à 22:41:09

Il faut qu'il soit rang = 4
  • Partager sur Facebook
  • Partager sur Twitter
7 octobre 2012 à 9:17:15

Je pense que ton problème serait plus côté sécurité serveur, c'est vrai que si ton hébergeur limite le nombre de requêtes dans un espace de temps donné, tu ne pourra peut être pas insérer tes 10 000 lignes ! ^^

Je te conseil donc ce tuto : http://www.siteduzero.com/tutoriel-3-4 [...] -donnees.html
Le but étant d'insérer tes 10 000 lignes à l'aide d'une seule et unique requête ! ;)

EDIT :
J'oubliais de préciser : dans ce cas, le serveur ne te limitera pas au nombre de requêtes vu que tu n'en fait qu'une seul, cependant, plus tu auras de lignes à insérer (et plus tu auras de données par ligne aussi ^^ ), plus t'as requête sera longue. :p
Pour 10 000 lignes, je pense que cela devrait prendre plusieurs secondes. :)
  • Partager sur Facebook
  • Partager sur Twitter
7 octobre 2012 à 21:01:52

Bonjour :
Hey la :
Quand j'écris un topic après si je met un post il ne s'affiche pas
  • Partager sur Facebook
  • Partager sur Twitter
7 octobre 2012 à 21:08:31

Ton post pourrait-il être plus lapidaire ? :colere2:
  • Partager sur Facebook
  • Partager sur Twitter
8 octobre 2012 à 20:21:24

Citation : PHP CODER

Bonjour :
Hey la :
Quand j'écris un topic après si je met un post il ne s'affiche pas


zizanie ta réponse ne m'aide sur rien
  • Partager sur Facebook
  • Partager sur Twitter
8 octobre 2012 à 20:27:09

Citation : PHP CODER

Citation : PHP CODER

Bonjour :
Hey la :
Quand j'écris un topic après si je met un post il ne s'affiche pas


zizanie ta réponse ne m'aide sur rien



Ce n'est pas surprenant, aucune réponse ne pourrait t'aider, on n'a pas assez d'infos pour t'aider en quoi que ce soit ! :)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
9 octobre 2012 à 15:35:30

Bonjours,

J'ai un problème tout bête avec ma messagerie, j'ai modifié la requête original du tuto pour avoir une apparence qui ressemble a la page voirforum.php

Ma requête fonctionne, mais pas très bien.

Si le membre a 1 message la boucle while va retourner 1 entré
Si le membre a 2 message la boucle while va retourner 4 entré
Si le membre a 3 message la boucle while va retourner 9 entré

Et ainsi de suite.

J'ai beau chercher, je ne trouve pas l'erreur

<?php
$query=$db->prepare('SELECT mp.mp_id, mp_titre, mp_expediteur, 
mp_receveur, mp_post, DATE_FORMAT(mp_time, "%d/%m/%Y à %Hh%i") AS mp_time, 
mp_last_post, Mb.membre_pseudo AS membre_pseudo_expediteur, 
Mc.membre_pseudo AS membre_pseudo_receveur, mp_v_id, mp_v_post_id, 
mp_v_poste, mp_post_id, mp_post_expediteur, 
DATE_FORMAT(mp_post_time, "%d/%m/%Y à %Hh%i") AS mp_post_time, 
Ma.membre_pseudo AS membre_pseudo_last_posteur FROM mp
LEFT JOIN membres Mb ON Mb.membre_id = mp.mp_expediteur
LEFT JOIN membres Mc ON Mc.membre_id = mp.mp_receveur
LEFT JOIN mp_post ON mp.mp_last_post = mp.mp_id
LEFT JOIN membres Ma ON Ma.membre_id = mp.mp_expediteur
LEFT JOIN mp_view ON mp.mp_id = mp_view.mp_v_mp_id AND mp_view.mp_v_id = :id
WHERE mp.mp_expediteur = :id OR mp.mp_receveur = :id
ORDER BY mp_last_post DESC');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
if($query->rowCount()>0){
while($data = $query->fetch()){


Mes table sql
CREATE TABLE IF NOT EXISTS `mp` (
  `mp_id` int(11) NOT NULL AUTO_INCREMENT,
  `mp_titre` char(60) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `mp_expediteur` int(11) NOT NULL,
  `mp_receveur` int(11) NOT NULL,
  `mp_time` datetime NOT NULL,
  `mp_last_post` int(11) NOT NULL,
  `mp_first_post` int(11) NOT NULL,
  `mp_post` mediumint(8) NOT NULL,
  PRIMARY KEY (`mp_id`),
  UNIQUE KEY `mp_last_post` (`mp_last_post`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `mp_post` (
  `mp_post_id` int(11) NOT NULL AUTO_INCREMENT,
  `mp_post_expediteur` int(11) NOT NULL,
  `mp_post_texte` text CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `mp_post_time` datetime NOT NULL,
  `mp_mp_post_id` int(11) NOT NULL,
  PRIMARY KEY (`mp_post_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `mp_view` (
  `mp_v_id` int(11) NOT NULL,
  `mp_v_mp_id` int(11) NOT NULL,
  `mp_v_post_id` int(11) NOT NULL,
  `mp_v_poste` enum('0','1') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`mp_v_id`,`mp_v_mp_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Si vous avez une petite idée.

Merci
  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2012 à 17:18:18

Citation : justforme

Bonjours,

J'ai un problème tout bête avec ma messagerie, j'ai modifié la requête original du tuto pour avoir une apparence qui ressemble a la page voirforum.php

Ma requête fonctionne, mais pas très bien.

Si le membre a 1 message la boucle while va retourner 1 entré
Si le membre a 2 message la boucle while va retourner 4 entré
Si le membre a 3 message la boucle while va retourner 9 entré

Et ainsi de suite.

J'ai beau chercher, je ne trouve pas l'erreur

<?php
$query=$db->prepare('SELECT mp.mp_id, mp_titre, mp_expediteur, 
mp_receveur, mp_post, DATE_FORMAT(mp_time, "%d/%m/%Y à %Hh%i") AS mp_time, 
mp_last_post, Mb.membre_pseudo AS membre_pseudo_expediteur, 
Mc.membre_pseudo AS membre_pseudo_receveur, mp_v_id, mp_v_post_id, 
mp_v_poste, mp_post_id, mp_post_expediteur, 
DATE_FORMAT(mp_post_time, "%d/%m/%Y à %Hh%i") AS mp_post_time, 
Ma.membre_pseudo AS membre_pseudo_last_posteur FROM mp
LEFT JOIN membres Mb ON Mb.membre_id = mp.mp_expediteur
LEFT JOIN membres Mc ON Mc.membre_id = mp.mp_receveur
LEFT JOIN mp_post ON mp.mp_last_post = mp.mp_id
LEFT JOIN membres Ma ON Ma.membre_id = mp.mp_expediteur
LEFT JOIN mp_view ON mp.mp_id = mp_view.mp_v_mp_id AND mp_view.mp_v_id = :id
WHERE mp.mp_expediteur = :id OR mp.mp_receveur = :id
ORDER BY mp_last_post DESC');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
if($query->rowCount()>0){
while($data = $query->fetch()){



Mes table sql

CREATE TABLE IF NOT EXISTS `mp` (
  `mp_id` int(11) NOT NULL AUTO_INCREMENT,
  `mp_titre` char(60) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `mp_expediteur` int(11) NOT NULL,
  `mp_receveur` int(11) NOT NULL,
  `mp_time` datetime NOT NULL,
  `mp_last_post` int(11) NOT NULL,
  `mp_first_post` int(11) NOT NULL,
  `mp_post` mediumint(8) NOT NULL,
  PRIMARY KEY (`mp_id`),
  UNIQUE KEY `mp_last_post` (`mp_last_post`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `mp_post` (
  `mp_post_id` int(11) NOT NULL AUTO_INCREMENT,
  `mp_post_expediteur` int(11) NOT NULL,
  `mp_post_texte` text CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `mp_post_time` datetime NOT NULL,
  `mp_mp_post_id` int(11) NOT NULL,
  PRIMARY KEY (`mp_post_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `mp_view` (
  `mp_v_id` int(11) NOT NULL,
  `mp_v_mp_id` int(11) NOT NULL,
  `mp_v_post_id` int(11) NOT NULL,
  `mp_v_poste` enum('0','1') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`mp_v_id`,`mp_v_mp_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



Si vous avez une petite idée.

Merci


Si c'est comment ça il faut vérifier si il t'a plusieurs echo
  • Partager sur Facebook
  • Partager sur Twitter
13 octobre 2012 à 12:48:42

Regarde bien tes chiffres :
1 -> 1
2 -> 4
3 -> 9

Je pense qu'il doit y avoir un carré quelque par ! ^^
  • Partager sur Facebook
  • Partager sur Twitter
10 décembre 2012 à 10:50:45

la messagerie privée bug chez moi. Je n'ai aucune erreur PHP mais la liste des messages disparais quand je poste/répond. Et je voudrais faire comme dans le forum, faire une liste des messages de la conversation.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
10 décembre 2012 à 12:59:40

Salut,
Juste comme ça, il serait bien de montrer le modèle de données (MCD) avant le script SQL, cela aide beaucoup.

Autre question, y a t-il une raison de ne pas utiliser de clés étrangères ? Cela aide à s'assurer qu'il y ait pas de bugs cachés et silencieux. En effet, sur quelque lignes l'erreur peut ne pas apparaitre mais à l'utilisation, une personne, sans mauvaise intention, peut avoir créée Le cas particulier qui va créer un bug et corrompre ta base.
a+
  • Partager sur Facebook
  • Partager sur Twitter