Mélanger du php dans du html

Résolu
Bonjour,

Voila, je suis en train de créer une console d'admin et je voudrais gérer un menu une fois la connexion effectuée.
Mais j'ai un petit soucis de mélange entre le php et le HTML.
En fait, je voudrais afficher un menu de 3 choix si la personne connectée est un admin sinon un menu de 2 chois si la personne connectée est simple membre mais j'ai un soucis de coordination.

Voici le code :

<a href="index.php">Déconnection</a><br><br>
<?php
session_start();
?>
<?php
//affichage des données:
    echo(
        " Vous etes connecte en tant que : {$_SESSION['Pseudo']} "
  );
?>
<?php
if ($results)
  {
   session_register("authentification");
   $_SESSION['Pseudo'] = $user_infos['Pseudo'];
   if ($user_infos['Statut'] == "Administrateur")
   {
?>  
<br></br>
<center> 
<fieldset><legend><b><FONT size="4pt">Veuillez choisir une option :</FONT></b></legend>
<br></br>
<TABLE BORDER="2" cellpadding="12" cellspacing="10"> 
  <TR> 
 <TH> <form method="post" action="inserer.php">
 <input type="submit" value="Inserer donnees">
 </form>
 </TH> 
  </TR> 
  <TR> 
 <TH> 
 <form method="post" action="affichage.php">
 <input type="submit" value="Afficher donnees">
 </form>
 </TH> 
  </TR> 
    <TR> 
 <TH> 
 <form method="post" action="suppression.php">
 <input type="submit" value="Supprimer donnees">
 </form>
 </TH> 
  </TR> 
</TABLE></fieldset>
</center> 
<?php
   else
    if ($user_infos['Statut'] == "Membre")
    }
?>
<br></br>
<center> 
<fieldset><legend><b><FONT size="4pt">Veuillez choisir une option :</FONT></b></legend>
<br></br>
<TABLE BORDER="2" cellpadding="12" cellspacing="10"> 
  <TR> 
 <TH> <form method="post" action="inserer.php">
 <input type="submit" value="Inserer donnees">
 </form>
 </TH> 
  </TR> 
  <TR> 
 <TH> 
 <form method="post" action="affichage.php">
 <input type="submit" value="Afficher donnees">
 </form>
 </TH> 
  </TR> 
</TABLE></fieldset>
</center> 
<?php
}
}
?>


Mon soucis vient du 'else' de cette partie :

<?php
   else
    if ($user_infos['Statut'] == "Membre")
    }
?>


D'avance merci si vous voyez ce que c'est l'erreur.

8 réponses

Résumé de la discussion

Le problème porte sur la gestion conditionnelle d'un menu selon le statut de l'utilisateur dans une page PHP affichant un admin ou un membre. Des erreurs syntaxiques et une structure avec else if et des accolades manquantes semblent empêcher l'affichage correct des menus selon Admin ou Membre. Plusieurs commentaires proposent de corriger les blocs conditionnels, de refermer les accolades et de repositionner le else if pour éviter les erreurs de parse. En cas d'amélioration, il peut être utile de vérifier le statut dans la base et de tester les chemins d'insertion et d'affichage côte à côte.

Bobot (l’IA à votre service)
  1. NON malheureux ! je t'arrête avant de lire le tout ! jamais un session_start(); avant un affichage quelconque !

    Peut-être de là que vient le problème ?
    1. Je pense que c'est surtout l'absence d'accolade avant son else qui pose problème.
      Tu l'ouvre au précédent if sans jamais la refermer.

      essaye donc de remplacer
      else
          if ($user_infos['Statut'] == "Membre")
          }

      par un truc du genre :
      } else if ($user_infos['Statut'] == "Membre"){
      1. Ca ne change rien si je mets une accolade devant le else !
    2. Merci à tous pour vos réponse !!
      L'erreur affichée est la suivante : Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\Formulaire\menu.php on line 47
      D'avance merci
      1. et bien oui tu mets
        <?php
           else
            if ($user_infos['Statut'] == "Membre")
            }
        ?>


        c'est plutôt clair p: c'est syntaxiquement incorrect :p

        https://www.php.net/manual/fr/control-structures.elseif.php

        Même une feuille de papier est plus légère si on la porte à deux.
        1. Problème réglé ! Il manquait des incollables à la fin :) merci
        2. N'oublie pas le résolu p:
        3. En fait l'histoire de l'erreur de syntaxe est résolu mais pas le reste. C'est à dire le faite que le menu est différent selon le statut de la personne connecté.
          Le menu est actuellement tout le temps le même que ça soit un simple membre ou un admin...
        4. si tu pouvais renvoyer ton code modifier afin d'y voir plus clair :p
        5. Voici :

          <a href="index.php">Déconnection</a><br><br>
          <?php
          session_start();
          ?>
          <?php
          //affichage des données:
              echo(
                  " Vous etes connecte en tant que : {$_SESSION['Pseudo']} "
          		);
          ?>
          <?php
          // Connexion au serveur
           $hostname= "localhost";
           $database = "azerty";
           $username= "root";
           $password= "azerty";
           $db = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 
          
          // Récupération des données depuis la base de données
            mysql_select_db($database, $db);
            $verif_query = sprintf("SELECT * FROM inscription ");
            $verif = mysql_query($verif_query, $db) or die(mysql_error());
            $user_infos = mysql_fetch_assoc($verif);
            $results = mysql_num_rows($verif);
          
          if ($results)
            {
             $_SESSION['Pseudo'] = $user_infos['Pseudo'];
             if ($user_infos['Statut'] == "Administrateur")
             {
          ?>		
          <br></br>
          <center> 
          <fieldset><legend><b><FONT size="4pt">Veuillez choisir une option :</FONT></b></legend>
          <br></br>
          <TABLE BORDER="2" cellpadding="12" cellspacing="10"> 
            <TR> 
          	<TH> <form method="post" action="inserer.php">
          	<input type="submit" value="Inserer donnees">
          	</form>
          	</TH> 
            </TR> 
            <TR> 
          	<TH> 
          	<form method="post" action="affichage.php">
          	<input type="submit" value="Afficher donnees">
          	</form>
          	</TH> 
            </TR> 
              <TR> 
          	<TH> 
          	<form method="post" action="suppression.php">
          	<input type="submit" value="Supprimer donnees">
          	</form>
          	</TH> 
            </TR> 
          </TABLE></fieldset>
          </center> 
          <?php
          if ($results)
            {
             $_SESSION['Pseudo'] = $user_infos['Pseudo'];
             if ($user_infos['Statut'] == "Membre")
             {
          ?>
          <br></br>
          <center> 
          <fieldset><legend><b><FONT size="4pt">Veuillez choisir une option :</FONT></b></legend>
          <br></br>
          <TABLE BORDER="2" cellpadding="12" cellspacing="10"> 
            <TR> 
          	<TH> <form method="post" action="inserer.php">
          	<input type="submit" value="Inserer donnees">
          	</form>
          	</TH> 
            </TR> 
            <TR> 
          	<TH> 
          	<form method="post" action="affichage.php">
          	<input type="submit" value="Afficher donnees">
          	</form>
          	</TH> 
            </TR> 
          </TABLE></fieldset>
          </center> 
          <?php
          }}}}
          ?>


          Le problème est que je ne récupère pas correctement le pseudo de la page de connexion, du coup il affiche toujours le menu complet
      2. Je me suis permis de corrigé un peu ton code afin que tu y voies plus clair déjà
        (session_start(); doit être avant tout affichage !! c'est impératif !
        <?php
         session_start();
         //affichage des données:
         echo "<a href="index.php">Déconnection</a><br><br>";
         echo "Vous etes connecte en tant que : {$_SESSION['Pseudo']}";
         // Connexion au serveur
         $hostname= "localhost";
         $database = "azerty";
         $username= "root";
         $password= "azerty";
         $db = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 
         
         // Récupération des données depuis la base de données
         mysql_select_db($database, $db);
         $verif_query = sprintf("SELECT * FROM inscription ");
         $verif = mysql_query($verif_query, $db) or die(mysql_error());
         $user_infos = mysql_fetch_assoc($verif);
         $results = mysql_num_rows($verif);
         
         if ($results)
         {
          $_SESSION['Pseudo'] = $user_infos['Pseudo'];
          if ($user_infos['Statut'] == "Administrateur")
          {
        ?>  
        <br/>
        <center> 
        <fieldset><legend><b><FONT size="4pt">Veuillez choisir une option :</FONT></b></legend>
        <br></br>
        <TABLE BORDER="2" cellpadding="12" cellspacing="10"> 
          <TR> 
         <TH> <form method="post" action="inserer.php">
         <input type="submit" value="Inserer donnees">
         </form>
         </TH> 
          </TR> 
          <TR> 
         <TH> 
         <form method="post" action="affichage.php">
         <input type="submit" value="Afficher donnees">
         </form>
         </TH> 
          </TR> 
            <TR> 
         <TH> 
         <form method="post" action="suppression.php">
         <input type="submit" value="Supprimer donnees">
         </form>
         </TH> 
          </TR> 
        </TABLE></fieldset>
        </center> 
        <?php
          elseif ($user_infos['Statut'] == "Membre")
          {
        ?>
        <br></br>
        <center> 
        <fieldset><legend><b><FONT size="4pt">Veuillez choisir une option :</FONT></b></legend>
        <br></br>
        <TABLE BORDER="2" cellpadding="12" cellspacing="10"> 
          <TR> 
         <TH> <form method="post" action="inserer.php">
         <input type="submit" value="Inserer donnees">
         </form>
         </TH> 
          </TR> 
          <TR> 
         <TH> 
         <form method="post" action="affichage.php">
         <input type="submit" value="Afficher donnees">
         </form>
         </TH> 
          </TR> 
        </TABLE></fieldset>
        </center> 
        <?php
        }}}
        ?>

        EDIT : J'ai encore corrigé une ligne
        Même une feuille de papier est plus légère si on la porte à deux.
        1. Toujours pareil !
          Toujours le premier menu pris en compte !
      3. Ha oui mais c'est logique ! ^-^

         $verif_query = sprintf("SELECT * FROM inscription ");


        Si tu n'as pas de WHERE dans ta requête tu risques à coup sûr de toujours prendre la première ligne de ta table !!

        Jisig
        Même une feuille de papier est plus légère si on la porte à deux.
        1. Il faut récupérer l'utilisateur en cour mais je n'y arrive pas.
          Voici ma ligne mais j'ai une erreur :

          	$verif_query = sprintf("SELECT * FROM inscription WHERE Pseudo = '$_SESSION['Pseudo']'");


          Tu y vois une erreur?
        2. Heuu ton $_SESSION['Pseudo'] est défini après ta requête ^^' tu devrais avoir un $_POST ou GET venant d'un formulaire d'une autre page ou quelque chose de similaire.
        3. C'est la ou je bloque je ne sait pas comment faire.
          Lorsque je mets le code similaire que je fais pour récupèrer le code d'un formulaire j'ai une erreur qui me dit que le formulaire n'existe pas ce qui est logique....
        4. mmh bon je vais te faire un petit formulaire :

          <form action='nom_de_la_page_ou_tu_l_envoies.php' method='post'>
             <input type='text' name='pseudo'/>
             <input type='submit' value='envoyer'/>
          </form>


          ensuite dans ta page

          $verif_query = sprintf("SELECT * FROM inscription WHERE Pseudo = " . $_POST['Pseudo']);


          Tu peux déjà tester ça !
        5. Oui je sais faire ça mais c'est pas ça que je veux dire.
          Dans ma page de menu, je ne veux pas faire de formulaire !!!! C'est ça qui me pose problème puisque du coup je ne sais pas c'est quoi le code qui permet de récupérer le contenu d'un formulaire qui se trouve sur une autre page....
      4. Donc si j'ai bien compris tu dois juste changer ta requête comme cela
        $verif_query = sprintf("SELECT * FROM inscription WHERE Pseudo = " . $_SESSION['Pseudo']);


        Même une feuille de papier est plus légère si on la porte à deux.
        1. J'ai fais ça :

          session_start();
          	//affichage des données:
          	echo "Vous etes connecte en tant que : {$_SESSION['Pseudo']}";
          	// Connexion au serveur
          	$hostname= "localhost";
          	$database = "azerty";
          	$username= "root";
          	$password= "azerty";
          	$db = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 
          	
          	$pseudo = $_SESSION['Pseudo'];
          	
          	// Récupération des données depuis la base de données
          	mysql_select_db($database, $db);
          	$verif_query = sprintf("SELECT * FROM inscription where Pseudo = '$pseudo'");
          	$verif = mysql_query($verif_query, $db) or die(mysql_error());
          	$user_infos = mysql_fetch_assoc($verif);
          	$results = mysql_num_rows($verif);
          	
          	if ($results)
          	{
          		$_SESSION['Pseudo'] = $user_infos['Pseudo'];
          		if ($user_infos['Statut'] == "Administrateur")
          		{
        2. Pourquoi $pseudo dans des ' ' ?
        3. Je fais tout le temps comme ça et ça fonctionne bien :)
        4. Il t'affiche une erreur quelque part ou .. ?
        5. Lorsqu'il s'agit d'un statut membre, il n'y a aucun menu qui s'affiche....c'est ma condition qui merde.
          J'ai beau tout tester mais rien ne fonctionne grrrrr