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)
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'])).'&action=consulter">'.$data['membre_pseudo'].' </a>
<a href="./voirtopic.php?t='.$data['topic_id'].'&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 :
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
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
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 !
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.
Pour 10 000 lignes, je pense que cela devrait prendre plusieurs secondes.
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;
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
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.
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+
Mon message t'a aidé ? N'hésite pas à cliquer sur le bouton 👍.
Mon site - Mon livre sur le XML - Mon blog