Probléme sur les sessions en PHP

Bonjour tout le monde, je suis nouveau en PHP et j'ai des probléme pour la connection à ma session. Au fait je veux créer un formulaire qui permet d'identifier un groupe d'utilisateur bien determiné à savoir identite qui est une table sur la base de données qui se nomme personnel mais à chaque fois que je me logue il n'ya pas de verification sur l'utilisateur et meme si on remplit pas les champs et que je click sur connexion j'ai automatiquement la page login.php qui est sensé géré la session. Les champs de la table identite sont nom, prenom, pseudo et motpasse. Mais je crois aussi que c'est la facon dont j'ai crée la BD qui pose probléme car j'ai essayé avec dreamweaver et il m'indique que la BD ne contient pas de table. Voila le script php de la session :

<?php
$login=$_POST['login'];
$pass=$_POST['password'];
$con = mysql_connect('localhost','root','');
mysql_select_db('personnel', $con);

$sql = "SELECT * FROM identite WHERE pseudo=$login and motpasse=$pass";
$res = mysql_query($sql);
$exist = ($res);
if(!$exist)
{
echo "<center>Veuillez vérifier vos données</center>";
}
else {

session_start();
session_register("login");
echo "<center>Bienvenue sur votre espace membre : $login</center>";
$sess_nom = session_name();
$sess_id = session_id();
echo "Le nom de la session est :<br> ";
echo $sess_nom." et l'Id est : ".$sess_id."";

}
?>
<html>
<body>
<p><STRONG><H1><U><font face="comic sans ms"><center>INNOVA</center></font></U></H1></STRONG><br></p>
<table width="1000" bgcolor="#0a0f0b" CELLSPACING="0" BORDER="1">
<TR>
<TD><a href="equipement.html"><STRONG><CENTER>Mise à jour équipements</CENTER></STRONG></a></td>
<TD><a href="logiciels.html"><STRONG><CENTER>::Mise à jour Logiciels::</CENTER></STRONG></a></td>
<TD><a href="personnels.html"><STRONG><CENTER>::Consultations/Editions::</CENTER></STRONG></a></td>
</TR>
</TABLE>
</TABLE>
</body>
</html>
Configuration: Windows XP
Firefox 3.0

17 réponses

  1. ??
    y'a pas de javascript c'est que du php
    si tu parle de ça
    javascript:window.location.href='/index.php
    c'est simplement pour rediriger sur ton index
    1. Ok c'est le code en javascript qui me pose probléme car je l'ai jamais fait, donc je m'y retrouve pas en java.
      1. je te file un code que j'ai fait et qui fonctionne tu 'aura plus qu'a l'adapter à ton cas

        session_start();
        $origine=$_SERVER['HTTP_REFERER']; // l'adresse d'ou on vient
        
        //******************** recherche dans la table utilisateur
        if (empty ($_POST['pseudo']) OR empty($_POST['password']))
        {
        	//si c'est le pseudo
        	if (empty($_POST['pseudo']))
        	 {
        	 ?>
        	 <script language="javascript" type="text/javascript">
        	 alert('Vous n\avez pas saisi votre pseudo');
        	 window.location.replace('la page ou que tu veut qu'il soit redirigé');
        	 </script>
        	 <?PHP
        	//echo 'Le champ pseudo est vide';
        	//exit();
        	}
        		//si c'est le psw
        		if (empty($_POST['password'])) 
        		{
        		?>
        	 <script language="javascript" type="text/javascript">
        	 alert('Vous n\avez pas entré de mot de passe');
        	 window.location.replace('la page ou que tu veut qu'il soit redirigé');
        	 </script>
        	 <?PHP
        		}
        }
        // attention c'est du mysqli,la syntaxe est legerement # de mysql
        $connexion=mysqli_connect('tes param de connexion') or die('connexion impossible au serveur verif php' .mysqli_error());
        
        
        //les champs sont remplis
        $client = htmlspecialchars(addslashes($_POST['pseudo'] ));
        //recup de ladresse d'origine
        
        $crypt=md5($_POST['password']); // je crypte le pasw si toi tu ne la pas stocké crypté c'est pas la peine
        
        
        //je lance la recherche dans la table
        
        $sql = "SELECT Login FROM ita_table WHERE Login='$client' AND Mot_passe='$crypt'" ;
        
               $req = mysqli_query($connexion,$sql) or die('Erreur  !<br/>'.$sql.'<br/>'.mysqli_error()); 
            $infomembres = mysqli_fetch_array($req);
        			
        $utilisateur=$infomembres['Login'];
        //affichage des resultats
        
        if (($utilisateur==$client))
         {
        
        
        // si on obtient une réponse, alors l'utilisateur est un membre 
           
         //creation d'un cookie php duree de vie 1 heure accesible depuis partout
        setcookie('login', $utilisateur,time()+3600,'/');
        $_SESSION['visiteur'] = $utilisateur;
        //print_r($_SESSION);
        //msg d'erreur
        echo 'urlorigine'.$urlorigine.'<br/>';
        
        //redirection vers la page d'origine
        
        
        //header ('Location:'.$origine);
        
        	 }
        	 else
        	 {
        	 ?>
        	 <style type="text/css">
        
        body {
        	background-color: #330000;
        }
        
        </style>
        <table border="0" align="center" bgcolor="#FF6666">
          <th> <h4>D&eacute;sol&eacute; ,le pseudo ou le mot de passe sont inconnus.</h4></th>
          <tr>
            <td><input type="button" id="new_essai" value="Refaire un essai ! " onClick="javascript:history.back()">
          
          <input type="button" id="accueil" value="Retourner à l'accueil..." onClick="javascript:window.location.href='/index.php'" />
          </td></tr>
        
        </table>
        </div>	
        	 <?PHP 
        
        }
        ?>
        		
        </body>
        
        </html>
        
        


        voila avec ça ca devrais marcher ce code est fonctionnel
        @+
        1. Excusez moi du retard voila le nouveau code :

          <?php
          session_start();
          if(isset($_POST['login']) && isset($_POST['password'])) // on verifie qu'il existe bien des valeur post
          {
          $login=$_POST['login'];
          $pass=$_POST['password'];
          $con = mysql_connect('localhost','root','');
          mysql_select_db('personnel', $con);

          $sql = "SELECT * FROM identite WHERE pseudo='".$login."' and motpasse='".$pass."' "; //je selectionne uniquement le champ pseudo et motde passe
          $res = mysql_query($sql);

          $row=mysql_fetch_array($res);
          $pseudo=$row['pseudo'];
          $pasw=$row['motpasse'];

          if($pseudo==$login && $psw==$pass) // si le resultat est strictement egale au valeurs pos c'est ok
          {
          echo "<center>Bienvenue sur votre espace membre : $login</center>";
          //.......
          //...
          //tu continue l'affichage de ta page
          }
          }
          else
          {
          echo "<center>Veuillez vérifier vos données</center>";

          }
          ?>
          1. ok je vais essayer et aprés je te dirais et encore une fois merci de ton aide
            1. Oui j'ai rajouté la ligne
              1. alors remplace if(isset etc..
                par if(empty($_POST['login']) || empty($_POST['motpasse']))
                {
                echo 'lcertains champs sont vide';
                //tu renvoie a la page precedente
                }
                else
                {
                //tu continue la vérif
                }
            2. tu a bien rajouté cette ligne

              if(isset($_POST['login']) && isset($_POST['password'])) ?
              1. Ca marche mais le seul probléme maintenant est que meme si je remplit pas les champs et que je click sur connexion j'accéde à la page de session. Je crois que j'ai un probléme de base de données avec mon wamp serveur.
                1. ok alors essie de remplacer list($pseudo, $psw)=mysql_fetch_array($res); par
                  $row=mysql_fetch_array($res);
                  $pseudo=$row['pseudo'];
                  $pasw=$row['motpasse'];


                  modifie egalament ta requete en remettant *
                  $sql = "SELECT * FROM identite WHERE pseudo='".$login."' and motpasse='".$pass."' ";
                  1. J'ai essayé avec ton code mais j'ai une erreur à la ligne 13 :
                    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\AGL\ccm.php on line 13
                    Encore merci Lewis34
                    1. bonsoir , essaye comme ça

                      <?php
                      session_start(); 
                      if(isset($_POST['login']) && isset($_POST['password'])) // on verifie qu'il existe bien des valeur post
                      {
                      $login=$_POST['login'];
                      $pass=$_POST['password'];
                      $con = mysql_connect('localhost','root','');
                      mysql_select_db('personnel', $con);
                      
                      $sql = "SELECT pseudo,motpasse  FROM identite WHERE pseudo=$login and motpasse=$pass"; //je selectionne uniquement le champ pseudo et motde passe
                      $res = mysql_query($sql);
                      
                      list($pseudo, $psw)=mysql_fetch_array($res); //je place le resultat de la requete dans un tableau,comme tu faisais c'etait toujours obligatoirement bon quelquesoit les valeurs
                      
                         if($pseudo==$login && $psw==$pass) // si le resultat est strictement egale au valeurs pos c'est ok
                         {
                         echo "<center>Bienvenue sur votre espace membre : $login</center>"; 
                         //.......
                        //...
                        //tu continue l'affichage de ta page
                         }
                      }
                      else
                      {
                      echo "<center>Veuillez vérifier vos données</center>"; 
                      le resultat de if($pseudo==$login && $psw==$pass) est pas bon donc echec d'authentification
                      }
                      ?>


                      voila j'ai pas testé mais ça devrais le faire.

                      session start doit toujours etre placé au debut du code avant tout autre chose
                      pense a crypter tes mot de passe en md5 pour plus de securité
                      et pour les bases de données n'utilise pas dreamweaver,mais phpmyadmin par exemple
                      en esperant t'avoir eclairé un pezu
                      @+
                      1. ok donc je dois mettre la session start ou effectivement avant
                        $con = mysql_connect('localhost','root','');
                        mysql_select_db('personnel', $con);
                        ou bien c'est aprés et pour les fonctions que tu connais pas c'est lesquelles merci d'avance
                        1. ^^
                          J'ai regardé ton code te y' a beaucoup de fonction php que je connais pas.
                          Mais, le session_start() doit être mis en tout début de page, avant tout autre code php... Sinon, ça marche pas.