Problème avec un tuto pour réaliser un forum.

luluwebmaster Messages postés 430 Statut Membre -  
luluwebmaster Messages postés 430 Statut Membre -
Bonjour,
j'ai suivie le tuto ici :
https://openclassrooms.com/fr/courses
Mais je rencontre un problème au niveau de mes pages "inscription" "connection" quand je les tests, il me met ça :
( ! ) Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\test_forum\forum\register.php on line 43

Les codes de chaque pages :
connextion.php :
<?php
session_start();
$titre="Connexion";
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Connexion';
?>
<?php
echo '<h1>Connexion</h1>';
if ($id!=0) erreur(ERR_IS_CO);
?>
<?php
exit('<div id="error"><p>'.$mess.'</p>
   <p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d\'accueil</p></div></div></body></html>');
?>
<?php
if (!isset($_POST['pseudo'])) //On est dans la page de formulaire
{
    echo '<form method="post" action="connexion.php">
    <fieldset>
    <legend>Connexion</legend>
    <p>
    <label for="pseudo">Pseudo :</label><input name="pseudo" type="text" id="pseudo" /><br />
    <label for="password">Mot de Passe :</label><input type="password" name="password" id="password" />
    </p>
    </fieldset>
    <p><input type="submit" value="Connexion" /></p></form>
    <a href="./register.php">Pas encore inscrit ?</a>
      
    </div>
    </body>
    </html>';
}
?>
<?php
//On reprend la suite du code
else
{
    $message='';
    if (empty($_POST['pseudo']) || empty($_POST['password']) ) //Oublie d'un champ
    {
        $message = '<p>une erreur s\'est produite pendant votre identification.
    Vous devez remplir tous les champs</p>
    <p>Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
    }
    else //On check le mot de passe
    {
        $query=$db->prepare('SELECT membre_mdp, membre_id, membre_rang, membre_pseudo
        FROM forum_membres WHERE membre_pseudo = :pseudo');
        $query->bindValue(':pseudo',$_POST['pseudo'], PDO::PARAM_STR);
        $query->execute();
        $data=$query->fetch();
    if ($data['membre_mdp'] == md5($_POST['password'])) // Acces OK !
    {
        $_SESSION['pseudo'] = $data['membre_pseudo'];
        $_SESSION['level'] = $data['membre_rang'];
        $_SESSION['id'] = $data['membre_id'];
        $message = '<p>Bienvenue '.$data['membre_pseudo'].', 
            vous êtes maintenant connecté!</p>
            <p>Cliquez <a href="./index.php">ici</a> 
            pour revenir à la page d accueil</p>';  
    }
    else // Acces pas OK !
    {
        $message = '<p>Une erreur s\'est produite 
        pendant votre identification.<br /> Le mot de passe ou le pseudo 
            entré n\'est pas correcte.</p><p>Cliquez <a href="./connexion.php">ici</a> 
        pour revenir à la page précédente
        <br /><br />Cliquez <a href="./index.php">ici</a> 
        pour revenir à la page d accueil</p>';
    }
    $query->CloseCursor();
    }
    echo $message.'</div></body></html>';
 
}
?>


register.php :
<?php
session_start();
$titre="Enregistrement";
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Enregistrement';
 
if ($id!=0) erreur(ERR_IS_CO);
?>
<?php
if (empty($_POST['pseudo'])) // Si on la variable est vide, on peut considérer qu'on est sur la page de formulaire
{
    echo '<h1>Inscription 1/2</h1>';
    echo '<form method="post" action="register.php" enctype="multipart/form-data">
    <fieldset><legend>Identifiants</legend>
    <label for="pseudo">* Pseudo :</label>  <input name="pseudo" type="text" id="pseudo" /> (le pseudo doit contenir entre 3 et 15 caractères)<br />
    <label for="password">* Mot de Passe :</label><input type="password" name="password" id="password" /><br />
    <label for="confirm">* Confirmer le mot de passe :</label><input type="password" name="confirm" id="confirm" />
    </fieldset>
    <fieldset><legend>Contacts</legend>
    <label for="email">* Votre adresse Mail :</label><input type="text" name="email" id="email" /><br />
    <label for="msn">Votre adresse MSN :</label><input type="text" name="msn" id="msn" /><br />
    <label for="website">Votre site web :</label><input type="text" name="website" id="website" />
    </fieldset>
    <fieldset><legend>Informations supplémentaires</legend>
    <label for="localisation">Localisation :</label><input type="text" name="localisation" id="localisation" />
    </fieldset>
    <fieldset><legend>Profil sur le forum</legend>
    <label for="avatar">Choisissez votre avatar :</label><input type="file" name="avatar" id="avatar" />(Taille max : 10Ko<br />
    <label for="signature">Signature :</label><textarea cols="40" rows="4" name="signature" id="signature">La signature est limitée à 200 caractères</textarea>
    </fieldset>
    <p>Les champs précédés d un * sont obligatoires</p>
    <p><input type="submit" value="S\'inscrire" /></p></form>
    </div>
    </body>
    </html>';
     
     
} //Fin de la partie formulaire
?>
<?php
else //On est dans le cas traitement
{
    $pseudo_erreur1 = NULL;
    $pseudo_erreur2 = NULL;
    $mdp_erreur = NULL;
    $email_erreur1 = NULL;
    $email_erreur2 = NULL;
    $msn_erreur = NULL;
    $signature_erreur = NULL;
    $avatar_erreur = NULL;
    $avatar_erreur1 = NULL;
    $avatar_erreur2 = NULL;
    $avatar_erreur3 = NULL;
?>
<?php
 
    //On récupère les variables
    $i = 0;
    $temps = time(); 
    $pseudo=$_POST['pseudo'];
    $signature = $_POST['signature'];
    $email = $_POST['email'];
    $msn = $_POST['msn'];
    $website = $_POST['website'];
    $localisation = $_POST['localisation'];
    $pass = md5($_POST['password']);
    $confirm = md5($_POST['confirm']);
     
    //Vérification du pseudo
    $query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_pseudo =:pseudo');
    $query->bindValue(':pseudo',$pseudo, PDO::PARAM_STR);
    $query->execute();
    $pseudo_free=($query->fetchColumn()==0)?1:0;
    $query->CloseCursor();
    if(!$pseudo_free)
    {
        $pseudo_erreur1 = "Votre pseudo est déjà utilisé par un membre";
        $i++;
    }
 
    if (strlen($pseudo) < 3 || strlen($pseudo) > 15)
    {
        $pseudo_erreur2 = "Votre pseudo est soit trop grand, soit trop petit";
        $i++;
    }
 
    //Vérification du mdp
    if ($pass != $confirm || empty($confirm) || empty($pass))
    {
        $mdp_erreur = "Votre mot de passe et votre confirmation diffèrent, ou sont vides";
        $i++;
    }
?>


functions.php :
<?php
function erreur($err='')
{
   $mess=($err!='')? $err:'Une erreur inconnue s\'est produite';
   exit('<p>'.$mess.'</p>
   <p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d\'accueil</p></div></body></html>');
}
?>


constants.php :
<?php
define('VISITEUR',1);
define('INSCRIT',2);
define('MODO',3);
define('ADMIN',4);
?>
<?php
define('ERR_IS_CO','Vous ne pouvez pas accéder à cette page si vous n\'êtes pas connecté');
?>


Merci d'avance a celui qui saura me repondre.

--
Merci a tout ceux qui répondrons a mes problème ^^

8 réponses

Résumé de la discussion

Des erreurs de syntaxe PHP provoquent des parse errors, notamment 'unexpected T_ELSE', sur les pages d'inscription et de profil, liées à des balises PHP mal gérées et à des blocs if/else fermés. Plusieurs répondants conseillent de repérer des fermetures PHP superflues et de vérifier des lignes critiques (par exemple la ligne 94) où une condition peut être mal reliée à un else. Des éléments de discussion pointent aussi des anomalies de syntaxe comme un 'default;' écrit dans un switch au lieu de 'default:', et des balises qui cassent la structure. Des pratiques proposées incluent la suppression des balises PHP superflues, la correction des structures switch/if/else et la réorganisation du code pour éviter les injections HTML entre les blocs PHP.

Bobot (l'IA à votre service)
  1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
     
    Salut,

    essaye de retirer les :
    ?>
    <?php

    en ligne 41 et 42

    et il te manque un } en fin de fichier
    0
  2. luluwebmaster Messages postés 430 Statut Membre 5
     
    En retirant les ?> et <?php, ça ne fonctionne pas.
    et pour le } c'est sur quelle fichier ?
    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      sur register
      0
    2. luluwebmaster Messages postés 430 Statut Membre 5
       
      ça ne fonctionne pas ....
      0
    3. luluwebmaster Messages postés 430 Statut Membre 5
       
      Peut être que j'ai mal suivis le Tuto ?
      0
    4. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      possible, difficile à dire comme ça.

      Tu utilises quel logiciel pour écrire ton code ?

      retire tous tes
      ?>
      <?php


      ça ne sert à rien du tout
      0
    5. luluwebmaster Messages postés 430 Statut Membre 5
       
      Notpad++
      Ok, je vais le retirer .
      0
  3. luluwebmaster Messages postés 430 Statut Membre 5
     
    Bien sur,
    voici le nouveau code du fichier connexion :
    <?php
    session_start();
    $titre="Connexion";
    include("includes/identifiants.php");
    include("includes/debut.php");
    include("includes/menu.php");
    echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Connexion';
    
    echo '<h1>Connexion</h1>';
    if ($id!=0) erreur(ERR_IS_CO);
    
    exit('<div id="error"><p>'.$mess.'</p>
       <p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d\'accueil</p></div></div></body></html>');
    
    if (!isset($_POST['pseudo'])) //On est dans la page de formulaire
    {
        echo '<form method="post" action="connexion.php">
        <fieldset>
        <legend>Connexion</legend>
        <p>
        <label for="pseudo">Pseudo :</label><input name="pseudo" type="text" id="pseudo" /><br />
        <label for="password">Mot de Passe :</label><input type="password" name="password" id="password" />
        </p>
        </fieldset>
        <p><input type="submit" value="Connexion" /></p></form>
        <a href="./register.php">Pas encore inscrit ?</a>
          
        </div>
        </body>
        </html>';
    }
    
    //On reprend la suite du code
    else
    {
        $message='';
        if (empty($_POST['pseudo']) || empty($_POST['password']) ) //Oublie d'un champ
        {
            $message = '<p>une erreur s\'est produite pendant votre identification.
        Vous devez remplir tous les champs</p>
        <p>Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
        }
        else //On check le mot de passe
        {
            $query=$db->prepare('SELECT membre_mdp, membre_id, membre_rang, membre_pseudo
            FROM forum_membres WHERE membre_pseudo = :pseudo');
            $query->bindValue(':pseudo',$_POST['pseudo'], PDO::PARAM_STR);
            $query->execute();
            $data=$query->fetch();
        if ($data['membre_mdp'] == md5($_POST['password'])) // Acces OK !
        {
            $_SESSION['pseudo'] = $data['membre_pseudo'];
            $_SESSION['level'] = $data['membre_rang'];
            $_SESSION['id'] = $data['membre_id'];
            $message = '<p>Bienvenue '.$data['membre_pseudo'].', 
                vous êtes maintenant connecté!</p>
                <p>Cliquez <a href="./index.php">ici</a> 
                pour revenir à la page d accueil</p>';  
        }
        else // Acces pas OK !
        {
            $message = '<p>Une erreur s\'est produite 
            pendant votre identification.<br /> Le mot de passe ou le pseudo 
                entré n\'est pas correcte.</p><p>Cliquez <a href="./connexion.php">ici</a> 
            pour revenir à la page précédente
            <br /><br />Cliquez <a href="./index.php">ici</a> 
            pour revenir à la page d accueil</p>';
        }
        $query->CloseCursor();
        }
        echo $message.'</div></body></html>';
     
    }
    ?>

    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      Heu oui, c'est normal.

      a la ligne 12 tu as : exit('<div id="error"><p>'.$mess.'</p>

      ça va forcément stoper ton code php, vérifie ton tuto à ce niveau tu as du rater quelque chose.
      0
    2. luluwebmaster Messages postés 430 Statut Membre 5
       
      C'est bon, ça marche,
      il fallait enlever se code :
      exit('<div id="error"><p>'.$mess.'</p>
         <p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d\'accueil</p></div></div></body></html>');


      Par contre, j'ai un autre problème :
      lorsque j'essais de m'enregistrer, quand je clique sur le bouton enregistrer, ça me met ça :
      Vous êtes ici : Index du forum --> Enregistrement

      et ça ne m'enregistre pas.
      0
    3. luluwebmaster Messages postés 430 Statut Membre 5
       
      Bon problème resolu pour le message, mais j'ai un nouveau problème :
      Quand je veux m'inscrire, il m'affiche des erreur en bas, alors que je n'ai même pas cliquer sur le bouton enregistrer ...
      Voici le code register :
      <?php
      error_reporting(E_ERROR | E_WARNING | E_PARSE);
      session_start();
      $titre="Enregistrement";
      include("includes/identifiants.php");
      include("includes/debut.php");
      include("includes/menu.php");
      echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Enregistrement';
       
      
      
      if (empty($_POST['pseudo'])) // Si on la variable est vide, on peut considérer qu'on est sur la page de formulaire
      {
          echo '<h1>Inscription 1/2</h1>';
          echo '<form method="post" action="register.php" enctype="multipart/form-data">
          <fieldset><legend>Identifiants</legend>
          <label for="pseudo">* Pseudo :</label>  <input name="pseudo" type="text" id="pseudo" /> (le pseudo doit contenir entre 3 et 15 caractères)<br />
          <label for="password">* Mot de Passe :</label><input type="password" name="password" id="password" /><br />
          <label for="confirm">* Confirmer le mot de passe :</label><input type="password" name="confirm" id="confirm" />
          </fieldset>
          <fieldset><legend>Contacts</legend>
          <label for="email">* Votre adresse Mail :</label><input type="text" name="email" id="email" /><br />
          <label for="msn">Votre adresse MSN :</label><input type="text" name="msn" id="msn" /><br />
          <label for="website">Votre site web :</label><input type="text" name="website" id="website" />
          </fieldset>
          <fieldset><legend>Informations supplémentaires</legend>
          <label for="localisation">Localisation :</label><input type="text" name="localisation" id="localisation" />
          </fieldset>
          <fieldset><legend>Profil sur le forum</legend>
          <label for="avatar">Choisissez votre avatar :</label><input type="file" name="avatar" id="avatar" />(Taille max : 10Ko<br />
          <label for="signature">Signature :</label><textarea cols="40" rows="4" name="signature" id="signature">La signature est limitée à 200 caractères</textarea>
          </fieldset>
      	<label>Se souvenir de moi ?</label><input type="checkbox" name="souvenir" /><br />
          <p>Les champs précédés d un * sont obligatoires</p>
          <p><input type="submit" value="S\'inscrire" /></p></form>
          </div>
          </body>
          </html>';
           
           
      } //Fin de la partie formulaire
      
      else //On est dans le cas traitement
      {
          $pseudo_erreur1 = NULL;
          $pseudo_erreur2 = NULL;
          $mdp_erreur = NULL;
          $email_erreur1 = NULL;
          $email_erreur2 = NULL;
          $msn_erreur = NULL;
          $signature_erreur = NULL;
          $avatar_erreur = NULL;
          $avatar_erreur1 = NULL;
          $avatar_erreur2 = NULL;
          $avatar_erreur3 = NULL;
      }
      {
       
          //On récupère les variables
          $i = 0;
          $temps = time(); 
          $pseudo=$_POST['pseudo'];
          $signature = $_POST['signature'];
          $email = $_POST['email'];
          $msn = $_POST['msn'];
          $website = $_POST['website'];
          $localisation = $_POST['localisation'];
          $pass = md5($_POST['password']);
          $confirm = md5($_POST['confirm']);
           
          //Vérification du pseudo
          $query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_pseudo =:pseudo');
          $query->bindValue(':pseudo',$pseudo, PDO::PARAM_STR);
          $query->execute();
          $pseudo_free=($query->fetchColumn()==0)?1:0;
          $query->CloseCursor();
          if(!$pseudo_free)
          {
              $pseudo_erreur1 = "Votre pseudo est déjà utilisé par un membre";
              $i++;
          }
       
          if (strlen($pseudo) < 3 || strlen($pseudo) > 15)
          {
              $pseudo_erreur2 = "Votre pseudo est soit trop grand, soit trop petit";
              $i++;
          }
       
          //Vérification du mdp
          if ($pass != $confirm || empty($confirm) || empty($pass))
          {
              $mdp_erreur = "Votre mot de passe et votre confirmation diffèrent, ou sont vides";
              $i++;
          }
      
      $query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_pseudo =:pseudo');
      $query->bindValue(':pseudo',$pseudo, PDO::PARAM_STR);
      $query->execute();
      $pseudo_free=($query->fetchColumn()==0)?1:0;
      
          //Vérification de l'adresse email
       
          //Il faut que l'adresse email n'ait jamais été utilisée
          $query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_email =:mail');
          $query->bindValue(':mail',$email, PDO::PARAM_STR);
          $query->execute();
          $mail_free=($query->fetchColumn()==0)?1:0;
          $query->CloseCursor();
           
          if(!$mail_free)
          {
              $email_erreur1 = "Votre adresse email est déjà utilisée par un membre";
              $i++;
          }
          //On vérifie la forme maintenant
          if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
          {
              $email_erreur2 = "Votre adresse E-Mail n'a pas un format valide";
              $i++;
          }
          //Vérification de l'adresse MSN
          if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
          {
              $msn_erreur = "Votre adresse MSN n'a pas un format valide";
              $i++;
          }
          //Vérification de la signature
          if (strlen($signature) > 200)
          {
              $signature_erreur = "Votre signature est trop longue";
              $i++;
          }
      
          //Vérification de l'avatar :
          if (!empty($_FILES['avatar']['size']))
          {
              //On définit les variables :
              $maxsize = 10024; //Poid de l'image
              $maxwidth = 100; //Largeur de l'image
              $maxheight = 100; //Longueur de l'image
              $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' ); //Liste des extensions valides
               
              if ($_FILES['avatar']['error'] > 0)
              {
                      $avatar_erreur = "Erreur lors du transfert de l'avatar : ";
              }
              if ($_FILES['avatar']['size'] > $maxsize)
              {
                      $i++;
                      $avatar_erreur1 = "Le fichier est trop gros : (<strong>".$_FILES['avatar']['size']." Octets</strong>    contre <strong>".$maxsize." Octets</strong>)";
              }
       
              $image_sizes = getimagesize($_FILES['avatar']['tmp_name']);
              if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
              {
                      $i++;
                      $avatar_erreur2 = "Image trop large ou trop longue : 
                      (<strong>".$image_sizes[0]."x".$image_sizes[1]."</strong> contre <strong>".$maxwidth."x".$maxheight."</strong>)";
              }
               
              $extension_upload = strtolower(substr(  strrchr($_FILES['avatar']['name'], '.')  ,1));
              if (!in_array($extension_upload,$extensions_valides) )
              {
                      $i++;
                      $avatar_erreur3 = "Extension de l'avatar incorrecte";
              }
          }
      
         if ($i==0)
         {
          echo'<h1>Inscription terminée</h1>';
              echo'<p>Bienvenue '.stripslashes(htmlspecialchars($_POST['pseudo'])).' vous êtes maintenant inscrit sur le forum</p>
          <p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d accueil</p>';
           
              //La ligne suivante sera commentée plus bas
          $nomavatar=(!empty($_FILES['avatar']['size']))?move_avatar($_FILES['avatar']):''; 
          
              $query=$db->prepare('INSERT INTO forum_membres (membre_pseudo, membre_mdp, membre_email,             
              membre_msn, membre_siteweb, membre_avatar,
              membre_signature, membre_localisation, membre_inscrit,   
              membre_derniere_visite)
              VALUES (:pseudo, :pass, :email, :msn, :website, :nomavatar, :signature, :localisation, :temps, :temps)');
          $query->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
          $query->bindValue(':pass', $pass, PDO::PARAM_INT);
          $query->bindValue(':email', $email, PDO::PARAM_STR);
          $query->bindValue(':msn', $msn, PDO::PARAM_STR);
          $query->bindValue(':website', $website, PDO::PARAM_STR);
          $query->bindValue(':nomavatar', $nomavatar, PDO::PARAM_STR);
          $query->bindValue(':signature', $signature, PDO::PARAM_STR);
          $query->bindValue(':localisation', $localisation, PDO::PARAM_STR);
          $query->bindValue(':temps', $temps, PDO::PARAM_INT);
              $query->execute();
       
          //Et on définit les variables de sessions
              $_SESSION['pseudo'] = $pseudo;
              $_SESSION['id'] = $db->lastInsertId(); ;
              $_SESSION['level'] = 2;
              $query->CloseCursor();
          }
          else
          {
              echo'<h1>Inscription interrompue</h1>';
              echo'<p>Une ou plusieurs erreurs se sont produites pendant l incription</p>';
              echo'<p>'.$i.' erreur(s)</p>';
              echo'<p>'.$pseudo_erreur1.'</p>';
              echo'<p>'.$pseudo_erreur2.'</p>';
              echo'<p>'.$mdp_erreur.'</p>';
              echo'<p>'.$email_erreur1.'</p>';
              echo'<p>'.$email_erreur2.'</p>';
              echo'<p>'.$msn_erreur.'</p>';
              echo'<p>'.$signature_erreur.'</p>';
              echo'<p>'.$avatar_erreur.'</p>';
              echo'<p>'.$avatar_erreur1.'</p>';
              echo'<p>'.$avatar_erreur2.'</p>';
              echo'<p>'.$avatar_erreur3.'</p>';
              
              echo'<p>Cliquez <a href="./register.php">ici</a> pour recommencer</p>';
          }
      }
      ?>
      </div>
      </body>
      </html>
      0
    4. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      Et les erreurs mystères, quelles sont-elles ?

      déjà ligne 56 57 tu as un truc bizarre. tu as une accolade fermante et juste après une ouvrante, il manque un truc là.
      0
    5. luluwebmaster Messages postés 430 Statut Membre 5
       
      Erreurs mystères ?

      J'ai enlever { , et celle qui la fermer, mais j'ai le même problème.
      0
  4. luluwebmaster Messages postés 430 Statut Membre 5
     
    Bon,
    la je suis a cette partie du tuto :
    https://openclassrooms.com/fr/courses
    Je rencontre un nouveau problème,
    quand je met le code de traitement pour modifier le profil j'ai se message d'erreur :
    ( ! ) Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\test_forum\forum\voirprofil.php on line 138

    Voici le code avec le traitement :
    <?php
    session_start();
    $titre="Profil";
    include("includes/identifiants.php");
    include("includes/debut.php");
    include("includes/menu.php");
    //On récupère la valeur de nos variables passées par URL
    $action = isset($_GET['action'])?htmlspecialchars($_GET['action']):'consulter';
    $membre = isset($_GET['m'])?(int) $_GET['m']:'';
    
    //On regarde la valeur de la variable $action
    switch($action)
    {
        //Si c'est "consulter"
        case "consulter":
           //On récupère les infos du membre
           $query=$db->prepare('SELECT membre_pseudo, membre_avatar,
           membre_email, membre_msn, membre_signature, membre_siteweb, membre_post,
           membre_inscrit, membre_localisation
           FROM forum_membres WHERE membre_id=:membre');
           $query->bindValue(':membre',$membre, PDO::PARAM_INT);
           $query->execute();
           $data=$query->fetch();
     
           //On affiche les infos sur le membre
           echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> 
           profil de '.stripslashes(htmlspecialchars($data['membre_pseudo']));
           echo'<h1>Profil de '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</h1>';
            
           echo'<img src="./images/avatars/'.$data['membre_avatar'].'"
           alt="Ce membre n a pas d avatar" />';
            
           echo'<p><strong>Adresse E-Mail : </strong>
           <a href="mailto:'.stripslashes($data['membre_email']).'">
           '.stripslashes(htmlspecialchars($data['membre_email'])).'</a><br />';
            
           echo'<strong>MSN Messenger : </strong>'.stripslashes(htmlspecialchars($data['membre_msn'])).'<br />';
            
           echo'<strong>Site Web : </strong>
           <a href="'.stripslashes($data['membre_siteweb']).'">'.stripslashes(htmlspecialchars($data['membre_siteweb'])).'</a>
           <br /><br />';
      
           echo'Ce membre est inscrit depuis le
           <strong>'.date('d/m/Y',$data['membre_inscrit']).'</strong>
           et a posté <strong>'.$data['membre_post'].'</strong> messages
           <br /><br />';
           echo'<strong>Localisation : </strong>'.stripslashes(htmlspecialchars($data['membre_localisation'])).'
           </p>';
           $query->CloseCursor();
           break;
    
    	   
    	   
    	   
        //Si on choisit de modifier son profil
        case "modifier":
        if (empty($_POST['sent'])) // Si on la variable est vide, on peut considérer qu'on est sur la page de formulaire
        {
            //On commence par s'assurer que le membre est connecté
            if ($id==0) erreur(ERR_IS_NOT_CO);
     
            //On prend les infos du membre
            $query=$db->prepare('SELECT membre_pseudo, membre_email,
            membre_siteweb, membre_signature, membre_msn, membre_localisation,
            membre_avatar
            FROM forum_membres WHERE membre_id=:id');
            $query->bindValue(':id',$id,PDO::PARAM_INT);
            $query->execute();
            $data=$query->fetch();
            echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Modification du profil';
            echo '<h1>Modifier son profil</h1>';
             
            echo '<form method="post" action="voirprofil.php?action=modifier" enctype="multipart/form-data">
            
      
            <fieldset><legend>Identifiants</legend>
            Pseudo : <strong>'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</strong><br />       
            <label for="password">Nouveau mot de Passe :</label>
            <input type="password" name="password" id="password" /><br />
            <label for="confirm">Confirmer le mot de passe :</label>
            <input type="password" name="confirm" id="confirm"  />
            </fieldset>
      
            <fieldset><legend>Contacts</legend>
            <label for="email">Votre adresse E_Mail :</label>
            <input type="text" name="email" id="email"
            value="'.stripslashes($data['membre_email']).'" /><br />
      
            <label for="msn">Votre adresse MSN :</label>
            <input type="text" name="msn" id="msn"
            value="'.stripslashes($data['membre_msn']).'" /><br />
      
            <label for="website">Votre site web :</label>
            <input type="text" name="website" id="website"
            value="'.stripslashes($data['membre_siteweb']).'" /><br />
            </fieldset>
      
            <fieldset><legend>Informations supplémentaires</legend>
            <label for="localisation">Localisation :</label>
            <input type="text" name="localisation" id="localisation"
            value="'.stripslashes($data['membre_localisation']).'" /><br />
            </fieldset>
                    
            <fieldset><legend>Profil sur le forum</legend>
            <label for="avatar">Changer votre avatar :</label>
            <input type="file" name="avatar" id="avatar" />
            (Taille max : 10 ko)<br /><br />
            <label><input type="checkbox" name="delete" value="Delete" />
            Supprimer l avatar</label>
            Avatar actuel :
            <img src="./images/avatars/'.$data['membre_avatar'].'"
            alt="pas d avatar" />
          
            <br /><br />
            <label for="signature">Signature :</label>
            <textarea cols="40" rows="4" name="signature" id="signature">
            '.stripslashes($data['membre_signature']).'</textarea>
          
          
            </fieldset>
            <p>
            <input type="submit" value="Modifier son profil" />
            <input type="hidden" id="sent" name="sent" value="1" />
            </p></form>';
            $query->CloseCursor();   
        }   
        else //Sinon on est dans la page de traitement
        {
            //Traitement (voir plus bas)
        }
        break;
    default; //Si jamais c'est aucun de ceux-là c'est qu'il y a eu un problème :o
    echo'<p>Cette action est impossible</p>';
      
    } //Fin du switch
    ?>
    <?php
        else //Cas du traitement
        {
         //On déclare les variables 
     
        $mdp_erreur = NULL;
        $email_erreur1 = NULL;
        $email_erreur2 = NULL;
        $msn_erreur = NULL;
        $signature_erreur = NULL;
        $avatar_erreur = NULL;
        $avatar_erreur1 = NULL;
        $avatar_erreur2 = NULL;
        $avatar_erreur3 = NULL;
     
        //Encore et toujours notre belle variable $i :p
        $i = 0;
        $temps = time(); 
        $signature = $_POST['signature'];
        $email = $_POST['email'];
        $msn = $_POST['msn'];
        $website = $_POST['website'];
        $localisation = $_POST['localisation'];
        $pass = md5($_POST['password']);
        $confirm = md5($_POST['confirm']);
     
     
        //Vérification du mdp
        if ($pass != $confirm || empty($confirm) || empty($pass))
        {
             $mdp_erreur = "Votre mot de passe et votre confirmation diffèrent ou sont vides";
             $i++;
        }
     
        //Vérification de l'adresse email
        //Il faut que l'adresse email n'ait jamais été utilisée (sauf si elle n'a pas été modifiée)
     
        //On commence donc par récupérer le mail
        $query=$db->prepare('SELECT membre_email FROM forum_membres WHERE membre_id =:id'); 
        $query->bindValue(':id',$id,PDO::PARAM_INT);
        $query->execute();
        $data=$query->fetch();
        if (strtolower($data['membre_email']) != strtolower($email))
        {
            //Il faut que l'adresse email n'ait jamais été utilisée
            $query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_email =:mail');
            $query->bindValue(':mail',$email,PDO::PARAM_STR);
            $query->execute();
            $mail_free=($query->fetchColumn()==0)?1:0;
            $query->CloseCursor();
            if(!$mail_free)
            {
                $email_erreur1 = "Votre adresse email est déjà utilisé par un membre";
                $i++;
            }
     
            //On vérifie la forme maintenant
            if (!preg_match("#^[a-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
            {
                $email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide";
                $i++;
            }
        }
        //Vérification de l'adresse MSN
        if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
        {
            $msn_erreur = "Votre nouvelle adresse MSN n'a pas un format valide";
            $i++;
        }
     
        //Vérification de la signature
        if (strlen($signature) > 200)
        {
            $signature_erreur = "Votre nouvelle signature est trop longue";
            $i++;
        }
      
      
        //Vérification de l'avatar
      
        if (!empty($_FILES['avatar']['size']))
        {
            //On définit les variables :
            $maxsize = 30072; //Poid de l'image
            $maxwidth = 100; //Largeur de l'image
            $maxheight = 100; //Longueur de l'image
            //Liste des extensions valides
            $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' );
      
            if ($_FILES['avatar']['error'] > 0)
            {
            $avatar_erreur = "Erreur lors du tranfsert de l'avatar : ";
            }
            if ($_FILES['avatar']['size'] > $maxsize)
            {
            $i++;
            $avatar_erreur1 = "Le fichier est trop gros :
            (<strong>".$_FILES['avatar']['size']." Octets</strong>
            contre <strong>".$maxsize." Octets</strong>)";
            }
      
            $image_sizes = getimagesize($_FILES['avatar']['tmp_name']);
            if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
            {
            $i++;
            $avatar_erreur2 = "Image trop large ou trop longue :
            (<strong>".$image_sizes[0]."x".$image_sizes[1]."</strong> contre
            <strong>".$maxwidth."x".$maxheight."</strong>)";
            }
      
            $extension_upload = strtolower(substr(  strrchr($_FILES['avatar']['name'], '.')  ,1));
            if (!in_array($extension_upload,$extensions_valides) )
            {
                    $i++;
                    $avatar_erreur3 = "Extension de l'avatar incorrecte";
            }
        }
    ?>
    </div>
    </body>
    </html>
    <?php
        echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Modification du profil';
        echo '<h1>Modification d\'un profil</h1>';
     
      
        if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
        {
            if (!empty($_FILES['avatar']['size']))
            {
                    $nomavatar=move_avatar($_FILES['avatar']);
                    $query=$db->prepare('UPDATE forum_membres
                    SET membre_avatar = :avatar 
                    WHERE membre_id = :id');
                    $query->bindValue(':avatar',$nomavatar,PDO::PARAM_STR);
                    $query->bindValue(':id',$id,PDO::PARAM_INT);
                    $query->execute();
                    $query->CloseCursor();
            }
      
            //Une nouveauté ici : on peut choisis de supprimer l'avatar
            if (isset($_POST['delete']))
            {
                    $query=$db->prepare('UPDATE forum_membres
            SET membre_avatar=0 WHERE membre_id = :id');
                    $query->bindValue(':id',$id,PDO::PARAM_INT);
                    $query->execute();
                    $query->CloseCursor();
            }
      
            echo'<h1>Modification terminée</h1>';
            echo'<p>Votre profil a été modifié avec succès !</p>';
            echo'<p>Cliquez <a href="./index.php">ici</a> 
            pour revenir à la page d accueil</p>';
      
            //On modifie la table
      
            $query=$db->prepare('UPDATE forum_membres
            SET  membre_mdp = :mdp, membre_email=:mail, membre_msn=:msn, membre_siteweb=:website,
            membre_signature=:sign, membre_localisation=:loc
            WHERE membre_id=:id');
            $query->bindValue(':mdp',$pass,PDO::PARAM_INT);
            $query->bindValue(':mail',$email,PDO::PARAM_STR);
            $query->bindValue(':msn',$msn,PDO::PARAM_STR);
            $query->bindValue(':website',$website,PDO::PARAM_STR);
            $query->bindValue(':sign',$signature,PDO::PARAM_STR);
            $query->bindValue(':loc',$localisation,PDO::PARAM_STR);
            $query->bindValue(':id',$id,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();
        }
        else
        {
            echo'<h1>Modification interrompue</h1>';
            echo'<p>Une ou plusieurs erreurs se sont produites pendant la modification du profil</p>';
            echo'<p>'.$i.' erreur(s)</p>';
            echo'<p>'.$mdp_erreur.'</p>';
            echo'<p>'.$email_erreur1.'</p>';
            echo'<p>'.$email_erreur2.'</p>';
            echo'<p>'.$msn_erreur.'</p>';
            echo'<p>'.$signature_erreur.'</p>';
            echo'<p>'.$avatar_erreur.'</p>';
            echo'<p>'.$avatar_erreur1.'</p>';
            echo'<p>'.$avatar_erreur2.'</p>';
            echo'<p>'.$avatar_erreur3.'</p>';
            echo'<p> Cliquez <a href="./voirprofil.php?action=modifier">ici</a> pour recommencer</p>';
        }
    } //Fin du else
        break;
      
    default; //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
    echo'<p>Cette action est impossible</p>';
      
    } //Fin du switch
    ?>
    </div>
    </body>
    </html>
    </html>
    

    En tout cas, merci pour tout l'aide que vous m'avez apporté déjà ^^
    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      tu as un else en ligne 138 mais il n'y a pas de if.
      0
    2. luluwebmaster Messages postés 430 Statut Membre 5
       
      Peut tu me dire quelle partie rajouter ?
      Ou supprimer, je sais pas trop :P
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      Non je ne peux pas.

      A mon avis tu mélanges certaines pages.
      Ton tutoriel, si tu le suis de A à Z, ça va fonctionner, mais si tu sautes des parties ou ajoute du code sans trop faire attention ça ne va pas marcher, c'est certain.
      0
    4. luluwebmaster Messages postés 430 Statut Membre 5
       
      Je le suis pourtant très bien, je fais tout comme il disent ...
      0
    5. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      manifestement, non :)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. luluwebmaster Messages postés 430 Statut Membre 5
     
    Je remarque que j'ai énormément de problème avec ce tuto, maintenant, j'ai une erreur :
    ( ! ) Parse error: syntax error, unexpected '<' in C:\wamp\www\test_forum\forum\voirtopic.php on line 94

    qui correspond a cette page :
    voirtopic.php
    sont code :
    <?php
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    session_start();
    $titre="Voir un sujet";
    include("includes/identifiants.php");
    include("includes/debut.php");
    include("includes/menu.php");
    include("includes/bbcode.php"); //On verra plus tard ce qu'est ce fichier
      
    //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=$db->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);
    
    echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> 
    <a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
     --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>';
    echo '<h1>'.stripslashes(htmlspecialchars($data['topic_titre'])).'</h1><br /><br />';
    
    //Nombre de pages
    $page = (isset($_GET['page']))?intval($_GET['page']):1;
     
    //On affiche les pages 1-2-3 etc...
    echo '<p>Page : ';
    for ($i = 1 ; $i <= $nombreDePages ; $i++)
    {
        if ($i == $page) //On affiche pas la page actuelle en lien
        {
        echo $i;
        }
        else
        {
        echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">
        ' . $i . '</a> ';
        }
    }
    echo'</p>';
      
    $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
     
      
    //On affiche l'image répondre
    echo'<a href="./poster.php?action=repondre&amp;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&amp;f='.$data['forum_id'].'">
    <img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
    $query->CloseCursor(); 
    //Enfin on commence la boucle !
    
    $query=$db->prepare('SELECT post_id , post_createur , post_texte , post_time ,
    membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature
    FROM forum_post
    LEFT JOIN forum_membres ON forum_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>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"><strong>Auteurs</strong></th>             
            <th class="vt_mess"><strong>Messages</strong></th>       
            </tr>
            <?php
            while ($data = $query->fetch())
            {
    		
    <?php
    //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><strong>
             <a href="./voirprofil.php?m='.$data['membre_id'].'&amp;action=consulter">
             '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a></strong></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'].'>Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
             <a href="./poster.php?p='.$data['post_id'].'&amp;action=delete">
             <img src="./images/supprimer.gif" alt="Supprimer"
             title="Supprimer ce message" /></a>   
             <a href="./poster.php?p='.$data['post_id'].'&amp;action=edit">
             <img src="./images/editer.gif" alt="Editer"
             title="Editer ce message" /></a></td></tr>';
             }
             else
             {
             echo'<td>
             Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
             </td></tr>';
             }
            
             //Détails sur le membre qui a posté
             echo'<tr><td>
             <img src="./images/avatars/'.$data['membre_avatar'].'" alt="" />
             <br />Membre inscrit le '.date('d/m/Y',$data['membre_inscrit']).'
             <br />Messages : '.$data['membre_post'].'<br />
             Localisation : '.stripslashes(htmlspecialchars($data['membre_localisation'])).'</td>';
                    
             //Message
             echo'<td>'.code(nl2br(stripslashes(htmlspecialchars($data['post_texte'])))).'
             <br /><hr />'.code(nl2br(stripslashes(htmlspecialchars($data['membre_signature'])))).'</td></tr>';
             } //Fin de la boucle ! \o/
             $query->CloseCursor();
     
             ?>
    </table>
    <?php
            echo '<p>Page : ';
            for ($i = 1 ; $i <= $nombreDePages ; $i++)
            {
                    if ($i == $page) //On affiche pas la page actuelle en lien
                    {
                    echo $i;
                    }
                    else
                    {
                    echo '<a href="voirtopic.php?t='.$topic.'&amp;page='.$i.'">
                    ' . $i . '</a> ';
                    }
            }
            echo'</p>';
            
            //On ajoute 1 au nombre de visites de ce topic
            $query=$db->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>
    </body>
    </html>
    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      regarde à la ligne 94, tu ne vois pas un truc qui cloche ? ^^
      0
    2. luluwebmaster Messages postés 430 Statut Membre 5
       
      Ha oui ^^
      C'est bon pour se problème :D
      0
  7. luluwebmaster Messages postés 430 Statut Membre 5
     
    Encore une erreur, mais cette fois quand on veux voir un sujet :
    ( ! ) Fatal error: Call to undefined function code() in C:\wamp\www\test_forum\forum\voirtopic.php on line 131
    Call Stack
    # Time Memory Function Location
    1 0.0040 409296 {main}( ) ..\voirtopic.php:0

    Code du fichier voirtopic.php :

    <?php
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    session_start();
    $titre="Voir un sujet";
    include("includes/identifiants.php");
    include("includes/debut.php");
    include("includes/menu.php");
    include("includes/bbcode.php"); //On verra plus tard ce qu'est ce fichier
      
    //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=$db->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);
    
    echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> 
    <a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
     --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>';
    echo '<h1>'.stripslashes(htmlspecialchars($data['topic_titre'])).'</h1><br /><br />';
    
    //Nombre de pages
    $page = (isset($_GET['page']))?intval($_GET['page']):1;
     
    //On affiche les pages 1-2-3 etc...
    echo '<p>Page : ';
    for ($i = 1 ; $i <= $nombreDePages ; $i++)
    {
        if ($i == $page) //On affiche pas la page actuelle en lien
        {
        echo $i;
        }
        else
        {
        echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">
        ' . $i . '</a> ';
        }
    }
    echo'</p>';
      
    $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
     
      
    //On affiche l'image répondre
    echo'<a href="./poster.php?action=repondre&amp;t='.$topic.'">
    <img src="./images/40790.gif" alt="Répondre" title="Répondre à ce topic" /></a>';
      
    //On affiche l'image nouveau topic
    echo'<a href="./poster.php?action=nouveautopic&amp;f='.$data['forum_id'].'">
    <img src="./images/40789.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
    $query->CloseCursor(); 
    //Enfin on commence la boucle !
    
    $query=$db->prepare('SELECT post_id , post_createur , post_texte , post_time ,
    membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature
    FROM forum_post
    LEFT JOIN forum_membres ON forum_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>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"><strong>Auteurs</strong></th>             
            <th class="vt_mess"><strong>Messages</strong></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><strong>
             <a href="./voirprofil.php?m='.$data['membre_id'].'&amp;action=consulter">
             '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a></strong></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'].'>Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
             <a href="./poster.php?p='.$data['post_id'].'&amp;action=delete">
             <img src="./images/supprimer.gif" alt="Supprimer"
             title="Supprimer ce message" /></a>   
             <a href="./poster.php?p='.$data['post_id'].'&amp;action=edit">
             <img src="./images/editer.gif" alt="Editer"
             title="Editer ce message" /></a></td></tr>';
             }
             else
             {
             echo'<td>
             Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
             </td></tr>';
             }
            
             //Détails sur le membre qui a posté
             echo'<tr><td>
             <img src="./images/avatars/'.$data['membre_avatar'].'" alt="" />
             <br />Membre inscrit le '.date('d/m/Y',$data['membre_inscrit']).'
             <br />Messages : '.$data['membre_post'].'<br />
             Localisation : '.stripslashes(htmlspecialchars($data['membre_localisation'])).'</td>';
                    
             //Message
             echo'<td>'.code(nl2br(stripslashes(htmlspecialchars($data['post_texte'])))).'
             <br /><hr />'.code(nl2br(stripslashes(htmlspecialchars($data['membre_signature'])))).'</td></tr>';
             } //Fin de la boucle ! \o/
             $query->CloseCursor();
     
             ?>
    </table>
    <?php
            echo '<p>Page : ';
            for ($i = 1 ; $i <= $nombreDePages ; $i++)
            {
                    if ($i == $page) //On affiche pas la page actuelle en lien
                    {
                    echo $i;
                    }
                    else
                    {
                    echo '<a href="voirtopic.php?t='.$topic.'&amp;page='.$i.'">
                    ' . $i . '</a> ';
                    }
            }
            echo'</p>';
            
            //On ajoute 1 au nombre de visites de ce topic
            $query=$db->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>
    </body>
    </html>

    0
    1. Bionik Messages postés 4232 Date d'inscription   Statut Modérateur Dernière intervention   185
       
      Salut,

      Tu fais appel à une fonction qui n'existe pas. C'est la fonction code() pour être plus précis. Si c'est déjà crée dans un autre fichier, tu l'importe avec un 'include' ou 'require'.
      0
    2. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 607
       
      à mon avis c'est la fonction du bbcode
      include("includes/bbcode.php");

      mais bon, on n'a aucun moyen de le savoir...
      0
    3. luluwebmaster Messages postés 430 Statut Membre 5
       
      En effet ^^
      C'est bien cela ^^
      Par contre j'ai ce message :

      ( ! ) Fatal error: Call to undefined function code() in C:\wamp\www\test_forum\forum\voirtopic.php on line 130
      Call Stack
      # Time Memory Function Location
      1 0.0048 408576 {main}( ) ..\voirtopic.php:0

      Et je n'est pas le message que j'ai posté sur la page voirtopic.php
      0
    4. luluwebmaster Messages postés 430 Statut Membre 5
       
      Pour être plus précis, je n'est pas les messages qui on était posté, mais j'ai se message d'erreur :
      ( ! ) Fatal error: Call to undefined function code() in C:\wamp\www\test_forum\forum\voirtopic.php on line 130
      Call Stack
      # Time Memory Function Location
      1 0.0048 408576 {main}( ) ..\voirtopic.php:0
      0
  8. luluwebmaster Messages postés 430 Statut Membre 5
     
    J'ai encore un autre problème avec l'administration cette fois.
    Je me suis mis admin sur le compte que j'ai créer, mais il y as un problème,
    quand j'essais d'accéder au panneau d'admin, je ne peux pas, il met un un message d'erreur comme quoi je ne suis pas admin.
    Voici le code du fichier functions.php :
    <?php
    function erreur($err='')
    {
       $mess=($err!='')? $err:'Une erreur inconnue s\'est produite';
       exit('<p>'.$mess.'</p>
       <p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d\'accueil</p></div></body></html>');
    }
    
    function move_avatar($avatar)
    {
        $extension_upload = strtolower(substr(  strrchr($avatar['name'], '.')  ,1));
        $name = time();
        $nomavatar = str_replace(' ','',$name).".".$extension_upload;
        $name = "./images/avatars/".str_replace(' ','',$name).".".$extension_upload;
        move_uploaded_file($avatar['tmp_name'],$name);
        return $nomavatar;
    }
    
    function verif_auth($auth_necessaire)
    {
    $level=(isset($_SESSION['level']))?$_SESSION['level']:1;
    return ($auth_necessaire <= intval($level));
    }
    ?>


    Et le code du fichier admin.php :
    <?php
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    session_start();
    $titre="Administration";
    $balises = true;
    include("includes/identifiants.php");
    include("includes/debut.php");
    include("includes/menu.php");
     
    // On indique o l'on se trouve
    $cat = (isset($_GET['cat']))?htmlspecialchars($_GET['cat']):'';
     
    echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->  <a href="./admin.php">Administration du forum</a>';
    if (!verif_auth(ADMIN)) erreur(ERR_AUTH_ADMIN);
     
    switch($cat) //1er switch
    {
    case "config":
        //ici configuration
        echo'<h1>Configuration du forum</h1>';
        echo '<form method="post" action="adminok.php?cat=config">';
     
        //Le tableau associatif
        $config_name = array(
        "avatar_maxsize" => "Taille maximale de l avatar",
        "avatar_maxh" => "Hauteur maximale de l avatar",
        "avatar_maxl" => "Largeur maximale de l avatar",
        "sign_maxl" => "Taille maximale de la signature",
        "auth_bbcode_sign" => "Autoriser le bbcode dans la signature",
        "pseudo_maxsize" => "Taille maximale du pseudo",
        "pseudo_minsize" => "Taille minimale du pseudo",
        "topic_par_page" => "Nombre de topics par page",
        "post_par_page" => "Nombre de posts par page",
        "forum_titre" => "Titre du forum"
        );
        $query = $db->query('SELECT config_nom, config_valeur FROM forum_config');
         
        while($data=$query->fetch())
        {
               echo '<p><label for='.$data['config_nom'].'>'.$config_name[$data['config_nom']].' </label> :
               <input type="text" id="'.$data['config_nom'].'" value="'.$data['config_valeur'].'" name="'.$data['config_nom'].'"></p>';
        }
        echo '<p><input type="submit" value="Envoyer" /></p></form>';
        $query->CloseCursor();
    break;
      
    case "forum":
    //Ici forum
    $action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
            switch($action) //2eme switch
            {
       case "creer":
            //Création d'un forum
     
            //1er cas : pas de variable c
            if(empty($_GET['c']))
            {
                    echo'<br /><br /><br />Que voulez-vous faire?<br />
                    <a href="./admin.php?cat=forum&action=creer&c=f">Créer un forum</a><br />
                    <a href="./admin.php?cat=forum&action=creer&c=c">Créer une catégorie</a></br>';
            }
     
            //2ème cas : on cherche à créer un forum (c=f)
            elseif($_GET['c'] == "f")
            {
                    $query=$db->query('SELECT cat_id, cat_nom FROM forum_categorie
                    ORDER BY cat_ordre DESC');
                    echo'<h1>Création d un forum</h1>';
                    echo'<form method="post" action="./adminok.php?cat=forum&action=creer&c=f">';
                    echo'<label>Nom :</label><input type="text" id="nom" name="nom" /><br /><br />
                    <label>Description :</label>
                    <textarea cols=40 rows=4 name="desc" id="desc"></textarea>
                    <br /><br />
                    <label>Catégorie : </label><select name="cat">';
                    while($data = $query->fetch())
                    {
                echo'<option value="'.$data['cat_id'].'">'.$data['cat_nom'].'</option>';
                    }
                    echo'</select><br /><br />
                    <input type="submit" value="Envoyer"></form>';
            $query->CloseCursor();
            }       
            //3ème cas : on cherche à créer une catégorie (c=c)
            elseif($_GET['c'] == "c")
            {
                    echo'<h1>Création d une catégorie</h1>';
                    echo'<form method="post" action="./adminok.php?cat=forum&action=creer&c=c">';
                    echo'<label> Indiquez le nom de la catégorie :</label>
                    <input type="text" id="nom" name="nom" /><br /><br />   
                    <input type="submit" value="Envoyer"></form>';
            }
        break;
             
            case "edit":
            //Edition d'un forum
            break;
             
            case "droits":
            //Gestion des droits
            break;
             
            default; //action n'est pas remplie, on affiche le menu
            echo'<h1>Administration des forums</h1>';
            echo'<p>Bonjour, cher administrateur :p, que veux tu faire ?
            <br />
            <a href="./admin.php?cat=forum&amp;action=creer">Créer un forum</a>
            <br />
            <a href="./admin.php?cat=forum&amp;action=edit">Modifier un forum</a>
            <br />
            <a href="./admin.php?cat=forum&amp;action=droits">
            Modifier les droits d un forum</a><br /></p>';
            break;
            }
    break;
      
    case "membres":
    //Ici membres
    $action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
            switch($action) //2eme switch
            {
            case "edit":
            //Edition d'un membre
            break;
             
            case "droits":
            //Droits d'un membre (rang)
            break;
             
            case "ban":
            //Bannissement
            break;
             
            default; //action n'est pas remplie, on affiche le menu 
            echo'<h1>Administration des membres</h1>';
            echo'<p>Salut mon ptit, alors tu veux faire quoi ?<br />
            <a href="./admin.php?cat=membres&amp;action=edit">
            Editer le profil d un membre</a><br />
            <a href="./admin.php?cat=membres&amp;action=droits">
            Modifier les droits d un membre</a><br />
            <a href="./admin.php?cat=membres&amp;action=ban">
            Bannir / Debannir un membre</a><br /></p>';
            break;
            }
    break;
    default; //cat n'est pas remplie, on affiche le menu général
    echo'<h1>Index de l administration</h1>';
    echo'<p>Bienvenue sur la page d administration.<br />
    <a href="./admin.php?cat=config">Configuration du forum</a><br />
    <a href="./admin.php?cat=forum">Administration des forums</a><br />
    <a href="./admin.php?cat=membres">Administration des membres</a><br /></p>';
    break;
    }
    ?>


    Merci d'avance, car la je suis bien embêté ^^
    0
  9. luluwebmaster Messages postés 430 Statut Membre 5
     
    Je remonte ^^
    0