Sessions, encore elle...

Eléphant du PHP | 71 Messages

31 janv. 2006, 12:07

Bon voici tout ce qui te faut :

Page index.php (va te permettre de te loguer...)
<?php
/* Traitement du formaulaire pour l'accès à l'espace membre */
											
// on teste si le visiteur a soumis le formulaire de connexion

if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['membre_login']) && !empty($_POST['membre_login'])) && (isset($_POST['membre_pass']) && !empty($_POST['membre_pass']))) {

				// On se connecte à la base de données
				
        $base = mysql_connect ('localhost', 'root', ''); 
        mysql_select_db ('gestion', $base);

        // requête pour la déclaration de la session id
        
        $query='SELECT * FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
	  		$result=@mysql_query($query);
	  		$row=@mysql_fetch_array($result);

        // on teste si une entrée de la base contient ce couple login / pass
        
        $sql = 'SELECT count(*) FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
        
        // On libère l'espace mémoire et on ferme la base de données
        
        mysql_free_result($req);
        mysql_close();
        
        // si on obtient une réponse, alors l'utilisateur est un membre
        
        if ($data[0] == 1){
        		
        		// On déclare des lors les variables de sessions pour la suite du programme
        		
        		session_start(); 																		// variable de session
            $_SESSION['membre_login'] = $_POST['membre_login']; // Variable de session contenant le pseudo du membre
						$_SESSION['membre_id'] = $row[0];										// Variable de session contenant l'id du membre        
            header('Location: membre.php');											// On redirige le membre sur la page membre
            exit();																							// On sort
        }
        
        // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
        
        elseif ($data[0] == 0) {
        	
         //$erreur = 'Compte non reconnu.';
					
					// On affiche une boîte de dialogue informant la personne que les coordonnées saisies dans le formulaire sont incorrecte
					
					echo '<SCRIPT language="JavaScript" type="text/javascript">	
								window.alert("Compte non reconnu dans la base de données");
								</script>';
        }
        
        // sinon, alors la, il y a un gros problème
        
        else {
        	
        		// Déclaration du message d'erreur 
        		
            $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
        }
    }
    else {
    	
    		// Declaration du message d'erreur
    		
        $erreur = 'Au moins un des champs est vide.';
    }
}

	                    /* Fin traitement du formaulaire pour l'accees a l'espace membre */						
?>

<!--------------------Gestion de la page avec l'affiche des différents éléments--------------------->
<html>
<head>
<title></title>

</head>

<!-----------------------Début du traitement de l'affichage de la page-------------------------------->
<body>
<br>
<table width="250" border ="0" align="center">
<tr>
<td>
<form action="index.php" method="post" name="FormMemo">
Nom : 
</td>
<td>
<input type="text" name="membre_login" value="<?php if (isset($_POST['membre_login'])) echo stripslashes(htmlentities(trim($_POST['membre_login']))); ?>">
</td>
</tr>
<tr>
<td>
Passe : 
</td>
<td>
<input type="password" name="membre_pass" value="<?php if (isset($_POST['membre_pass'])) echo stripslashes(htmlentities(trim($_POST['membre_pass']))); ?>">
</td>
</tr>
<tr>
<td colspan="2">
<center><br>
<input type="submit" name="connexion" value="Connexion" onClick="javascript: return saisieOK(document.FormMemo);"></center>
</form>
</td>
</tr>
<tr>
<td>
<a href="inscription.php">Vous inscrire</a>
</td>
</tr>
</table>
</div>
</center>
</td>
</tr>
<tr>
<td>
<br>
</td>
</tr>
<tr>
<td bgcolor="#A3C1FF" colspan="3" height="1" class="tdSpacer"><img src="fichier_images/spacer.gif" width="1" height="1" border=0 /></td>
</tr>
</table>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
Page membre.php (la page du membre une fois loggué) :
<?php
session_start();
if (!isset($_SESSION['membre_login'])) {
    header ('Location: index.php');
    exit();
}
?>
<htlm>
<title>membre</title>
<head>
</head>
<body>
<center>
	<div class="blocTxt">
		<center>Bienvenue <b><?php echo($_SESSION['membre_login']); ?></b> dans votre espace de gestion</center>
	</div>
</center>
<br>
<div class="listeFilms">
	<table width="500" cellspacing="0" align="center">
		<thead>
			<tr>
				<td align="center">
					<img src="fichier_images/icon/icon_copy.gif"> Outils OfficeGestion
				</td>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td bgcolor="#A3C1FF" colspan="3" height="1" class="tdSpacer"><img src="fichier_images/spacer.gif" width="1" height="1" border=0 /></td>
			</tr>
		</tbody>
	</table>
</div>
<br>
<br>
<center>
	<div class="blocTxt">
		<p>Gestion multimédia</p><hr>
		<img src="fichier_images/dvdtech.gif">
	</div>
</center>
<center><table border="0" width="50%">
	<tr>
		<td>
			essai
			<hr width="100%">
		</td>
	</tr>
</table></center>
<p>Accéder aux outils : </p>
</BODY>
</html>
La page pour l'inscription :
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
    // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
    if ((isset($_POST['membre_login']) && !empty($_POST['membre_login'])) && (isset($_POST['membre_pass']) && !empty($_POST['membre_pass'])) && (isset($_POST['membre_pass_confirm']) && !empty($_POST['membre_pass_confirm']))) {
        // on teste les deux mots de passe
        if ($_POST['membre_pass'] != $_POST['membre_pass_confirm']) {
            $erreur = 'Les 2 mots de passe sont différents.';
        }
        else {
            $base = mysql_connect ('localhost', 'root', ''); 
            mysql_select_db ('gestion', $base);
            
            // on recherche si ce login est déjà utilisé par un autre membre
            $sql = 'SELECT count(*) FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'"';
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            $data = mysql_fetch_array($req);

            if ($data[0] == 0) {
                $sql = 'INSERT INTO gestion_membre VALUES("", "'.addslashes($_POST['membre_login']).'", "'.md5(addslashes($_POST['membre_pass'])).'")';
                mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

                session_start();
                $_SESSION['membre_login'] = $_POST['membre_login'];
		    
		    echo "<br><br><center><font color='#990000'>Inscription réussie<br> Vous pouvez désormais vous connecter <a href=\"index.php\">ici</a></font></center><br>";
                //header('Location: membre.php');
                exit();
            }
            else {
                $erreur = 'Un membre possède déjà ce login.';
            }
        }
    }
    else {
        $erreur = 'Au moins un des champs est vide.';
    }
}
?>
<html>
<head>
<title>Inscription</title>
<LINK REL=stylesheet TYPE="text/css" HREF="css.css">
</head>

<body bgcolor="#f4f4f4">
<h3><p style="text-align: center; font-family: 'times new roman">Création d'un compte à l'application de gestion</p></h3><br />
<hr width="50%"><br>
<center>
<table>
	<tr>
		<td>
			<form action="inscription.php" method="post">
			Login : 
		</td>
		<td>
			<input type="text" name="membre_login" value="<?php if (isset($_POST['membre_login'])) echo stripslashes(htmlentities(trim($_POST['membre_login']))); ?>">
		</td>
	</tr>
	<tr>
		<td>
			Mot de passe : 
		</td>
		<td>
			<input type="password" name="membre_pass" value="<?php if (isset($_POST['membre_pass'])) echo stripslashes(htmlentities(trim($_POST['membre_pass']))); ?>">
		</td>
	</tr>
	<tr>
		<td>
			Confirmation du mot de passe : 
		</td>
		<td>
			<input type="password" name="membre_pass_confirm" value="<?php if (isset($_POST['membre_pass_confirm'])) echo stripslashes(htmlentities(trim($_POST['membre_pass_confirm']))); ?>">
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<br><center><input type="submit" name="inscription" value="Inscription"></center></form>
		</td>
	</tr>
</table>
</center>
<hr width="50%">
<p style="text-align: center; font-family: 'times new roman"><a href="index.php">Retour</a></p>			
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>

La page pour la déconnexion.php :

<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>
Et pour finir la base de données :

Code : Tout sélectionner

CREATE TABLE `gestion_membre` ( `membre_id` int(11) NOT NULL auto_increment, `membre_login` text NOT NULL, `membre_pass_md5` text NOT NULL, PRIMARY KEY (`membre_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

Eléphant du PHP | 74 Messages

31 janv. 2006, 13:21

Monsieur lecobra_20, je vous remercie de tout mon coeur, de toute mon âme, de tout ce que je peux :pouce:

Ca marche nickel, plus qu'a comprendre ton code et l'inserer dans mes pages.

Thanks!
:agenouille:

Eléphant du PHP | 71 Messages

31 janv. 2006, 14:14

De rien, c'était avec plaisir. Tu verras le code est assez simple à comprendre, de plus j'ai tout commenté.
Sinon n'hésite pas si tu as encore un problème...

ViPHP
ViPHP | 2144 Messages

31 janv. 2006, 14:18

Il vaudrait mieux virer les @, surtout devant les appel à la base de donée, sinon quand il y aura un problême, le débuggage sera pas triste.

Eléphant du PHP | 71 Messages

31 janv. 2006, 15:09

Oui il a raison, cela sera mieux pour toi de debbeguer si besoin. Car la @ empêche le renvois d'erreur surtout pour les requêtes. C'est important pour voir ou se situ dasn un premier temps l'erreur.