[AIDE] Aide PHP

Résolu
Bonjour,
j'ai une erreur et je voudrais de l'aide svp:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/lilkey/public_html/wi/forum/postok.php on line 313

Ligne 313:
SET topic_last_post = $data4['post_id']


La page:
<?php
//Cette fonction doit être appelée avant tout code html
session_start();

//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Poster";
include("includes/debut.php");
?>

<?php
function verif_auth($auth_necessaire)
{
//Dans un premier temps, on vérifie si le membre est connecté
if(isset($_SESSION['id'])) $auth = intval($_SESSION['level']);
else $auth = 1;
if ($auth_necessaire < $auth) return true;
else return false;
}
?>

<body>
<div id="banniere"></div>
<div id="corps_forum">

<?php
//Maintenant, on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
//On récupère la valeur de la variable action
$action = htmlspecialchars($_GET['action']);

// Si le membre n'est pas connecté, il est arivé ici par erreur
if (!isset($_SESSION['pseudo']))
{
echo'<p>Erreur : Vous n êtes plus connecté</p>';
}
else //Sinon on lance la suite
{
?>

<?php
switch($action)
{
//Premier cas : nouveau topic
case "nouveautopic":

if (!verif_auth($data1['auth_annonce']) && isset($_POST['mess']))
{
exit('</div></body></html>');
}
//On passe le message dans une série de fonction
$message = mysql_real_escape_string($_POST['message']);
$mess = mysql_real_escape_string($_POST['mess']);

//Pareil pour le titre
$titre = mysql_real_escape_string($_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>Votre message ou votre titre est vide, cliquez <a href="./poster.php?action=nouveautopic&amp;f='.$forum.'">ici</a> pour recommencer</p>';
}
else //Si jamais le message n'est pas vide
{
?>

<?php
//On entre le topic dans la base de donnée en laissant
//le champ topic_last_post à 0
mysql_query("INSERT INTO forum_topic
(forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre, topic_last_post, topic_post)
VALUES('".$forum."', '".$titre."', '".intval($_SESSION['id'])."', '1', '".$temps."','".$mess."', '0', '0'  )")
or die ("Un problème est survenu lors de l'envoi du message");

$nouveautopic = mysql_insert_id();

//Puis on entre le message
mysql_query("INSERT INTO forum_post
(post_id, post_createur, post_texte, post_time, topic_id, post_forum_id)
VALUES(',' ,'".intval($_SESSION['id'])."', '".$message."', '".$temps."', '".$nouveautopic."', '".$forum."')")
or die ("Un problème est survenu lors de l'envoi du message");

$nouveaupost = mysql_insert_id();

//Ici on update comme prévu la valeur de topic_last_post et de topic_first_post
mysql_query("UPDATE forum_topic
SET topic_last_post = '".$nouveaupost."',
topic_first_post = '".$nouveaupost."'
WHERE topic_id = '".$nouveautopic."'")
or die ("Un problème est survenu lors de l'envoi du message");


//Enfin on met à jour les tables forum_forum et forum_membres
mysql_query("UPDATE forum_forum
SET forum_post = forum_post + 1 ,
forum_topic = forum_topic + 1,
forum_last_post_id = '".$nouveaupost."'
WHERE forum_id = '".$forum."'")
or die ("Un problème est survenu lors de l'envoi du message");

mysql_query("UPDATE forum_membres
SET membre_post = membre_post + 1
WHERE membre_id = '".intval($_SESSION['id'])."'")
or die ("Un problème est survenu lors de l'envoi du message");

//Et un petit message
echo'<p>Votre message a bien été ajouté!<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />Cliquez <a href="./voirtopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>';
}
break; //Houra !
?>

<?
//Deuxième cas : répondre
case "repondre":
//On passe le message dans une série de fonction
$message = mysql_real_escape_string($_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>Votre message est vide, cliquez <a href="./poster.php?action=repondre&amp;t='.$topic.'">ici</a> pour recommencer</p>';
}
else //Sinon, si le message n'est pas vide
{

//On récupère l'id du forum
$requete2 = mysql_query('SELECT forum_id, topic_post
FROM forum_topic
WHERE topic_id = "'.$topic.'"');

$data2= mysql_fetch_assoc($requete2) or die ("Une erreur semble être survenue lors de l'envoi du message");
$forum = $data2['forum_id'];

//Puis on entre le message
mysql_query("INSERT INTO forum_post
(post_id, post_createur, post_texte, post_time, topic_id, post_forum_id)
VALUES(',' ,'".intval($_SESSION['id'])."', '".$message."', '".$temps."', '".$topic."', '".$forum."')")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

$nouveaupost = mysql_insert_id();

//On change un peu la table forum_topic
mysql_query("UPDATE forum_topic
SET topic_post = topic_post + 1,
topic_last_post = '".$nouveaupost."'
WHERE topic_id ='".$topic."'")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

//Puis même combat sur les 2 autres tables
mysql_query("UPDATE forum_forum
SET forum_post = forum_post + 1 ,
forum_last_post_id = '".$nouveaupost."'
WHERE forum_id = '".$forum."'")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

mysql_query("UPDATE forum_membres
SET membre_post = membre_post + 1
WHERE membre_id = '".intval($_SESSION['id'])."'")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

//Et un petit message
$nombreDeMessagesParPage = 15;
$nbr_post = $data2['topic_post']+1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);
echo'<p>Votre message a bien été ajouté!<br /><br />
Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />
Cliquez <a href="./voirtopic.php?t='.$topic.'&amp;page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>';
}
break;
?>

<?php
case "edit": //Si on veut éditer le post
//On récupère la valeur de p
$post = (int) $_GET['p'];
 
//On check le message
$message = mysql_real_escape_string($_POST['message']);

 
//Ensuite on vérifie que le membre a le droit d'être ici (soit le créateur soit un modo/admin)
$requete2 = mysql_query('
SELECT post_createur, post_texte, post_time, topic_id, auth_modo
FROM forum_post
LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id
WHERE post_id='.$post.'');
$data2 = mysql_fetch_assoc($requete2);
$topic = $data2['topic_id'];

//On récupère la place du message dans le topic (pour le lien)
$requete3 = mysql_query('SELECT COUNT(*) AS nbr FROM forum_post 
WHERE topic_id = '.$topic.' AND post_time < '.$data2['post_time']);
$data3 = mysql_fetch_assoc($requete3);

if (!verif_auth($data2['auth_modo'])&& $data2['post_createur'] != $_SESSION['id'])
{
// Si cette condition n'est pas remplie ça va barder :o
echo'<p>Vous n\'avez aucun droit d\'être ici</p></div></body></html>';
exit();
}
else //Sinon ça roule et on continue
{
mysql_query("UPDATE forum_post SET post_texte =  '".$message."' WHERE post_id = '".$post."'");
$nombreDeMessagesParPage = 15;
$nbr_post = $data3['nbr']+1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);
echo'<p>Votre message a bien été édité!<br /><br />
Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />
Cliquez <a href="./voirtopic.php?t='.$topic.'&amp;page='.$page.'#p_'.$post.'">ici</a> pour le voir</p>';
}
break;
?>

<?php
case "delete": //Si on veut supprimer le post
        //On récupère la valeur de p
        $post = (int) $_GET['p'];
        $requete1 = mysql_query('
        SELECT post_createur, post_texte, forum_id, topic_id, auth_modo
        FROM forum_post
        LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id
        WHERE post_id='.$post.'');
        $data1 = mysql_fetch_assoc($requete1);
        $topic = $data1['topic_id'];
        $forum = $data1['forum_id'];
       
        //Ensuite on vérifie que le membre a le droit d'être ici 
        //(soit le créateur soit un modo/admin)
        if (!verif_auth($data1['auth_modo']))
        {
                // Si cette condition n'est pas remplie ça va barder :o
                echo'<p>Vous n\'avez aucun droit d\'être ici</p></div></body></html>';
                exit();
        }
        else //Sinon ça roule et on continue
        {
                //Ici on vérifie plusieurs choses :
                //est-ce un premier post ? Dernier post ou post classique ?
 
                $requete_first_post = mysql_query("SELECT COUNT(*)
                AS first_post
                FROM forum_topic
                WHERE topic_first_post = $post");
 
                $requete_last_post = mysql_query("SELECT COUNT(*)
                AS last_post
                FROM forum_topic
                WHERE topic_last_post = $post");
               
                $first_post = mysql_fetch_assoc($requete_first_post);
                $last_post = mysql_fetch_assoc($requete_last_post);
               
               
                //On distingue maintenant les cas
                if ($first_post['first_post'] != 0) 
                //Si le message est le premier
                {
 
                        //Les autorisations ont changé !
                        if (!verif_auth($data1['auth_modo']))
                        {
                                echo'<p>
                                Vous n\'avez aucun droit d\'être ici</p></div></body></html>';
                                exit();
                        }
                        //Il faut s'assurer que ce n'est pas une erreur
 
                        echo'<p>Vous avez choisi de supprimer un post.
                        Cependant ce post est le premier du topic. 
                        Voulez vous supprimer le topic ? <br />
             <a href="./postok.php?action=delete_topic&amp;t='.$topic.'">oui</a> 
                        - <a href="./voirtopic.php?t='.$topic.'">non</a></p>';
 
                     
                }
 
                elseif ($last_post['last_post'] != 0) 
                //Si le message est le dernier
 
                {
 
                        //On supprime le post
                        mysql_query("DELETE FROM forum_post
                        WHERE post_id = '".$post."'");
                       
                        //On modifie la valeur de topic_last_post pour cela on
                        //récupère l'id du plus récent  message de ce topic
                        $requete4 = mysql_query('SELECT post_id
                        FROM forum_post
                        WHERE topic_id = '.$topic.'
                        ORDER BY post_id DESC
                        LIMIT 0,1');
                        $data4 = mysql_fetch_assoc($requete4);
 
                        //On fait de même pour forum_last_post_id
                        $requete5 = mysql_query('SELECT post_id
                        FROM forum_post
                        WHERE post_forum_id = '.$forum.'
                        ORDER BY post_id DESC
                        LIMIT 0,1');
                        $data5 = mysql_fetch_assoc($requete5);
                       
                        //On met à jour la valeur de topic_last_post
                        mysql_query("UPDATE forum_topic
                        SET topic_last_post = $data4['post_id']
                        WHERE topic_last_post = $post");
 
                        //On enlève 1 au nombre de messages du forum et on met à       
                        //jour forum_last_post
                        mysql_query("UPDATE forum_forum
                        SET forum_post = forum_post - 1,
                        forum_last_post_id = $data5['post_id']
                        WHERE forum_id = $forum");
 
                        //On enlève 1 au nombre de messages du topic
                        mysql_query("UPDATE forum_topic
                        SET  topic_post = topic_post - 1
                        WHERE topic_id = $topic");
                       
                        //On enlève 1 au nombre de messages du membre
                        mysql_query("UPDATE forum_membres
                        SET  membre_post = membre_post - 1
                        WHERE membre_id = $data1['post_createur']");
 
                        //Enfin le message
                        echo'<p>Le message a bien été supprimé !<br />
                        Cliquez <a href="./voirtopic.php?t='.$topic.'">ici</a> 
                        pour retourner au topic<br />
                        Cliquez <a href="./index.php">ici</a> 
                        pour revenir à l index du forum</p>';
 
                }
 
                elseif ($last_post['last_post'] == 0 
                && $first_post['first_post'] == 0) // Si c'est un post classique
 
                {
 
                        //On supprime le post
                        mysql_query("DELETE FROM forum_post
                        WHERE post_id = $post");
                       
                        //On enlève 1 au nombre de messages du forum
                        mysql_query("UPDATE forum_forum
                        SET  forum_post = forum_post - 1
                        WHERE forum_id ='".$forum."'");
                       
                        //On enlève 1 au nombre de messages du topic
                        mysql_query("UPDATE forum_topic
                        SET  topic_post = topic_post - 1
                        WHERE topic_id = $topic");
                       
                        //On enlève 1 au nombre de messages du membre
                        mysql_query("UPDATE forum_membres
                        SET  membre_post = membre_post - 1
                        WHERE membre_id = $data1['post_createur']");
                       
                        //Enfin le message
                        echo'<p>Le message a bien été supprimé !<br />
                        Cliquez <a href="./voirtopic.php?t='.$topic.'">ici</a> pour retourner au topic<br />
                        Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum</p>';
                }
               
        }
break;
?>

<?php
case "delete_topic":
$topic = (int) $_GET['t'];
$requete1 = mysql_query('
SELECT forum_topic.forum_id, auth_modo
FROM forum_topic
LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id
WHERE topic_id='.$topic.'');
$data1 = mysql_fetch_assoc($requete1);
$forum = $data1['forum_id'];
 
        //Ensuite on vérifie que le membre a le droit d'être ici 
        //c'est-à-dire si c'est un modo / admin
 
        if (!verif_auth($data1['auth_modo']))
        {
                // Si cette condition n'est pas remplie ça va barder :o
                echo'<p>Vous n\'avez aucun droit d\'être ici</p></div></body></html>';
                exit();
        }
        else //Sinon ça roule et on continue
        {
        //On compte le nombre de post du topic
        $requete_count_post = mysql_query("SELECT COUNT(*)
        AS nombre_post
        FROM forum_post
        WHERE topic_id = $topic");
       
        $data_nombrepost = mysql_fetch_assoc($requete_count_post);
        $nombrepost = $data_nombrepost['nombre_post'];
 
        //On supprime le topic
        mysql_query("DELETE FROM forum_topic
        WHERE topic_id = $topic");
       
        //On enlève le nombre de post posté par chaque membre dans le topic
        $requete_postparmembre = mysql_query('SELECT post_createur,
        COUNT(*) AS nombre_mess
        FROM forum_post
        WHERE topic_id = '.$topic.'
        GROUP BY post_createur');
 
        while($data_postparmembre = mysql_fetch_assoc($requete_postparmembre))
        {
        mysql_query('UPDATE forum_membres
        SET membre_post = membre_post - '.$data_postparmembre['nombre_mess'].'
        WHERE membre_id = '.$data_postparmembre['post_createur']);
        }
               
        //Et on supprime les posts !
        mysql_query("DELETE FROM forum_post
        WHERE topic_id = $topic");
       
        //Dernière chose, on récupère le dernier post du forum
        $requete_forum = mysql_query('SELECT post_id
        FROM forum_post
        WHERE post_forum_id = '.$forum.'
        ORDER BY post_id DESC
        LIMIT 0,1');
        $data_forum = mysql_fetch_assoc($requete_forum);
 
        //Ensuite on modifie certaines valeurs :
        mysql_query("UPDATE forum_forum
        SET forum_topic = forum_topic - 1,
        forum_post = forum_post - $nombrepost,
        forum_last_post_id = $data_forum['post_id']
        WHERE forum_id = $forum");
 
 
        //Enfin le message
        echo'<p>Le topic a bien été supprimé !<br />
        Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum</p>';
        }
break;
?>

<?
default;
echo'<p>Cette action est impossible</p>';
} //Fin du Switch
} //Fin du else, le membre est connecté
mysql_close();
?>
</div>
</body>
</html>


Cordialement

8 réponses

  1. Essaye avec
                            mysql_query('UPDATE forum_topic'.
                            ' SET topic_last_post = '.$data4['post_id'].
                            ' WHERE topic_last_post = '.$post);
    Au lieu de
                            mysql_query("UPDATE forum_topic
                            SET topic_last_post = $data4['post_id']
                            WHERE topic_last_post = $post");
    
    1. J'ai essayé ça:
                              mysql_query("UPDATE forum_topic
                              SET topic_last_post = $data4('post_id')
                              WHERE topic_last_post = $post");


      au lieu de:
                              mysql_query("UPDATE forum_topic
                              SET topic_last_post = $data4['post_id']
                              WHERE topic_last_post = $post");


      Et ça marche merci^^

      Maintenant un autre PB:
      Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/lilkey/public_html/wi/forum/amis.php on line 173
      ligne 173:
      if (mysql_num_rows($requete) == 0)
      1. oulah ton script me parait bien compliquer pour ce que tu veut en faire...

        je viens de passe 1/a d'heure a demeler les les if les ?> <?PHP et j'ai pas trouvé, à mon avis tu a du oublier une " ou un ' quelquepart
        1. Stockes le nombre dans une variable avant la condition et $requete doit être une ressource après mysql_query, pas la requête SQL (SELECT champ FROM ...)
          1. En faite je m'inspire d'un tuto sur le sit du zéro pour le forum..
            Mais j'ai tout le temps des erreurs que j'arrive à régler pour la pluspart, mais là 0 je ne comprend plus rien^^
            1. Je récapitules :
              1. $requete doit contenir le résultat d'un mysql_query, pas une requête SQL (le texte "SELECT ...").
              2. Essaye en stockant dans $nb (par exemple) le résultat de mysql_num_rows($requete) avant de faire la condition
              3. Si ça ne marche toujours pas, ajoute @ devant mysql_num_rows parce que si je ne me trompe pas, PHP affiche une erreur si il n'y a pas d'entrée.