8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un problème sur lequel je planche depuis pas mal d'heure, je vous explique !
Quand j'ouvre mon site, j'ai que mon menu pour me connecter qui s'affiche. Une fois la saison du login et du mot de passe, je traite les informations pour savoir si j'ouvre une session ou non. Et si je l'ouvre, j'aimerais affiché mon menu administrateur ou utilisateur suivant le "niveau" de la personne qui vient de se connecter.
J'arrive parfaitement a afficher ces menu sur ma page connexion, donc dans le corps mais pas dans mon menu a gauche ...

Voici ma page connexion ==>

<?php
require("connectBDD.php");
//ouverture d'une session
session_start();
$login=$_POST["login"];
$mdp=$_POST["mdp"];
$libErr="";
if (isset($_REQUEST["valider"]) && (empty($login) || empty($mdp)))
{
    $libErr=" Le pseudo ou le mot de passe n'est pas renseigné";
}

if (isset($_REQUEST["valider"]) && empty($login)==false && empty($mdp)==false)
{
    // on vérifie la validité des informations dans la base
    $sql="SELECT numUtil FROM UTILISATEUR WHERE identifiant='".$login."' AND mdp='".$mdp."';";
    $query = mssql_query($sql) or die('Erreur sur la requête' );

    // aucun utilisateur avec le compte et le mot de passe saisis
    if(mssql_num_rows($query)==0)
    {
        $libErr="Le pseudo ou le mot de passe est erroné";
    }
    else
    {
        $ligne = mssql_fetch_array($query);
        $type = $ligne["numUtil"];
        $_SESSION['login'] = $_POST['login'];
        $_SESSION['mdp'] = $_POST['mdp'];
        // On recherche les informations de l'utilisateur
        $sql="SELECT niveau, numAdresseSite FROM UTILISATEUR WHERE identifiant='".$_SESSION['login']."' AND mdp='".$_SESSION['mdp']."'";
        $query = mssql_query($sql);
        if(mssql_num_rows($query) != 0)
        {
          $row = mssql_fetch_array($query);
          $_SESSION['niveau'] = $row['niveau'];
          $_SESSION['numAdSite'] = $row['numAdresseSite'];
        }
          $connexion="oui";
          // vers la page d'entrée du site
          if(session_start())
          {
            echo("Connexion réussie");
            //header ("Location:accueil.php");
          }
          else
          {
            echo("Connexion échoué");
            //header ("Location:connexion.php");
          }
    }
}
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
</head>
<body>
<link rel="stylesheet" type="text/css" href="design.css"/>

  <form name="connexion" action="" method="post">
          <table width="500" border="0" cellspacing="5" align="center">
              <tr>
                  <td>Identifiant</td>
                  <td><input type="text" name="login" size=20></td>
              </tr>
              <tr>
                  <td>Mot de passe</td>
                  <td><input type="password" name="mdp" size=20></td>
              </tr>
          </table>
          <table align=center border=0>
              <tr><br>
                  <td><input name="valider" type="submit"  value="Ok"></td>
              </tr>
          </table>
  </form>

<?php
echo $libErr;
?>
</body>
</html>


Rien de bien compliqué ...

Page accueil (qui contient les trois sous menu : connexion, admin, utilisateur) ==>

<?php
require("connectBDD.php");
start_session();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
</head>

<body>
<link rel="stylesheet" type="text/css" href="design.css"/>
<form name="monFormMenuGeneral" id="idFormMenuGeneral" method="GET" action="">
<div id="menu">
   <div class = "sous_menu_1">
      <ul>
          <li><a href="index.php?page=connexion">Connexion</a></li>
      </ul>
  </div>
  <?php
    if($_SESSION['niveau'] == '1')
    {
  ?>
  <div class = "sous_menu_2">
      <ul>
          <li><a href="index.php?page=ajoutSite">Ajouter site</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=modifierBatiment">Modifier batiment</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=formulaireSite">Supprimer batiment (ou son type)</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=ajoutCompteur">Ajouter compteur</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=supprimerCompteur">Supprimer compteur</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=ajoutType">Ajouter type</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=supprimerType">Supprimer type</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=ajoutTypeBat">Ajouter type a un site</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=ajoutCout">Ajouter cout</a></li>
      </ul>
      <ul>
            <li><a href="index.php?page=supModifCout">Modification/Supression cout</a></li>
      </ul>
  </div>
  <?php
    }
    if($_SESSION['niveau'] == '2')
    {
  ?>
  <div class = "sous_menu_3">
      <ul>
          <li><a href="index.php?page=factureView">Voir facture</a></li>
      </ul>
  </div>
  <?php
   }
   ?>
</div>
</form>
</body>
</html>


Mais y'a rien qui ne s'actualise ...
Ai je oublié un code pour que cela s'actualise ??

Je vous met ma page index au cas ou cela viendrait de la ...

<body>
<link rel="stylesheet" type="text/css" href="design.css"/>
<div id="conteneur">
    <div id="menu">
      <?php
      require ("accueil.php");
      ?>
    </div>
    <div id="corps">
      <?php
      //if(session_start() != true)
      //{
       // require("connexion.php");
      //}
      //else
      //{
        require($_GET['page'].'.php');
      //}
      ?>
    </div>
</div>
</body>
</html>

Un peu de bidouillage la aussi je dois avoué ^^

Merci d'avance a ceux qui me répondrons, car je me casse les dents la dessus depuis hier ...
Et je suis sure que l'un d'entre vous trouvera cette solution surement toute bete Smiley biggrin
salut, tu as fais un copié coller de ton code , si oui il y a une erreur

mysql_fetch_array et non mssql_fetch_array
Modifié par flattazor (12 Feb 2009 - 19:19)
flattazor a écrit :
salut, tu as fais un copié coller de ton code , si oui il y a une erreur

mysql_fetch_array et non mssql_fetch_array


Merci d'avoir répondu !!
Non il n'y a pas d'erreur de ce coté la, je travaille sous sql server, c la synthaxe...
Mais de toute facon je n'ai pas de problème au niveau de ma connexion! Le problème est que lorsque je me connecte, je n'arrive pas a actualisé mon menu pour qu'il affiche tout mes liens, car au depart je n'ai que le lien pour la page connexion.
Si je decide de mettre ma condition pour afficher tel ou tel menu suivant l'uilisateur dans la page connexion, ca marche niquel, sauf que ca s'affiche dans le corps, et ce n'est pas mon but ...
J'ai surement un probleme de récupération de variable dans la page accueil ...

Mon start session a un petit probleme depuis que j'ai fais mon CSS, je pense que ça peux joué ... Pourtant je récupére bien les infos de l'utilsateur sur la page connexion, mais j'ai ces fameux warning en haut de page ...
Salut,

j'ai un peu la flemme de tout lire dans le détail mais start_session(); n'existe pas ! Smiley cligne
Heyoan a écrit :
Salut,

j'ai un peu la flemme de tout lire dans le détail mais start_session(); n'existe pas ! Smiley cligne


Si, en haut de la page connexion, car il faut toujours le mettre avant tout affichage ...
BiBloOo a écrit :


Si, en haut de la page connexion, car il faut toujours le mettre avant tout affichage ...
Je pense que tu veux parler de session_start(); Smiley lol
En repassant par là je vois 2 autres erreurs :

* tu fais un require dans le body de index.php mais comme cette fonction se comporte comme include (tuto sur Alsa) il va s'agir d'une sorte de copier / coller de la page accueil.php et du coup tu auras dans ton code source 2 éléments DOCTYPE, 2 éléments HTML, 2 éléments BODY, etc.

* pour la même raison le session_start(); ne se retrouve pas en début de page et comme du code html a déjà été envoyé ("headers already sent by") tu as des warnings.


La solution consiste à :

* ne pas mettre d'éléments DOCTYPE HEAD et BODY dans les pages incluses (seulement des éléments qui ont leur place entre <body> et </body>).

* Mettre un unique session_start(); au début de index.php
Modifié par Heyoan (12 Feb 2009 - 22:25)
Merci beaucoup de ta réponse, j'y aurais absolument pas pensé !!
Si j'enlève les DOCTYPE de mes pages qui s'insère dans index, je n'aurai pas de problème d'affichage ou autre ? Car je pensais que cela était indispensable de les mettres ...

Et donc, si je met un session start au debut de index, je n'en mettrais pas dans toute mes autres pages qui sont en liens dans mon menu, c'est bien ca ? Si j'ai bien compris ... Smiley confus

Je vais testé ça de suite et je vous dis quoi !!
Ca marche super, plus de warning !!!
Je comprend maintenant pourquoi j'ai ce problème depuis que j'ai fais mon CSS !!!!

Le menu s'affiche aussi, youpiiii
Mais petit hic, il ne s'affiche qu'après une actualisation ... (si je clique sur le connexion par exemple ou en cliquant sur actualiser dans le navigateur)

Une solution??

Merci beaucoup a Heyoan, je suis sorti de la galère pour le weekend ^^
J'ai trouvéééééééééé

print('<script>alert("Connexion réussie");</script>');
?>
<script>window.location='index.php?page=accueil';</script>
<?php

Ca me ramene sur ma page d'accueil toute bidon qui dit bienvenue lol, mais du coup ca rafraichit mon site et le menu s'affiche !!!