Récupéré l'id d'un membre [Résolu/Fermé]

Signaler
Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
-
Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
-
Bonjour à tous et à toutes,

Je suis actuellement un tutoriel permettant la création d'un forum.

Je suis confronté à un petit problème que j'ai du mal à comprendre, mon soucis consiste à afficher le pseudo du membre, avec son id etc.. lors du post d'un message sur le forum, avec le code suivant ( que j'ai récupéré du tutoriel ) :

l'id du membre correspond à membre_id, post_createur est censé correspondre à l'id du membre mais lors de l'envoie d'un post, le champs de post_createur affiche 0...

voici ma page qui permet d'afficher les topic avec les infos du message posté, par qui a quelle h etc...

affichertopic.php:

<?php session_start(); ?>
<?php require_once 'connexioninscription.inc.php'; ?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Afficher un topic." />
<meta name="keywords" content="Topic" />
<title>Topic </title>
<link rel="shortcut icon" sizes="32x32" title="topic" type="image/png" href="mafavicon.png" />
<link href="css1.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="container">
<?php
include ("header.inc.php");
include ("menus.inc.php");
include("debut.php");
?>
<div id="corpstopic">
<a href="forum.php" title="retour à l'index du forum"><h1 class="titre1">Forum</h1></a>
<div id="formtopic">
<?php
//On récupère la valeur de t
$topic = (int) $_GET['t'];
  
//A partir d'ici, on va compter le nombre de messages pour n'afficher que les 15 premiers
$query=$bdd->prepare('SELECT topic_titre, topic_post, forum_topic.forum_id, topic_last_post,
forum_name, auth_view, auth_topic, auth_post 
FROM forum_topic 
LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id 
WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$forum=$data['forum_id']; 
$totalDesMessages = $data['topic_post'] + 1;
$nombreDeMessagesParPage = 15;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<?php
echo '<p class="textesimple"><i>Vous êtes ici</i> : <a href="./forum.php">Index du forum</a> --> 
<a href="./afficherforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
 --> <a href="./affichertopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>';
echo '<div id="meftitrefor"><h1 class="textesimple">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</h1></div>';
?>
<?php
//Nombre de pages

$page = (isset($_GET['page']))?intval($_GET['page']):1;
 
//On affiche les pages 1-2-3 etc...
echo '<p class="textesimple">Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    if ($i == $page) //On affiche pas la page actuelle en lien
    {
    echo $i;
    }
    else
    {
    echo '<p class="textesimple"><a href="affichertopic.php?t='.$topic.'&page='.$i.'">
    ' . $i . '</a></p>';
    }
}

  
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  
//On affiche l'image répondre
echo'<div><a href="./poster.php?action=repondre&t='.$topic.'">
<img src="./images/repondre.gif" alt="Répondre" title="Répondre à ce topic" /></a>';
  
//On affiche l'image nouveau topic
echo'<a href="./poster.php?action=nouveautopic&f='.$data['forum_id'].'">
<img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a></div>';
$query->CloseCursor(); 
//Enfin on commence la boucle !
$query=$bdd->prepare('SELECT post_id, post_createur, post_texte, post_time,
membre_id, membre_pseudo, membre_inscription, membre_avatar, membre_localisation, membre_post, membre_signature FROM forum_post
LEFT JOIN membres ON membres.membre_id = forum_post.post_createur
WHERE topic_id =:topic ORDER BY post_id LIMIT :premier, :nombre');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->bindValue(':premier',(int) $premierMessageAafficher,PDO::PARAM_INT);
$query->bindValue(':nombre',(int) $nombreDeMessagesParPage,PDO::PARAM_INT);
$query->execute();
  
//On vérifie que la requête a bien retourné des messages
if ($query->rowCount()<1)
{
        echo'<p class="textesimple">Il n y a aucun post sur ce topic, vérifiez l url et reessayez</p>';
}
else
{
        //Si tout roule on affiche notre tableau puis on remplit avec une boucle
        ?><table>
        <tr>
        <th class="vt_auteur"><p class="textesimple"><strong>Auteurs</strong></p></th>             
        <th class="vt_mess"><p class="textesimple"><strong>Messages</strong></p></th>       
        </tr>
        <?php
        while ($data = $query->fetch())
        {
   //On commence à afficher le pseudo du créateur du message :
         //On vérifie les droits du membre
         //(partie du code commentée plus tard)
         echo'<tr><td><p class="textesimple"><strong>
         <a href="./voirprofil.php?m='.$data['membre_id'].'&action=consulterprofil">
         '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a></strong></p></td>';
            
         /* Si on est l'auteur du message, on affiche des liens pour
         Modérer celui-ci.
         Les modérateurs pourront aussi le faire, il faudra donc revenir sur
         ce code un peu plus tard ! */    
    
         if ($id == $data['post_createur'])
         {
         echo'<td id=p_'.$data['post_id'].'><p class="textesimple">Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
         <a href="./poster.php?p='.$data['post_id'].'&action=delete">
         <img src="./images/supprimer.gif" alt="Supprimer"
         title="Supprimer ce message" /></a>   
         <a href="./poster.php?p='.$data['post_id'].'&action=edit">
         <img src="./images/editer.gif" alt="Editer"
         title="Editer ce message" /></a></p></td></tr>';
         }
         else
         {
         echo'<td><p class="textesimple">
         Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
         </p></td></tr>';
         }
        
         //Détails sur le membre qui a posté
         echo'<tr><td><p class="textesimple">
         <img src="./images/avatars/'.$data['membre_avatar'].'" alt="" />
         </p><p class="textesimple">Membre inscrit le '.date('d/m/Y',$data['membre_inscription']).'
         </p><p class="textesimple">Messages : '.$data['membre_post'].'</p><p class="textesimple">
         Localisation : '.stripslashes(htmlspecialchars($data['membre_localisation'])).'</p></td>';
                
         //Message
         echo'<td><p class="textesimple">'.code(nl2br(stripslashes(htmlspecialchars($data['post_texte'])))).'
         <br /><hr />'.code(nl2br(stripslashes(htmlspecialchars($data['membre_signature'])))).'</p></td></tr>';
         } //Fin de la boucle ! \o/
         $query->CloseCursor();
?>
</table>
<?php
        echo '<p class="textesimple">Page : ';
        for ($i = 1 ; $i <= $nombreDePages ; $i++)
        {
                if ($i == $page) //On affiche pas la page actuelle en lien
                {
                echo $i;
                }
                else
                {
                echo '<a href="affichertopic.php?t='.$topic.'&page='.$i.'">
                ' . $i . '</a> ';
                }
        }
        echo'</p>';
        
        //On ajoute 1 au nombre de visites de ce topic
        $query=$bdd->prepare('UPDATE forum_topic
        SET topic_vu = topic_vu + 1 WHERE topic_id = :topic');
        $query->bindValue(':topic',$topic,PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor();
 
} //Fin du if qui vérifiait si le topic contenait au moins un message
?> 
</div>
</div>
<?php
include 'footer.inc.php';
?>        
</div>
</body>
</html>


et voici mon code qui permet l'envoie du post :

postvalide.php :

<?php session_start(); ?>
<?php require_once 'connexioninscription.inc.php'; ?>
<?php
//On récupère la valeur de la variable action
$action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';
 
// Si le membre n'est pas connecté, il est arrivé ici par erreur
if (isset($_SESSION['membre_id']));
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Afficher le forum." />
<meta name="keywords" content="Forum" />
<title>Forum</title>
<link rel="shortcut icon" sizes="32x32" title="postvalide" type="image/png" href="mafavicon.png" />
<link href="css1.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="container">
<?php
include ("header.inc.php");
include ("menus.inc.php");
include("debut.php");
?>
<div id="corpspostvalide">
<div id="formpostvalide">
<?php
switch($action)
{
    //Premier cas : nouveau topic
    case "nouveautopic":
    //On passe le message dans une série de fonction
    $message = $_POST['message'];
    $mess = $_POST['mess'];
 
    //Pareil pour le titre
    $titre = $_POST['titre'];
 
    //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable f
    $forum = (int) $_GET['f'];
    $temps = time();
 
    if (empty($message) || empty($titre))
    {
        echo'<p class="textesimple">Votre message ou votre titre est vide, 
        cliquez <a href="./poster.php?action=nouveautopic&f='.$forum.'">ici</a> pour recommencer</p>';
    }
    else //Si jamais le message n'est pas vide
    {
    //On entre le topic dans la base de donnée en laissant
        //le champ topic_last_post à 0
        $query=$bdd->prepare('INSERT INTO forum_topic
        (forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre) VALUES (:forum, :titre, :id, 1, :temps, :mess)');
        $query->bindValue(':forum', $forum, PDO::PARAM_INT);
        $query->bindValue(':titre', $titre, PDO::PARAM_STR);
        $query->bindValue(':id', $id, PDO::PARAM_INT);
        $query->bindValue(':temps', $temps, PDO::PARAM_INT);
        $query->bindValue(':mess', $mess, PDO::PARAM_STR);
        $query->execute();
 
 
        $nouveautopic = $bdd->lastInsertId(); //Notre fameuse fonction !
        $query->CloseCursor(); 
 
        //Puis on entre le message
        $query=$bdd->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id)
        VALUES (:id, :mess, :temps, :nouveautopic, :forum)');
        $query->bindValue(':id', $id, PDO::PARAM_INT);
        $query->bindValue(':mess', $message, PDO::PARAM_STR);
        $query->bindValue(':temps', $temps,PDO::PARAM_INT);
        $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
        $query->bindValue(':forum', $forum, PDO::PARAM_INT);
        $query->execute();
 
 
        $nouveaupost = $bdd->lastInsertId(); //Encore notre fameuse fonction !
        $query->CloseCursor(); 
 
 
        //Ici on update comme prévu la valeur de topic_last_post et de topic_first_post
        $query=$bdd->prepare('UPDATE forum_topic SET topic_last_post = :nouveaupost, topic_first_post = :nouveaupost WHERE topic_id = :nouveautopic');
        $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);    
        $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor();
 
        //Enfin on met à jour les tables forum_forum et forum_membres
        $query=$bdd->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 ,forum_topic = forum_topic + 1, forum_last_post_id = :nouveaupost WHERE forum_id = :forum');
        $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);    
        $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor();
     
        $query=$bdd->prepare('UPDATE membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
        $query->bindValue(':id', $id, PDO::PARAM_INT);    
        $query->execute();
        $query->CloseCursor();
 
        //Et un petit message
        echo'<p class="textesimple">Votre message a bien été ajouté!<br /><br />Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum<br />
        Cliquez <a href="./affichertopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>';
    }
    break; //Houra !
?>
<?php
    //Deuxième cas : répondre
    case "repondre":
    $message = $_POST['message'];
 
    //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable t
    $topic = (int) $_GET['t'];
    $temps = time();
 
    if (empty($message))
    {
        echo'<p class="textesimple">Votre message est vide, cliquez <a href="./poster.php?action=repondre&t='.$topic.'">ici</a> pour recommencer</p>';
    }
    else //Sinon, si le message n'est pas vide
    {
 
        //On récupère l'id du forum
        $query=$bdd->prepare('SELECT forum_id, topic_post FROM forum_topic WHERE topic_id = :topic');
        $query->bindValue(':topic', $topic, PDO::PARAM_INT);    
        $query->execute();
        $data=$query->fetch();
        $forum = $data['forum_id'];
 
        //Puis on entre le message
        $query=$bdd->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id) VALUES(:id,:mess,:temps,:topic,:forum)');
        $query->bindValue(':id', $id, PDO::PARAM_INT);   
        $query->bindValue(':mess', $message, PDO::PARAM_STR);  
        $query->bindValue(':temps', $temps, PDO::PARAM_INT);  
        $query->bindValue(':topic', $topic, PDO::PARAM_INT);   
        $query->bindValue(':forum', $forum, PDO::PARAM_INT); 
        $query->execute();
 
        $nouveaupost = $bdd->lastInsertId();
        $query->CloseCursor(); 
 
        //On change un peu la table forum_topic
        $query=$bdd->prepare('UPDATE forum_topic SET topic_post = topic_post + 1, topic_last_post = :nouveaupost WHERE topic_id =:topic');
        $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);   
        $query->bindValue(':topic', (int) $topic, PDO::PARAM_INT); 
        $query->execute();
        $query->CloseCursor(); 
 
        //Puis même combat sur les 2 autres tables
        $query=$bdd->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 , forum_last_post_id = :nouveaupost WHERE forum_id = :forum');
        $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);   
        $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT); 
        $query->execute();
        $query->CloseCursor(); 
 
        $query=$bdd->prepare('UPDATE membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
        $query->bindValue(':id', $id, PDO::PARAM_INT); 
        $query->execute();
        $query->CloseCursor(); 
 
        //Et un petit message
        $nombreDeMessagesParPage = 15;
        $nbr_post = $data['topic_post']+1;
        $page = ceil($nbr_post / $nombreDeMessagesParPage);
        echo'<p class="textesimple">Votre message a bien été ajouté!<br /><br />
        Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum<br />
        Cliquez <a href="./affichertopic.php?t='.$topic.'&page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>';
    }//Fin du else
    break;
?>

<?php
case "repondremp": //Si on veut répondre
 
    //On récupère le titre et le message
    $message = $_POST['message'];
    $titre = $_POST['titre'];
    $temps = time();
 
    //On récupère la valeur de l'id du destinataire
    $dest = (int) $_GET['dest'];
 
    //Enfin on peut envoyer le message
 
    $query=$bdd->prepare('INSERT INTO forum_mp (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu) VALUES (:id, :dest, :titre, :txt, :tps, "0")'); 
    $query->bindValue(':id',$id,PDO::PARAM_INT);   
    $query->bindValue(':dest',$dest,PDO::PARAM_INT);   
    $query->bindValue(':titre',$titre,PDO::PARAM_STR);   
    $query->bindValue(':txt',$message,PDO::PARAM_STR);   
    $query->bindValue(':tps',$temps,PDO::PARAM_INT);   
    $query->execute();
    $query->CloseCursor(); 
 
    echo'<p class="textesimple">Votre message a bien été envoyé!<br />
    <br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du   
    forum<br />
    <br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner
    à la messagerie</p>';
 
    break;
?>
<?php
    case "nouveaump": //On envoie un nouveau mp
 
    //On récupère le titre et le message
    $message = $_POST['message'];
    $titre = $_POST['titre'];
    $temps = time();
    $dest = $_POST['to'];
 
    //On récupère la valeur de l'id du destinataire
    //Il faut déja vérifier le nom
 
    $query=$bdd->prepare('SELECT membre_id FROM membres WHERE LOWER(membre_pseudo) = :dest');
    $query->bindValue(':dest',strotolower($dest),PDO::PARAM_STR);
    $query->execute();
    if($data = $query->fetch())
    {
        $query=$bdd->prepare('INSERT INTO forum_mp (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu) VALUES (:id, :dest, :titre, :txt, :tps, :lu)'); 
        $query->bindValue(':id',$id,PDO::PARAM_INT);   
        $query->bindValue(':dest',(int) $data['membre_id'],PDO::PARAM_INT);   
        $query->bindValue(':titre',$titre,PDO::PARAM_STR);   
        $query->bindValue(':txt',$message,PDO::PARAM_STR);   
        $query->bindValue(':tps',$temps,PDO::PARAM_INT);   
        $query->bindValue(':lu','0',PDO::PARAM_STR);   
        $query->execute();
        $query->CloseCursor(); 
 
       echo'<p class="textesimple">Votre message a bien été envoyé!
       <br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du
       forum<br />
       <br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner à
       la messagerie</p>';
    }
    //Sinon l'utilisateur n'existe pas !
    else
    {
        echo'<p class="textesimple">Désolé ce membre n existe pas, veuillez vérifier et
        réessayez à nouveau.</p>';
    }
    break;
?>
<?php
    default;
    echo'<p class="textesimple">Cette action est impossible</p>';
} //Fin du Switch
?>
</div>
</div>
<?php
include ("footer.inc.php");
?>
</div>
</body>
</html>


je ne vois pas pourquoi l'id du membre ne s'insère pas, ce qui fait qu'aucune infos ne s'affiche lors du post d'un message de la part d'un membre inscrit sous un pseudo et un id :/,

Merci de votre attention et de votre aide :).

1 réponse

Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
1
Sujet résolu ^^, Il suffisait de définir l'id, et d'utiliser qu'une seul variable pour cette définition : $id